Azure Data Factory导入多对多关系数据关联问题咨询
在Azure Data Factory中构建多对多关联表的解决方案
两种实现方式:同一数据流或单独数据流
两种方案都可行,具体取决于你的数据复杂度和维护偏好:
方案一:同一数据流内完成所有写入
这种方式适合希望一次性完成所有表写入的场景,核心是保留原始CSV的行级关联关系:
- 步骤1:导入CSV源数据
读取CSV文件,保留所有字段(VehicleVIN,VehicleMake,VehicleModel,CustomerName,CustomerAddress,CustomerRef)。 - 步骤2:处理车辆维度表
- 用
Aggregate转换对车辆数据去重,按VehicleVIN分组(VIN是车辆唯一标识),保留VehicleMake和VehicleModel。 - 用
Surrogate Key转换生成临时标识(比如TempVehicleId),后续用来关联原始数据。 - 将处理后的车辆数据写入
VehicleTable,同时输出包含TempVehicleId和VehicleVIN的数据集。
- 用
- 步骤3:处理客户维度表
- 用
Aggregate转换按CustomerRef分组去重(CustomerRef是客户唯一标识),保留CustomerName和CustomerAddress。 - 用
Surrogate Key转换生成TempCustomerId,输出包含TempCustomerId和CustomerRef的数据集。 - 将客户数据写入
CustomerTable。
- 用
- 步骤4:构建关联关系并写入关联表
- 将原始CSV数据流与车辆输出数据集做
Join,匹配条件为原始.VehicleVIN = 车辆输出.VehicleVIN。 - 再将结果与客户输出数据集做
Join,匹配条件为原始.CustomerRef = 客户输出.CustomerRef。 - 用
Surrogate Key生成VehicleCustomerTable的Id字段,提取TempVehicleId和TempCustomerId(如果VehicleTable和CustomerTable的主键是自增ID,可替换为写入后返回的主键,需开启Sink的输出字段映射确保主键被返回)。 - 将关联数据写入
VehicleCustomerTable,用Aggregate去重,避免同一车辆-客户对重复写入。
- 将原始CSV数据流与车辆输出数据集做
方案二:用单独数据流构建关联表(更推荐)
这种方式分离维度表写入和关联表写入,逻辑更清晰,便于排查问题:
- 步骤1:运行现有数据流
先执行你已构建好的数据流,完成VehicleTable和CustomerTable的数据写入,确保两张表的主键(比如VehicleId、CustomerId)已生成。 - 步骤2:新建关联表数据流
- 源数据集选择原始CSV文件,读取所有字段。
- 添加
Lookup转换,关联VehicleTable,匹配条件设置为CSV.VehicleVIN = VehicleTable.VehicleVIN,获取对应的VehicleId。 - 再添加一个
Lookup转换,关联CustomerTable,匹配条件设置为CSV.CustomerRef = CustomerTable.CustomerRef,获取对应的CustomerId。 - 用
Filter转换过滤掉Lookup未匹配到的行(比如CSV中存在数据库没有的车辆/客户数据)。 - 用
Aggregate转换按VehicleId和CustomerId分组,去重重复的关联记录。 - 用
Surrogate Key生成VehicleCustomerTable的Id字段,将VehicleId和CustomerId写入关联表。
关键注意事项
- 确保
VehicleVIN和CustomerRef是唯一标识:这是匹配维度表主键的核心依据,必须保证CSV中的这两个字段能准确对应到VehicleTable和CustomerTable的记录。 - 处理重复数据:无论是维度表还是关联表,都要通过
Aggregate或Sink的upsert模式(插入或更新)避免重复写入。 - Sink设置:写入数据库时,开启Sink的允许插入和允许更新(如果需要),并确保主键字段被正确映射。
内容的提问来源于stack exchange,提问作者drumenas
相关产品推荐
相关产品推荐

