【问题标题】:Snowflake Copy Into : Is there a Skip Header option but for the end of a file?雪花复制到:是否有跳过标题选项,但文件末尾?
【发布时间】:2021-12-10 00:13:52
【问题描述】:

我正在尝试将文件复制到一个表格中,该表格的开头有文本(想想日期等),然后是结尾的文本(也像日期、“数据结束”等)。其余数据是我可以使用字段分隔符的分隔值。我知道我可以跳过 COPY INTO 中的标题,但是有没有办法在某个点结束 COPY INTO,这样它就不会尝试提取数据文本的结尾?

【问题讨论】:

  • 如果你只加载最后一行的文件会发生什么?它会抛出错误吗?你会让雪花“忽略有错误的行”吗?
  • 如何忽略有错误的行?由于与 varchar 长度不匹配,它会引发错误,但是当我使列 varchar 更长时会加载
  • ON_ERROR = CONTINUE 或 ON_ERROR = SKIP_FILE_2 可能适用于此。

标签: csv copy snowflake-cloud-data-platform


【解决方案1】:

您可以告诉 Snowflake 将整个文件复制到一个表中,并忽略错误:

copy into table1
from @stage1
on_error = continue

如果文件的最后一行抛出错误,那么这将很高兴地导入所有格式正确的行。

【讨论】:

  • 这带来了永远不会失败的不幸后果,即使其中还有另一条记录也不正确。这就是为什么我建议SKIP_FILE_2 如果其中有“另一个”问题记录则不会加载文件。
  • 确实如此,但也请参阅SKIP_FILE action buffers an entire file whether errors are found or not. For this reason, SKIP_FILE is slower than either CONTINUE or ABORT_STATEMENT 的注释。还有一个选项 VALIDATION_MODE 在加载前检查错误。
  • 只需要权衡性能需求与适当地使负载失败的能力。
【解决方案2】:

按照 Felipe 的建议,首先在 VALIDATION_MODE=RETURN_ALL_ERRORS 或 RETUR_2_ROWS 中测试您的文件,然后看看它的行为如何。根据您可以决定使用哪个选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 2020-10-02
    • 2022-07-18
    • 1970-01-01
    • 2016-04-28
    • 2020-11-03
    相关资源
    最近更新 更多