Snowflake文档说:支持CSV和半结构化文件类型;但是,即使加载半结构化数据(例如 JSON),您也应该将 CSV 设置为文件格式类型(默认值)。您可以使用相应的文件格式(例如 JSON),但转换中的任何错误都会停止 COPY 操作,即使您设置 ON_ERROR 选项来继续或跳过文件。
https://docs.snowflake.net/manuals/sql-reference/sql/copy-into-table.html https://docs.snowflake.net/manuals/sql-reference/sql/copy-into-table.html
另一方面,我发现 on_error 选项适用于 NDJSON 文件,至少当您在阶段级别设置文件类型时。供测试用,
我创建了以下 NDJSON 文件进行测试:
{ "id":1, "name":"Gokhan", "location":"Netherlands" }
{ "id":2, "name":"Hans", location:Germany -- broken json #1 }
{ "id":3, "name":"Joe", "location":"UK" }
{ broken json #2 }
{ "id":4, "name":"Mike", "location":"US" }
我创建了一个文件类型对象,并使用此文件类型创建了一个阶段(您可以更改现有阶段并设置文件类型):
CREATE FILE FORMAT myformat TYPE = json;
CREATE STAGE mystage FILE_FORMAT = (FORMAT_NAME = myformat);
我将示例 NDJSON 文件上传到此阶段,创建了一个 Snowpipe 来加载它:
CREATE PIPE mypipe AS
COPY INTO mytable
FROM (SELECT $1:id, $1:name, $1:location FROM @mystage)
ON_ERROR = CONTINUE;
当我刷新管道时,它成功地从文件中加载了“有效”(3)条记录。