导出时删除 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 中字符串的引号的主要内容,如果未能解决你的问题,请参考以下文章