我正在尝试使用vsql CLI将文件上传到vertica。我的命令看起来像这样(它只是一行,但为了便于阅读,我在这里用反斜杠打破它):
vsql "-c set timezone to 'UTC'; \
copy etl.test_data1 (col1,col2,col3)\
from local 'test_data1.csv.gz' \
gzip delimiter E'\\t' \
exceptions '/home/error/etl.test_data1.err' \
NULL AS 'NULL' \
NO ESCAPE \
rejected data '/home/rejected/etl.test_data1.rejected'" \
-p5433 -hverticahostname -Uusername -ddatabase -vON_ERROR_STOP=ON
当我运行该命令时,它执行时没有错误,但没有加载任何行,数据直接进入被拒绝的文件。
当我在同一文件的非压缩版本上运行此csv-load命令时,它会将数据加载到表中而不会被拒绝:
vsql "-c set timezone to 'UTC'; \
copy etl.test_data1 (col1,col2,col3)\
from local 'test_data1.csv' \
delimiter ',' \
exceptions '/home/error/etl.test_data1.err' \
NULL AS 'NULL' \
NO ESCAPE \
rejected data '/home/rejected/etl.test_data1.rejected'" \
-p5433 -hverticahostname -Uusername -ddatabase -vON_ERROR_STOP=ON
我尝试运行该命令时没有明确的分隔符设置,结果相同。我尝试使用UNIX gzip命令制作gzip,并使用python gzip模块对其进行编码,并得到相同的结果(以防文件以某种方式损坏)。
我最终希望通过作业上传的文件很大,而csv不是定期上传的高性能选项。有关为什么gzip加载失败的任何建议吗?
编辑:评论中的解决方案;在csv上执行gzip不会更改分隔符 - 仍然需要使用','作为分隔符,而不是制表符!