在使用clickhouse-client向ck中导入csv文件时,当csv中有个别行数据格式错误时,整个文件就插入失败了,经常会导致丢数据。
经过一番搜索,发现ck提供了两个参数可以跳过错误行,其他的行正常入库,可以满足要求。
input_format_allow_errors_num
设置从文本格式(CSV、TSV等)读取时可接受的最大错误数。
默认值为0。
如果在读取行时发生错误,但错误数仍然小于input_format_allow_errors_num时,则ck将忽略该行并转到下一行。
input_format_allow_errors_ratio
设置从文本格式(CSV、TSV等)读取时允许的最大错误百分比。错误百分比设置为介于0和1之间的浮点数。
默认值为0。
如果在读取行时发生错误,但错误比率小于input_format_allow_errors_ratio,则ck将忽略该行并转到下一行。
两个参数可以单独设置,当超过阈值时才抛出错误。
也可以同时设置,当两个阈值都超过时,再抛出错误。
在配置文件中添加以下行即可,是作用于整个ck的,不建议这么配置。
<input_format_allow_errors_num>10000</input_format_allow_errors_num>
<input_format_allow_errors_ratio>0.1</input_format_allow_errors_ratio>
在插入时指定如下配置,配置是针对本次插入的,建议使用这种配置。
--input_format_allow_errors_num=1
--input_format_allow_errors_ratio=0.1
指定允许错误条数为10000,错误比率为0.1
cat a.csv | clickhouse-client --host 127.0.0.1 --port 9000 --database default \
--user default --query="INSERT INTO tb_a FORMAT CSVWithNames " \
--format_csv_delimiter="|" --input_format_allow_errors_num=10000 \
--input_format_allow_errors_ratio=0.1