从丢失行的阶段复制雪花
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"
因此,直接比较行与加载的行可能会产生不同的结果。
我一直在使用 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"
因此,直接比较行与加载的行可能会产生不同的结果。