2

我正在尝试使用 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 命令和使用 python gzip 模块对其进行编码来制作 gzip,并得到了相同的结果(以防文件以某种方式损坏)。

我最终想通过作业上传的文件很大,而 csv 不是常规上传的高性能选项。关于 gzip 加载失败的原因有什么建议吗?

编辑:评论中的解决方案;在 csv 上执行 gzip 不会更改分隔符 - 仍然需要使用 ',' 作为分隔符,而不是制表符!

4

0 回答 0