从JSON复制雪花-ON_ERROR =继续-奇怪的问题

时间:2020-01-14 22:35:57

标签: sql snowflake-cloud-data-platform

我正在尝试使用COPY INTO命令将暂存区域(S3)中的JSON文件加载到舞台表中。

表格:

create or replace TABLE stage_tableA  (
    RAW_JSON VARIANT NOT NULL
);

复制命令:

copy into stage_tableA from @stgS3/filename_45.gz  file_format = (format_name = 'file_json')

执行上述操作时提供了以下错误(提供了示例)

SQL错误[100069] [22P02]:解析JSON时出错:文档太大,最大大小为16777216字节如果您想继续加载 遇到错误时,请使用其他值,例如“ SKIP_FILE”或 ON_ERROR选项的'CONTINUE'。有关加载的更多信息 选项,请在SQL客户端中运行“ info loading_data”。

当我输入“ ON_ERROR = CONTINUE”时,记录被部分加载,即直到记录的大小超过最大大小。但错误记录加载后没有记录。

“ ON_ERROR = CONTINUE”是否应该仅跳过具有最大大小的记录并在其之前和之后加载记录?

3 个答案:

答案 0 :(得分:1)

是的,ON_ERROR=CONTINUE跳过了有问题的行,并继续加载文件的其余部分。

为帮助我们提供更多见解,您能否回答以下问题:

  • 您的文件中有多少条记录?
  • 有多少人被装载?
  • 首先在哪一行遇到错误?

您可以使用COPY_HISTORY()表函数找到此信息

答案 1 :(得分:0)

尝试为文件格式设置选项 strip_outer_array = true ,然后再次尝试加载。

以下文章中记录了加载大型半结构化数据的注意事项:

https://docs.snowflake.com/en/user-guide/semistructured-considerations.html

答案 2 :(得分:0)

我部分同意克里斯。 ON_ERROR = CONTINUE选项仅在文件中实际上有1个以上JSON对象的情况下才有用。如果它是1个大型对象,那么使用ON_ERROR = CONTINUE时,您将不会简单地出错或加载记录。

如果您知道您的JSON有效载荷小于16mb,那么绝对可以尝试strip_outer_array = true。另外,如果您的JSON包含大量的null(“ NULL”)作为值,请使用STRIP_NULL_VALUES = TRUE,因为这也会使您的有效负载变薄。希望有帮助。