导出时删除 Clickhouse 中字符串的引号

Posted

技术标签:

【中文标题】导出时删除 Clickhouse 中字符串的引号【英文标题】:Remove quotes for String in Clickhouse while exporting 【发布时间】:2018-11-26 09:12:30 【问题描述】:

我正在尝试将数据从 clickhouse cli 导出到 csv。 我有一个字符串字段,当导出为 CSV 时,该字段周围有引号。 我想在没有quotes 的情况下导出,但找不到任何可以设置的设置。

我浏览了https://clickhouse.yandex/docs/en/interfaces/formats,但价值观部分提到了

字符串、日期和带时间的日期以引号输出

对于 JSON,它们有一个标志,用于删除 Int64 和 UInt64 周围的引号

为了与 javascript 兼容,默认情况下,Int64 和 UInt64 整数用双引号括起来。要去除引号,您可以将配置参数 output_format_json_quote_64bit_integers 设置为 0。

我想知道 CSV 中的字符串是否也有这种标志。

我正在使用以下命令导出

clickhouse client --multiquery --host="localhost" --port="9000" --query="SELECT field1, field2 from tableName format CSV"  > /data/content.csv

如果没有任何效果,我想尝试从 shell 中删除引号作为最后一件事。

如果我能在生成 CSV 时删除引号,我们将不胜感激。

【问题讨论】:

【参考方案1】:

不,没有。但是,您可以通过arrayStringConcat 轻松实现此目的。

SELECT arrayStringConcat([toString(field1), toString(field2)], ',') from tableName format TSV;

编辑

为了使Nullable 输出为空字符串,您可能需要if 函数。

if(isNull(field1), '', assumeNotNull(field1))

这适用于任何类型,而单独的assumeNotNull 仅适用于String

【讨论】:

谢谢!那行得通。只是分享我遇到的一个问题,以便您可以编辑您的答案,我的字段是可为空的字符串,因此函数 arrayStringConcat 不适用于它。我通过使用assumeNotNull 找到了解决方法。所以查询变成了SELECT arrayStringConcat([assumeNotNull(field1), assumeNotNull(field2)], ',') from tableName format TSV; @JigarMehta 好的,看起来您希望空字符串表示 null 而不是花哨的 "ᴺᵁᴸᴸ" 。 我对“NULL”很好,但函数 arrayStringCocat 失败,字符串类型可以为空 @JigarMehta 啊,这是有道理的。 Null 通过 AST 传播。

以上是关于导出时删除 Clickhouse 中字符串的引号的主要内容,如果未能解决你的问题,请参考以下文章

从 R 中的字符向量中删除引号

导出 BQ 表时是不是可以指定 CSV 引号字符?

如果存在,则删除双引号之间的第一个逗号

大数据(5p)ClickHouse异于平常SQL的语法

从 CSV 文件中删除字符

大数据ClickHouse(十六):ClickHouse SQL语法之DML 操作