如何在Azure Data Factory数据流中为列添加序号后缀并生成复合主键
ADF数据流实现C6列生成及主键设置方案
一、生成连续三位前导零序号
源表无主键时,ROWNUMBER()需明确排序规则才能生成连续行号,否则会因数据流处理顺序随机导致序号混乱:
- 添加派生列转换,在表达式中用窗口函数+格式化函数生成三位序号:
这里lpad(toString(rownumber(order by C2 asc)), 3, '0')order by C2 asc是为了固定排序逻辑,你可以替换成任意现有列(比如C3、C4),确保行号连续唯一。如果不需要特定排序,也可以写rownumber(),但生产环境建议指定排序字段避免序号波动。
二、拼接生成C6列
在同一个派生列转换中,直接生成C6列,表达式为:
concat(C2, C3, C4, lpad(toString(rownumber(order by C2 asc)), 3, '0'))
如果觉得表达式过长,可拆分两步:先派生临时列SeqNum存储格式化后的序号,再派生C6列做拼接:
-- 第一步生成SeqNum lpad(toString(rownumber(order by C2 asc)), 3, '0') -- 第二步生成C6 concat(C2, C3, C4, SeqNum)
三、设置C6为主键
在目标表转换中配置主键:
- 选中目标转换,切换到设置选项卡
- 在「主键」区域点击「添加」,选择C6列作为主键
- 确保目标表的C6列数据类型为字符串,长度足够容纳拼接后的内容(根据C2/C3/C4的实际长度总和+3设置)
特殊场景处理
若源数据是分区存储格式(如Parquet、ORC),直接用ROWNUMBER()会按分区生成行号,导致全局序号不连续。此时需先添加排序转换,对任意列做全局排序,再执行派生列生成序号。
内容的提问来源于stack exchange,提问作者Nezko1
相关产品推荐
相关产品推荐

