如何通过Azure Synapse Link、数据流或Dataverse处理重复记录
问题解答:Dataverse数据通过Synapse Link追加模式重复记录处理方案
一、去重方案选择:ADF数据流 vs Dataverse端处理
1. Dataverse端处理的局限性
- 仅追加模式下,Dataverse本身不会自动去重——该模式设计逻辑就是每次数据变更(新增/更新)都追加新记录到存储,无法直接在源端阻止重复生成。
- 若要在Dataverse端干预,需开发自定义插件或配置业务规则,但这会增加源系统复杂度,且无法覆盖已同步到存储的历史重复数据。
2. ADF数据流去重的优势
- 属于下游ETL处理,完全不影响Dataverse的业务逻辑,符合数据仓库分层架构的最佳实践。
- 可灵活处理历史及新增重复数据,支持自定义去重规则(按主键、全字段匹配等)。
- 配合Synapse Link的增量同步,可定期或实时触发数据流完成去重,保障最终数据唯一性。
结论:优先选择ADF数据流聚合去重
二、ADF数据流聚合去重代码使用说明
你提到的代码是ADF的数据流脚本(Data Flow Script),用于基于全字段匹配实现去重,具体使用如下:
1. 代码功能解析
aggregate(groupBy(mycols = sha2(256,columns())), each(match(true()), $$ = first($$))) ~> DistinctRows
sha2(256,columns()):对所有字段生成SHA256哈希值,作为重复记录的分组依据(全字段相同的记录哈希值一致)。groupBy(mycols = ...):按生成的哈希值分组,把重复记录归为同一组。each(match(true()), $$ = first($$)):对每个分组,保留组内第一条记录,丢弃其他重复项。~> DistinctRows:输出去重后的数据集,命名为DistinctRows。
2. 具体操作步骤
- 在ADF中创建数据流,添加Synapse Link同步的存储数据源作为输入节点。
- 点击数据流画布上方的脚本按钮(
</>图标),进入脚本编辑界面。 - 找到输入数据源对应的脚本行(类似
source(output(...), allowSchemaDrift: true, validateSchema: false) ~> Source1),在其下方插入上述聚合脚本,注意将Source1替换为你的实际输入节点名称,示例修改后脚本:
source(output(accountnumber as string, accountname as string), allowSchemaDrift: true, validateSchema: false) ~> Source1 aggregate(Source1, groupBy(mycols = sha2(256,columns())), each(match(true()), $$ = first($$))) ~> DistinctRows
- 保存脚本后回到画布,会自动生成
DistinctRows聚合节点,可继续连接后续转换或输出到目标数据集(如数据湖、Synapse SQL池)。
3. 可视化操作替代方案(无需写脚本)
如果不习惯直接编辑脚本,可通过可视化界面实现相同逻辑:
- 添加聚合转换节点,连接到输入数据源。
- 在聚合设置的分组依据中,点击「添加列」,使用表达式
sha2(256,columns())生成哈希分组键。 - 在聚合列中,对每个字段选择
first()函数(或last(),根据你需要保留的记录版本),最终实现全字段去重。
三、参考文档中文说明
- 《Azure Synapse Link 高级配置》:介绍Synapse Link连接Dataverse的进阶设置,包括同步模式、数据过滤等配置项。
- 《ADF数据流脚本:使用所有字段实现去重行》:讲解如何通过数据流脚本实现基于全字段匹配的去重操作,即你引用的代码片段来源。
内容的提问来源于stack exchange,提问作者Developer Rajinikanth
相关产品推荐
相关产品推荐

