如何使用 Azure 数据工厂中的每个活动合并文件

Posted

技术标签:

【中文标题】如何使用 Azure 数据工厂中的每个活动合并文件【英文标题】:How to Merge files using For each activity in Azure Data Factory 【发布时间】:2021-09-16 19:48:37 【问题描述】:

我正在使用 ADF 将文件从文件服务器复制到 Azure Blob 存储。目录中的文件具有相同的结构,没有标题,我需要将它们合并到 Blob 存储中的单个文件中。

我创建了一个 ADF 管道,它使用 get metadata 来获取 childItems 并为每个活动逐个循环文件​​

在每个活动中都有一个复制数据活动,我在其中使用获取元数据活动中的文件名

在接收器设置中,我使用合并文件作为复制行为

当我执行管道时,复制活动被执行了 3 次,并且 blob 存储中的文件被最后一个文件覆盖。如何合并所有 3 个文件?

我知道我们可以使用通配符模式来选择文件。假设我有 3 个文件开始,当我运行获取元数据活动时,当控件开始复制作业活动时,如果文件夹中添加了第 4 个文件,那么我将使用通配符模式处理所有 4 个文件并获取元数据活动为我提供了 3 个文件的文件名,我将用于归档,这是不正确的

感谢任何帮助

【问题讨论】:

【参考方案1】:

你不需要一个 for each 。只需一个复制活动即可对所有三个文件进行标记。

诀窍是使用文件路径通配符识别源文件。如果需要合并源数据集中的所有文件,那么复制活动中的合并行为就足够了。

【讨论】:

抱歉不得不复制粘贴上述场景...我知道我们可以使用通配符模式来选择文件。假设我有 3 个文件开始,当我运行获取元数据活动时,当控件开始复制作业活动时,如果文件夹中添加了第 4 个文件,那么我将使用通配符模式处理所有 4 个文件和获取元数据活动为我提供了 3 个文件的文件名,我将用于归档,这是不正确的。而且文件可以按任何顺序出现,所以我们不能在这里使用通配符 具有合并行为的复制活动仍然是您实现要求的最佳方式,即将源文件合并到一个目标文件中,您不需要 foreach 。用于处理源中新到达或更新的文件,然后根据源文件被摄取到文件系统和文件/文件夹结构的方式,您需要制定识别和处理新到达文件的策略,考虑文件的分区方式和在源中标识,以及您希望如何处理更改,是否每次源中发生更改时都会完全合并!

以上是关于如何使用 Azure 数据工厂中的每个活动合并文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Azure 数据工厂的 Web 活动中为 POST 请求传递正文中的内容

在 Azure 数据工厂中完成活动后,如何向 Azure 服务总线发送消息

如何从数据流中获取特定数据以用于 Azure 数据工厂中的其他活动

将具有不同架构(列)的多个文件 (.csv) 合并/合并为单个文件 .csv - Azure 数据工厂

如何基于 Azure 数据工厂中创建的 Blob 执行触发器?

Azure 数据工厂 - 删除活动时出错