如何在Azure Data Flow中实现Alteryx的Find and replace功能?
在Azure Data Flow中实现基于映射表的文本替换(替代Alteryx Find and Replace工具)
以下是实现需求的具体步骤,完全在Azure Data Flow中完成:
1. 加载数据源
- 新建Data Flow,添加两个Source组件:
- 第一个Source指向待处理的CSV文件1(包含需要替换的目标列,比如
Address),确保列类型配置正确。 - 第二个Source指向映射规则CSV文件2(包含
Word和ReplacementWord两列),同样确认字符串类型的列配置无误。
- 第一个Source指向待处理的CSV文件1(包含需要替换的目标列,比如
2. 将映射表转换为替换数组
- 针对文件2的Source输出,添加Aggregate组件:
- 不设置任何分组键(执行全局聚合)。
- 添加两个聚合列:
- 列名:
lookupWords,表达式:collect(Word)—— 把所有要查找的词打包成字符串数组 - 列名:
replaceWords,表达式:collect(ReplacementWord)—— 把对应的替换词打包成字符串数组
- 列名:
3. 关联待处理数据与映射数组
- 添加Join组件:
- 左输入选择文件1的Source输出,右输入选择聚合后的映射表输出。
- 选择Cross Join类型,让每条待处理记录都能获取到完整的替换规则数组。
4. 执行批量替换
- 添加Derived Column组件:
- 若要覆盖原列,直接选择
Address列;若要保留原列,新建列(比如UpdatedAddress)。 - 输入替换表达式:
这个函数会按数组顺序,自动将replaceMany(Address, lookupWords, replaceWords)Address中匹配lookupWords的子串替换为对应的replaceWords值,比如把St.Xyz,NY,100067中的NY替换成NewYork。
- 若要覆盖原列,直接选择
5. 输出处理结果(可选)
- 添加Select组件,按需保留需要的列(比如去掉
lookupWords、replaceWords这类中间列)。 - 添加Sink组件,配置目标存储位置,将处理后的CSV文件输出。
额外注意事项
- 如果映射规则存在优先级(比如需要先替换更长的词,避免短词替换破坏长词匹配),可以在聚合前添加Sort组件,对文件2的输出按
length(Word)降序排序,再执行聚合,确保长词的替换规则优先生效。 - 若需要正则匹配替换,可改用
replaceRegex函数结合循环逻辑,但常规的精准子串替换用replaceMany即可满足需求。
内容的提问来源于stack exchange,提问作者AzSurya Teja
相关产品推荐
相关产品推荐

