如何通过Azure Data Factory过滤重复记录后导入至Dynamics 365用户表
针对你这个CSV导入D365用户实体去重的需求,两种思路都有成熟的实现方式,我给你详细拆解下具体步骤:
方法一:利用D365接收器的原生去重/更新机制
这个方案直接借助D365接收器的配置就能实现,不需要额外的过滤逻辑,适合允许更新现有记录(或仅跳过重复)的场景:
- 在ADF中创建复制活动,先配置好CSV数据源:选择你的第三方CSV文件,确认列映射正确(比如CSV里的
邮箱对应D365的emailaddress1)。
- 在ADF中创建复制活动,先配置好CSV数据源:选择你的第三方CSV文件,确认列映射正确(比如CSV里的
- 接收器选择Dynamics 365,完成基础连接配置(比如实例URL、服务主体权限这些)。
- 进入接收器的「设置」选项卡,找到写入行为(Write behavior):
- 如果你想更新已存在的用户记录,选择「Upsert」;
- 如果你只想完全跳过已存在的记录,部分ADF版本支持直接勾选「跳过重复行」,或者先选Upsert再配合后续逻辑,但Upsert是最常用的原生方式。
- 进入接收器的「设置」选项卡,找到写入行为(Write behavior):
- 设置匹配键(Match keys):一定要选能唯一标识用户的字段,比如
emailaddress1(比fullname可靠太多,重名太常见了),如果必须用姓名,建议搭配telephone1这类字段做复合匹配键,避免误判。
- 设置匹配键(Match keys):一定要选能唯一标识用户的字段,比如
- 运行后,ADF会自动对比源数据和D365的匹配键值:已存在的用户会被更新(或跳过),新增用户则会创建新记录。
方法二:用ADF数据流提前过滤已存在的用户
这个方案适合你完全不想触碰现有记录,只导入纯新增用户的场景,逻辑更直观:
- 创建一个映射数据流,添加两个数据源:
- 源1:你的第三方CSV文件;
- 源2:Dynamics 365的用户实体(确保能正常读取到用户数据)。
- 创建一个映射数据流,添加两个数据源:
- 添加连接(Join)转换:
- 选择CSV作为左表,D365用户实体作为右表;
- 关联条件选唯一标识字段(比如
CSV.email=D365.emailaddress1); - 连接类型选「左外部连接(Left outer join)」。
- 添加连接(Join)转换:
- 添加过滤(Filter)转换:
- 设置过滤条件为「右表的匹配字段为空」(比如
isnull(D365.emailaddress1)),这样就会过滤掉所有在D365中已存在的用户,只保留CSV里的新增用户。
- 设置过滤条件为「右表的匹配字段为空」(比如
- 添加过滤(Filter)转换:
- 添加接收器转换,选择D365用户实体,写入行为选「插入(Insert)」,确保只导入过滤后的纯新增数据。
- 补充:如果数据量很大,可以在D365数据源的设置里添加过滤条件(比如只读取最近30天的用户?不过全量对比的话就不用),避免全量读取影响性能。
额外建议
- 优先用业务唯一字段做匹配:比如
emailaddress1、username这些,别只用fullname,否则很容易因为重名导致错误去重。 - 先做小批量测试:找几条包含已存在和新增用户的CSV数据,跑一遍流程,验证去重逻辑是否符合预期。
- 开启日志监控:在ADF里查看活动运行日志,确认处理的行数、跳过的重复记录数是否正常,方便排查问题。
内容的提问来源于stack exchange,提问作者macca18
相关产品推荐
相关产品推荐

