从丢失行的阶段复制雪花

Snowflake COPY INTO from stage losing rows

我一直在使用 PUT 命令将 CSV 数据推送到雪花中以暂存文件,然后 COPY INTO 将内容放入目标 table:

snowsql -c myConnection -q 'PUT file://C:\MyData.csv @~/MyStagingArea;'

snowsql -c myConnection -q 'USE WAREHOUSE MY_WH; COPY INTO MY_TABLE FROM @~/MyStagingArea/MyData.csv.gz FILE_FORMAT = (type=csv validate_utf8=false null_if=('''') field_optionally_enclosed_by=''""'');'

在大多数情况下,这工作正常。但是对于非常大的文件,我将它们分成 9,000,000 个块并使用 powershell 脚本加载它们。最终,我注意到这些较大的文件丢失了行。

检查每个文件上传后我发现了问题。沿线的某个地方,在某些情况下,行正在丢失,但命令没有记录任何错误。

+----------------------------------+
| status                           |
|----------------------------------|
| Statement executed successfully. |
+----------------------------------+
1 Row(s) produced. Time Elapsed: 0.175s
+----------------------------------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
| file                         | status | rows_parsed | rows_loaded | error_limit | errors_seen | first_error | first_error_line | first_error_character | first_error_column_name |
|----------------------------------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------|
| DMyStagingArea/MyData.csv.gz | LOADED |     8999997 |     8999997 |           1 |           0 | NULL        |             NULL |                  NULL | NULL                    |
+----------------------------------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
1 Row(s) produced. Time Elapsed: 31.520s

这只有三行,但这个特定的负载超过 30 个文件,到最后,它删除了大约 4000 万行而没有错误。我的 snowsql 日志文件中也没有错误。

鉴于没有错误消息和数据大小,我不知道从哪里开始寻找问题。有没有人知道什么可能导致此过程在不报错的情况下删除行?

一个合理的解释是 CSV 包含多行条目(即条目 break/carriage return 在 " 中引用)。

示例:

col1,col2
1,"This
entry has two lines"

因此,直接比较行与加载的行可能会产生不同的结果。