You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ADF Copy活动中识别并捕获被拒绝的数据行?

解决ADF Copy任务向Snowflake复制时拒绝行重定向的方案

核心思路

利用Snowflake COPY INTO命令的错误处理参数,将被拒绝的行数据定向存储到指定位置,同时保留错误详情,方便后续定位源表数据。

1. 配置Snowflake COPY INTO的错误处理参数

ADF的Copy任务底层调用Snowflake的COPY INTO命令,需在ADF中添加以下关键参数:

  • ON_ERROR = 'CONTINUE':让复制任务遇到错误时继续运行,不中断全量复制
  • ERROR_LOCATION = '@<你的外部stage名称>/error_logs':指定存储拒绝行和错误日志的路径,需提前在Snowflake中创建对应外部stage(与ADF使用的存储服务绑定,比如Azure Blob)
  • REJECTED_RECORD_FORMAT = 'TYPE=CSV FIELD_DELIMITER=','':定义拒绝文件的格式,方便后续读取

2. 在ADF复制活动中设置附加参数

打开ADF复制活动的「Sink」选项卡,找到「Snowflake copy options」下的「Additional copy options」,输入完整参数示例:

ON_ERROR = 'CONTINUE', ERROR_LOCATION = '@my_azure_stage/rejected_data', REJECTED_RECORD_FORMAT = 'TYPE=CSV FIELD_DELIMITER=',''

注意:确保Snowflake的外部stage拥有读写权限,且ADF使用的身份验证方式(服务主体/密钥)能访问对应的存储容器。

3. 获取并分析拒绝行数据

任务运行完成后:

  • 直接在Snowflake中查询拒绝记录:
    -- 查看拒绝文件的结构
    SELECT * FROM TABLE(INFER_SCHEMA(LOCATION => '@my_azure_stage/rejected_data'));
    -- 读取拒绝的行内容
    SELECT $1, $2, $3 FROM @my_azure_stage/rejected_data/rejected_records_<查询ID>.csv;
    
  • 也可以直接到对应的存储服务(比如Azure Blob Storage)中下载拒绝文件,查看具体的错误行内容。

4. 关联定位源SQL表中的行

  • 如果源SQL表有唯一主键:复制时将主键字段纳入复制字段列表,拒绝文件中会包含主键值,直接用主键在源表中查询对应行。
  • 如果无主键:在源查询中添加行号(如SQL Server使用ROW_NUMBER() OVER(ORDER BY <字段>) AS row_id),复制时带上该行号,通过拒绝文件中的行号反向定位源查询结果,进而找到源表数据。

5. 利用现有日志快速定位

日志中提到的first error line 2是指ADF生成的中间数据文件(示例中的data_xxxx.txt)的第2行,可直接下载该中间文件,查看对应行内容,先锁定错误数据的特征,再反向查找源表。

内容的提问来源于stack exchange,提问作者Mahesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 15:11:16