关于ADF Dataflow实现多行转多列数据转换的技术咨询
在ADF Dataflow中实现指定的行转列需求
这个需求完全可以用ADF Dataflow实现,你之前用Pivot转换没成功,核心问题是没给每个分组内的行生成唯一序号作为透视键。下面分场景给出具体实现步骤:
场景一:单字段行转列
源数据
Id,Name,Direction 123, ABC, North 123, ABC, South 123, ABC, East 123, ABC, West
实现步骤
添加派生列转换:生成分组内的行序号
- 新增列名设为
RowIndex - 表达式:
rowNumber(partitionBy(Id, Name)) - 作用:让每个
Id+Name组合下的行从1开始依次编号,确保后续透视能按顺序生成列
- 新增列名设为
添加透视(Pivot)转换:
- 「分组依据」选择
Id和Name - 「透视键」选择
RowIndex - 「透视列」添加
Direction,聚合方式选first()(因为每个序号对应唯一的Direction值) - 此时输出列会是
Id、Name、Direction_1、Direction_2、Direction_3、Direction_4
- 「分组依据」选择
可选:重命名列:用「选择」或「派生列」转换,把
Direction_1改成Direction1,以此类推,得到你要的最终格式
场景二:多字段同步行转列
源数据
Id,Name,Direction,Status 123, ABC, North, A 123, ABC, South, B 123, ABC, East, C 123, ABC, West, D
实现步骤
添加派生列转换:和场景一一样,生成
RowIndex,表达式rowNumber(partitionBy(Id, Name))添加透视(Pivot)转换:
- 「分组依据」选择
Id和Name - 「透视键」选择
RowIndex - 「透视列」同时添加两个字段:
- 第一个选
Direction,聚合方式first() - 第二个选
Status,聚合方式first()
- 第一个选
- 此时输出列会是
Id、Name、Direction_1、Direction_2、Direction_3、Direction_4、Status_1、Status_2、Status_3、Status_4
- 「分组依据」选择
可选:重命名列:把
Direction_1改为Direction1,Status_1改为Status1,完成格式调整
关键说明
Pivot转换需要一个唯一的透视键来确定每行数据对应到目标的哪一列,直接用Direction或Status当键的话,既无法保证列的顺序,也没法让Direction和Status的对应关系同步,所以必须先生成分组内的行序号作为透视键。
内容的提问来源于stack exchange,提问作者AutotelicLearner
相关产品推荐
相关产品推荐

