Snowflake COPY INTO 从阶段丢失行

问题描述

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

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 包含多行条目(即在 " 内引用的带有换行符/回车符的条目)。

示例:

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

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