【问题标题】:Snowflake COPY INTO from JSON - ON_ERROR = CONTINUE - Weird Issue从 JSON 复制雪花 - ON_ERROR = CONTINUE - 奇怪的问题
【发布时间】:2020-01-14 22:35:57
【问题描述】:

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

表:

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 客户端中运行“信息加载数据”。

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

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

【问题讨论】:

    标签: sql snowflake-cloud-data-platform


    【解决方案1】:

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

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

    • 您的文件中有多少条记录?
    • 加载了多少?
    • 第一次遇到错误是在哪一行?

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

    【讨论】:

    • 1. 32361 记录 2. 5351 已加载 3. 5352 是错误行
    • 您能否确认 5,321 之后的任何行都没有超出相同的大小限制?您应该在暂存文件之前尝试减小文档大小,对于 json 文档来说 16MB 似乎很大。
    • 是的,5352 之后的行没有最大大小。删除第 5352 行并成功加载文件后,我可以加载整个文件。是的,我知道应该减少记录大小,但它来自我们无法控制的来源。
    • 我不确定为什么 5352 之后的行不会被加载。这将是您需要使用 Snowflake 登录的支持票。您对 ON_ERROR 参数的理解是正确的。抱歉,我无法提供更多帮助
    • 我在这里看到了 ON_ERROR=CONTINUE 的间接引用。 docs.snowflake.net/manuals/sql-reference/sql/… 转到-> VALIDATION_MODE = RETURN_n_ROWS | RETURN_ERRORS | RETURN_ALL_ERRORS 然后检查“RETURN_ALL_ERRORS”的注释返回在 COPY 语句中指定的所有文件中的所有错误,包括由于在加载期间 ON_ERROR 复制选项设置为 CONTINUE 而在早期加载期间部分加载的错误文件。看来我们的理解有误。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      我部分同意克里斯。 ON_ERROR=CONTINUE 选项仅在文件中实际上有超过 1 个 JSON 对象时才有帮助。如果它是 1 个大型对象,那么在使用 ON_ERROR=CONTINUE 时您根本不会收到错误或加载的记录。

      如果您知道您的 JSON 有效负载小于 16mb,那么一定要试试 strip_outer_array = true。此外,如果您的 JSON 有很多空值(“NULL”)作为值,请使用 STRIP_NULL_VALUES = TRUE,因为这也会减少您的有效负载。希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2019-01-07
        • 2021-06-25
        • 1970-01-01
        • 2021-11-11
        • 2015-12-20
        • 1970-01-01
        • 1970-01-01
        • 2014-03-03
        • 2021-06-26
        相关资源
        最近更新 更多