ADF数据流转换中基于首行的动态列重命名问题
ADF DataFlow动态列重命名实现步骤
针对首行存储目标列名的场景,不用在Derived Column里硬写单列表达式,按以下步骤批量处理:
拆分数据行与列名行
添加两个Filter转换:- 第一个Filter条件写
rownum == 1,提取存储目标列名的首行作为映射源 - 第二个Filter条件写
rownum != 1,提取实际业务数据行
- 第一个Filter条件写
生成列名映射表
对首行的Filter结果添加Aggregate转换,Group by留空(仅一行数据),在Aggregate列中写入表达式:columnMap = map(columns(), c => (key: c, value: toString(byName(c))))该表达式会将每列的原始名称(如
Column_1)与首行对应列的目标名称(如Org_Ind)转换为键值对数组。传递映射参数
将Aggregate生成的columnMap转为字符串(toString(columnMap)),通过数据流参数传递给业务数据行分支。若在同一数据流内,可通过Cache Sink存储映射,再用Lookup读取后作为参数。批量重命名数据列
对业务数据行的Filter结果添加Select转换,选择「动态映射」并写入表达式:map(columns(), c => ( name: iif(isNull(find(columnMap, x => x.key == c)), c, find(columnMap, x => x.key == c).value), value: byName(c) ))此逻辑会遍历所有原始列,匹配到映射则替换为目标列名,未匹配的列保留原始名称。
清理冗余数据
处理完成后移除rownum列,即可继续后续Sink输出流程。
内容的提问来源于stack exchange,提问作者Pablo Gûereca
相关产品推荐
相关产品推荐

