Snowflake使用on_error=continue导入后如何查看未插入行及错误原因
查看Snowflake COPY INTO任务的错误详情
当你使用on_error = 'continue'执行数据导入后,可通过以下几种方式获取未插入行的错误信息:
1. 查看COPY命令执行结果详情
执行COPY语句后,Snowflake会返回任务执行统计,其中包含错误记录数和错误文件存储路径:
- 在Snowflake Web UI中找到该COPY任务的执行历史,展开详情即可看到相关信息,错误文件通常存放在你指定的S3路径下的
error子目录,或Snowflake默认的错误存储位置。
2. 查询COPY_HISTORY系统视图
通过INFORMATION_SCHEMA.COPY_HISTORY视图可以直接查询导入任务的错误明细,执行以下SQL:
SELECT FILE_NAME, ROW_NUMBER, ERROR_CODE, ERROR_MESSAGE FROM TABLE(INFORMATION_SCHEMA.COPY_HISTORY( TABLE_NAME => 'sampletable', START_TIME => DATEADD(HOUR, -2, CURRENT_TIMESTAMP()) -- 根据实际情况调整时间范围 )) WHERE ERROR_CODE IS NOT NULL;
该查询会返回每个错误行对应的文件名、行号、错误码及具体错误描述。
3. 直接访问错误文件
COPY任务生成的错误文件多为CSV格式,你可以直接访问对应的存储路径(例如S3的s3://test/test/error/目录),下载文件后查看未插入的行数据及错误说明。
另外,若想提前验证数据问题而不实际导入,可使用VALIDATION_MODE = 'RETURN_ERRORS'参数执行COPY命令:
copy into "sampletable" from s3://test/test/ credentials=(aws_key_id='xxxx' aws_secret_key='yyyyy') file_format = (type = csv field_delimiter = '|' skip_header = 1) validation_mode = 'RETURN_ERRORS';
此命令会返回所有不符合导入要求的行及错误原因,但不会将数据插入目标表。
内容的提问来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

