关于导入CSV格式数据中存在转义字符的问题,如何处理
发布于 2 个月前 作者 hahala 243 次浏览 来自 问答

各位大大好: 本人最近在研究clickhouse数据库,想使用原有的数据导入到clickhouse数据库中做查询方面的测试。 遇到如下数据导入失败的问题: (1)csv文件中一条数据格式如下: “22237202”,“3232253618”,“62443”,“3C-8C-40-C6-C2-A7”,“2071802415”,“143”,“00-0F-E2-41-5E-5B”,“0”,"",“0”,“unknown”,“192.168.70.178”,“0”,“IP_192.168.70.178”,"","","",“0”,“1”,“0”,“1”,"",“16”,“0”,“1”,"-1","","","","AAA@163.com","","\“AAA\”","","","","","","","","","","",“GBK”,“0”,"","",“2018-06-30 10:48:50” 注:记录中的"AAA"为脱敏数据,实际是相同的字符串。 实际将上述记录中的(…,"\“AAA\”",…)内含两个转义的双引号字符去掉(变成…,“AAA”,…),则该记录可以正常导入。 实际的数据类似上述转义的字符还有很多,形如: “\”","\’","\,"等。 导入语句: clickhouse-client --query=“INSERT INTO test_db.testlog FORMAT CSV” < test_data/201806/2018062710

请教的问题是:
		在导入数据时,有没有参数类似mysql的导入语句中ESCAPED BY '\\\\'的参数,可以让导入数据的命令知道如何解析csv文件中转义的数据呢?
		烦请各位大大不吝赐教,谢谢!
3 回复

CSV中,对双引号的转义是两个双引号,即"",而不是\"

也就是说,你的CSV文件不符合CSV规范,而不是不符合ClickHouse规范。 建议读一下CSV规范:https://tools.ietf.org/html/rfc4180

  1. If double-quotes are used to enclose fields, then a double-quote appearing inside a field must be escaped by** preceding it with another double quote**. For example:

    “aaa”,“b”“bb”,“ccc”

经过我们实测,ClickHouse解析输入的CSV,是实现了CSV规范的。

@kikanjuu 谢谢您的回复。经过一上午的确认与定位,确实是转化后的csv格式与RFC中定义的有所出入。 根据您给的提示,结合csv的规范重写了数据后,所有数据都可以导入进去了。 非常感谢!!!

@hahala 不客气,请吃饭:)

回到顶部