如何检查Azure Data Warehouse(ADW)新增复制行及排查数据差异?
我来给你几个实用的方案,帮你追踪ADF V1里具体复制的行,解决行计数不匹配、重复行的问题:
方案1:启用复制活动的详细日志并落地到存储账户
这是最直接的方式,利用ADF V1自带的日志功能获取行级复制信息:
- 打开ADF V1的复制活动配置,找到日志设置模块,勾选「启用复制日志」选项。
- 指定一个Azure Blob存储账户(或ADLS Gen1)作为日志存储位置,设置好容器和路径前缀。
- 每次复制任务完成后,系统会自动生成日志文件,里面包含成功复制行的主键、复制时间戳,甚至失败行的详细报错信息。你可以直接下载日志文件用Excel分析,或者用SQL Server的
OPENROWSET函数解析查询:SELECT * FROM OPENROWSET( BULK 'your-log-path/copy-log-*.json', DATA_SOURCE = 'YourAzureBlobStorage', FORMAT = 'CSV', FIELDTERMINATOR = '|', ROWTERMINATOR = '\n' ) AS LogData
方案2:在源SQL数据库添加复制追踪字段
从源头上标记已复制的行,方便后续对比:
- 在本地SQL DB的目标表中新增两个字段:
Last_Copied_Datetime(datetime类型)和Is_Copied(bit类型,默认值0)。 - 修改ADF V1复制活动的源查询,只选取未复制的增量行:
SELECT * FROM [YourSourceTable] WHERE Is_Copied = 0 OR Last_Copied_Datetime > '@pipeline().parameters.LastCopyTime' - 在复制活动成功完成后,添加一个存储过程活动,调用本地SQL DB的存储过程,将本次复制的行标记为已复制:
UPDATE [YourSourceTable] SET Is_Copied = 1, Last_Copied_Datetime = GETDATE() WHERE [PrimaryKey] IN (@CopiedPrimaryKeys) - 这样你就能通过查询源表的追踪字段,快速对比ADW中的数据,找出遗漏或重复的行。
方案3:在Azure Data Warehouse中添加复制元数据字段
从目标端记录每次复制的行信息:
- 在ADW的目标表中新增两个字段:
ADF_Copy_Timestamp(datetime类型)和Copy_Run_ID(varchar(50)类型)。 - 修改ADF V1复制活动的字段映射,将ADF系统变量
@pipeline().RunId映射到Copy_Run_ID,同时将当前时间映射到ADF_Copy_Timestamp。 - 每次复制任务完成后,你可以在ADW中通过Run ID查询本次复制的所有行:
SELECT * FROM [YourADWTable] WHERE Copy_Run_ID = '@pipeline().RunId' - 对比不同Run ID的行数据,就能快速发现重复复制的行(同一源行出现在多个Run ID结果中)。
方案4:用自定义活动做行级校验
如果需要实时校验源和目标的行差异:
- 创建一个ADF V1自定义活动,用C#或PowerShell编写逻辑:在复制活动完成后,分别从源SQL DB和ADW抽取本次复制的增量行(基于时间戳或主键范围),然后做行级对比。
- 将对比结果输出到日志存储,或者配置邮件告警,这样就能及时发现行计数不匹配或重复的问题。
内容的提问来源于stack exchange,提问作者John Wat
相关产品推荐
相关产品推荐

