Azure Data Factory数据流中基于多列规则去除文件重复行
在Azure Data Factory数据流中实现自定义规则去重
针对你的需求(当First_name+Last_name+Email完全相同,或First_name+Last_name+phone完全相同则判定为重复,需去除重复项),可以通过以下步骤在ADF数据流中实现:
步骤1:生成分组标识
添加派生列转换,创建两个组合键,分别对应两个去重规则:
Key_Email:concat(First_name, Last_name, Email)Key_Phone:concat(First_name, Last_name, phone)
若需忽略大小写(如邮箱、姓名的大小写差异),可使用
lower()统一转换,例如:concat(lower(First_name), lower(Last_name), lower(Email))
步骤2:聚合+联合+去重(可靠实现)
这种方法可以同时覆盖两个去重规则,确保最终结果无重复:
- 第一次聚合:按
Key_Email分组,对First_name、Last_name、Email、phone字段分别取第一个值(如first(First_name)),得到所有Email维度的唯一行。 - 第二次聚合:按
Key_Phone分组,同样对四个字段取第一个值,得到所有Phone维度的唯一行。 - 联合转换:将两次聚合的结果进行联合(Union)。
- 去重转换:基于全部4列进行去重,最终得到符合要求的唯一行集合。
替代步骤:窗口函数标记过滤
如果希望更灵活控制保留的行(如保留最早/最新行),可以用以下方式:
- 在步骤1生成分组键后,添加窗口转换,定义两个行号列:
RowNum_Email:row_number() over (partition by Key_Email order by First_name)(按Key_Email分组给每行编序号)RowNum_Phone:row_number() over (partition by Key_Phone order by First_name)(按Key_Phone分组给每行编序号)
- 添加过滤转换,设置条件为保留每个分组的第一行:
RowNum_Email == 1 || RowNum_Phone == 1 - 最后再添加一次去重转换,基于全部4列去重,避免同一行被多次保留。
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

