我正在尝试使用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”是否应该仅跳过具有最大大小的记录并在其之前和之后加载记录?
答案 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,因为这也会使您的有效负载变薄。希望有帮助。