雪花:加载时出现错误限制时无法复制?

Posted

技术标签:

【中文标题】雪花:加载时出现错误限制时无法复制?【英文标题】:Snowflake: Fail COPY INTO incase of error limit while loading? 【发布时间】:2020-07-07 17:08:37 【问题描述】:

是否可以在将数据加载到雪花表时设置错误限制。我正在使用 COPY INTO 选项。我知道有RETURN_FAILED_ONLYVALIDATION_MODE 之类的选项,但这不支持如果达到错误限制然后失败COPY INTO 否则通过忽略失败记录继续加载它。

【问题讨论】:

我认为我们没有这个选项,因为解决方法是在结束时执行复制命令复制命令检查错误计数,如果计数可接受,然后提交事务。 【参考方案1】:

我相信您正在寻找的是 SKIP_FILE_num 或 SKIP_FILE_num%。当一定数量的记录或一定百分比的记录失败时,这将跳过文件。当一个文件被跳过时,它将以 FAILED 状态列出。

https://docs.snowflake.com/en/sql-reference/sql/copy-into-table.html

Snowflake 目前没有您在负载的所有文件中寻找的等效项。但是,根据您编写/执行 COPY INTO 命令的方式,您可以使用事务包装 COPY INTO 命令,检查 COPY INTO 的输出,确定它是在阈值之内还是之外,然后提交或回滚交易。这将完成您正在寻找的内容,但需要一些自定义编码才能完成。

【讨论】:

谢谢,Mike 的回答,看起来SKIP_FILE 会跳过该文件,但仍会从其他文件加载数据,并且不会使整个 COPY INTO 命令失败?如果错误的数量在 COPY INTO 命令中达到了一定的限制,我正在寻找一个整体的失败模式。 因此,您是说如果您有 10 个文件,其中 1 个文件有 >100 个错误,并且您希望因 >100 个错误而失败,那么您不希望这 10 个文件中的任何一个被加载?如果是这种情况,我可能需要测试 SKIP_FILE_num 参数以查看它是真正按文件还是按文件批次。 假设ERROR_LIMIT设置为100,有5个文件,第一个文件有20个错误,第二个文件有30个错误,第三个文件有70个错误,第四和第五个没有错误,但合并有 120 个大于 100。在这种情况下,整个 COPY INTO 操作应该会跳过所有文件而失败。此功能在 Teradata docs.teradata.com/reader/yxBNqiK9WZh15WoRzMnBrw/… 我正在寻找 Snowflake 中的等效选项 Snowflake 目前没有您正在寻找的等价物。但是,根据您编写/执行 COPY INTO 命令的方式,您可以使用事务包装 COPY INTO 命令,检查 COPY INTO 的输出,确定它是在阈值之内还是之外,然后提交或回滚交易。这将完成您正在寻找的内容,但需要一些自定义编码才能完成。

以上是关于雪花:加载时出现错误限制时无法复制?的主要内容,如果未能解决你的问题,请参考以下文章

尝试将 csv 文件加载到雪花数据库时出现“在预期解析列时到达记录结尾”错误

使用 Python 连接时出现雪花角色错误

在 python 中执行雪花 SQL 语句时出现雪花 python 错误

使用 Azure 数据工厂将数据加载到雪花时出现问题

将文件从本地上传到雪花表阶段时出现问题

雪花 - 在日期本身中复制分隔符错误字符“\”,如“BOB\Y”,因此数据复制错误