我使用了如下复制命令:
从@%test2 file_format = (format_name = 'CSV') on_error = 'CONTINUE' 复制到 test2;
我的文件在数字字段中包含一些字符数据(对于所有记录),因此复制结果为 LOAD_FAILED,我可以使用以下查询获取失败记录(在这种情况下,所有记录都是失败记录):
select * from table(validate("TEST2", job_id=>'对应的JOB ID'));
我还尝试提供无效日期,但仍然从上述查询中获得了所有不良记录。
现在我尝试了如下复制命令:从 @%test2 中选择 $1,to_date($2,'YYYYDDD') 复制到 test2(test1,test2) file_format = (format_name = 'CSV') on_error = 'CONTINUE';
复制结果又是 LOAD_FAILED 但我现在没有从下面的查询中得到任何失败记录: select * from table(validate("TEST2", job_id=>'Corresponding JOB ID'));
这是否仅适用于常规副本,而 Copy 中没有任何转换功能或有任何其他原因?
在看到下面 Mike 的回复后添加一个示例:文件数据:1,2018-1-34 2,2/3/2016 3,2020124
表-> 创建表 test2(test1 编号,test2 日期)
复制到 test2(test1,test2) from (select $1,to_date($2,'YYYYDD') from @%test2) file_format = (format_name = 'CSV') on_error = 'CONTINUE';
第一条和第三条记录在验证查询中可用。在这种情况下,只有第二条记录不存在。有点奇怪。(所有三个记录都在复制中失败)。
正如 Mike 在下面的评论中所说,验证不适用于复制中的转换数据,但为什么在这种情况下它提供两条记录。它应该枯萎不提供任何东西或全部?