问题描述:
使用:
$ clickhouse-client --query="INSERT INTO t_test FORMAT CSV" < data.csv
把csv文件导入到Clickhouse表t_test时报错:
问题分析:
虽然最后的错误是因为字段field37类型是Nullable(DateTime)但对应数据不是日期格式的字符串造成的。但经分析主要原因是同样是Nullable(DateTime)类型的字段field31,field32在匹配数据时各匹配了4列数据,才造成了后续字段与数据对应错误.
...
column 30, name: field31, type: Nullable(DateTime), parsed text:"2015-10-28 00:00:00"
...
column 33, name: field34, type: Nullable(DateTime), parsed text:"NULL,NULL,NULL,NULL"
解决方法:
修改类型为Nullable(DateTime)的字段类型为Nullable(String)导入正常。
如果字段必须保持为Nullable(DateTime)类型,可以先建立一个同列名的临时表t_table_tmp,把数据导入到临时表后再使用sql(insert into t_table xxxx as select * from t_table_tmp)语句把临时表t_table_tmp的数据插入到正式表t_table中.
这也是我们做ETL时常用的技巧。