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

ADF映射数据流处理Excel重复主键写入SQL约束冲突问题

ADF映射数据流处理Excel源重复主键分表存储方案

核心实现逻辑是通过内置转换拆分数据流分支,分别完成主表去重、关联表明细保留,从源头避免主键写入冲突,全程不需要编写自定义代码。

前置校验

  • 确认映射数据流的源转换已正确加载Excel数据源,Id、Name、PhoneNo及其他维度字段映射无误
  • 提前在目标SQL库中创建两张表:
    • 主表:以Id为主键,存储Id、Name及其他固定维度字段
    • 手机号关联表:请勿将Id单独设为主键(可设置Id+PhoneNo为联合主键),存储Id、PhoneNo字段

详细配置步骤

1. 公共预处理:给同Id记录打行序号

在源转换之后新增窗口转换,按如下规则配置:

  • 分组设置:Over条件选择Id字段,按Id对数据分组
  • 排序设置:选择你判定"首条记录"的排序字段(比如Excel行号、数据录入时间,无明确排序规则时可直接选Id升序,默认取Excel中排列最靠前的同Id记录)
  • 窗口列配置:新增列命名为row_num,窗口函数选择rowNumber(),为每个Id分组内的记录生成从1开始的连续序号

注意:不要使用rank()或denseRank()函数,同Id下如果存在完全重复的记录,这两个函数会生成相同序号,无法精准定位首条记录。如果同Id下的Name或其他维度字段存在取值不一致的情况,调整排序规则即可实现"取最新值""取非空值"等定制逻辑。

2. 拆分双分支分别写入目标表

从窗口转换的输出端口新建两个数据流分支,分别对应两张表的处理逻辑:

分支1:主表写入逻辑

  • 新增筛选转换,设置筛选条件为row_num == 1,过滤后每个Id仅保留1条记录
  • 新增选择转换,剔除row_num、PhoneNo等不需要存入主表的字段,仅保留Id、Name及其他需要的维度字段
  • 新增SQL Sink(接收器),指向提前创建好的第一张主表:全量写入时选insert模式,增量同步时可选upsert模式,以Id为匹配键即可。此时输出数据无重复Id,不会触发主键约束冲突。

分支2:手机号关联表写入逻辑

  • 新增选择转换,剔除row_num、Name及其他不需要存入关联表的维度字段,仅保留Id、PhoneNo字段
  • 可选去重:如果源数据中存在Id+PhoneNo完全重复的无效记录,可新增聚合转换,分组依据选择Id和PhoneNo,无需配置聚合函数即可自动完成重复值剔除
  • 新增SQL Sink(接收器),指向提前创建好的第二张手机号关联表,直接写入即可。

调试验证

  • 开启数据流调试模式,先预览窗口转换的输出结果,确认每个Id分组下row_num=1的记录符合你对"首条记录"的预期
  • 分别预览两个接收器的输入数据:主表分支Id列无重复值,手机号分支Id与PhoneNo的对应关系和源Excel完全一致
  • 验证通过后再触发管道正式运行,即可解决原有的主键冲突报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:43:01