【问题标题】:Snowflake Validate Option does not return Failed records When using TO_DATE function in Copy Command在复制命令中使用 TO_DATE 函数时,雪花验证选项不返回失败记录
【发布时间】:2021-01-02 11:06:04
【问题描述】:

我使用的复制命令如下:

从@%test2 file_format = (format_name = 'CSV') 复制到 test2 on_error = 'CONTINUE';

我的文件在数字字段中包含一些字符数据(对于所有记录),因此复制结果为 LOAD_FAILED,我可以使用以下查询获取失败记录(在这种情况下,所有记录都是失败记录):

select * from table(validate("TEST2", job_id=>'对应的JOB ID'));

我也试过给出无效的日期,但仍然从上面的查询中得到了所有坏记录。

现在我尝试了如下复制命令: 复制到 test2(test1,test2) from (select $1,to_date($2,'YYYYDDD') from @%test2) file_format = (format_name = 'CSV') on_error = 'CONTINUE';

复制结果再次为 LOAD_FAILED 但我现在没有从以下查询中获得任何失败记录: select * from table(validate("TEST2", job_id=>'对应的JOB ID'));

这是否只适用于没有任何复制功能的普通复制或有任何其他原因?

在看到下面 Mike 的回复后,再添加一个示例: 档案资料: 1,2018-1-34 2,2/3/2016 3,2020124

table->创建表test2(test1编号,test2日期)

从 (select $1,to_date($2,'YYYYDD') from @%test2) 复制到 test2(test1,test2) file_format = (format_name = 'CSV') on_error = 'CONTINUE';

第一条和第三条记录在验证查询中可用。在这种情况下,只有第二条记录不存在。有点奇怪。 (所有三个记录都复制失败)。

正如 Mike 在下面的 cmets 中所说,验证不适用于复制中的转换数据,但为什么在这种情况下它提供两条记录。它应该完全不提供任何东西或全部提供?

【问题讨论】:

  • 这是正确的还是您在这篇文章中有错字? 'YYYYDDD'
  • 这是正确的,我正在尝试 Julian Date 2018134。我知道这是无效的语法,雪花没有 DDD 但我想了解为什么错误记录不在验证选项中。我什至尝试使用 YYYYDD 仍然是相同的结果(只是为了确保 DDD 不是在 Validate 查询中不显示失败记录的原因),在 validate 查询中仍然没有记录。 (请注意我的数据类似于 2020134 等,这就是为什么复制失败并显示 YYYYDD)。

标签: snowflake-task snowflake-pipe snowflake-cloud-data-platform


【解决方案1】:

根据文档,由于您在 COPY INTO 期间转换数据,因此 VALIDATE 功能将不再起作用:

此函数不支持 COPY INTO 语句 在加载期间转换数据。

https://docs.snowflake.com/en/sql-reference/functions/validate.html#usage-notes

【讨论】:

  • 我试图加载以下文件: 1,2018-1-34 2,2/3/2016 3,2020124 复制到 test2(test1,test2) from (select $1,to_date($2,' YYYYDD') 来自@%test2) file_format = (format_name = 'CSV') on_error = 'CONTINUE'; -- 第一条和第三条记录在验证查询中可用。在这种情况下,只有第二条记录不存在。有点奇怪。 (所有三个记录都复制失败)
猜你喜欢
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
  • 2014-07-21
  • 1970-01-01
相关资源
最近更新 更多