首页 > 解决方案 > Azure 数据工厂 - 将未知数量的文件复制到相应的表中

问题描述

我正在尝试将未知数量的文件复制到数据库表中。假设我有两个名为 1 和 2 的文件,我想将它们复制到名为 A 和 B 的表中。

1 - A
2 - B

我通过创建映射表来做到这一点

|SourceFileName|TargetTableName|
|1             |A              |
|2             |B              |

当两个文件都存在但有时只有一个文件存在时,我能够完成该任务。在这种情况下,我的 ForEach 循环失败了,我希望它仍然通过并进入下一个任务。

现在我有将 Childitems 传递给 ForEach 循环的 Get Metadata,在该循环内我有一个基于映射表的查找和基于该查找的复制活动 @activity('lookup').output.value[0].TargetTableName

标签: azure-data-factoryazure-data-factory-2azure-data-factory-pipeline

解决方案


您可以参数查找查询以根据源文件获取单个表名,并将查找的输出传递给复制活动以加载数据。

Foreach这将根据输出中输入文件的数量(1 个或更多)循环活动Get Metadata

映射表(查找表):

在此处输入图像描述

获取元数据活动的输出:

在此处输入图像描述

  • Foreach循环 -->Lookup活动中,参数化查询以根据源文件名获取表名。

    @concat('SELECT top 1 [TableName] FROM [dbo].[MappingTable] where Filename = ''', string(item().name), '''')
    

在此处输入图像描述

查找活动的输出

在此处输入图像描述

  • Copy data活动中,将当前的Foreach文件项作为Source传递。

在此处输入图像描述

  • Copy data activity Sink中,通过查找活动输出内容动态传递表名称。

    @activity('Lookup1').output.firstRow.TableName
    

在此处输入图像描述

  • Foreach循环 Content 循环基于Get Metadata 输出文件数。

在此处输入图像描述

  • 当多个输入文件时:

在此处输入图像描述


推荐阅读