【问题标题】:Azure ADF V2 ForEach File CopyData from Blob Storage to SQL TableAzure ADF V2 ForEach 文件将数据从 Blob 存储复制到 SQL 表
【发布时间】:2020-04-25 09:20:01
【问题描述】:

我需要设计一个 ADF 管道,以将在名为“Current”的特定 Blob 存储文件夹路径上创建的 CSV 文件复制到 SQL 表。成功复制后,我必须将文件移动到存档文件夹。

我已经完成的事情:我正在使用复制 CSV 文件并加载到我的 SQL 表中的复制数据活动。成功后,另一个复制数据活动会将 CSV 文件从“当前”文件夹复制到“存档”,之后我有一个删除活动,可以从当前文件夹中删除文件。

问题:在一次只有一个文件的情况下,这完全没问题。但我想重新设计它以处理多个文件导入。我想利用 ForEach 活动。请帮忙。

【问题讨论】:

    标签: azure azure-blob-storage azure-data-factory-2


    【解决方案1】:

    您需要在 for-each 之前添加一个 Get Metadata 活动。 Get Metadata 活动将获取当前目录中的文件并将它们传递给 For-Each。您将其连接到您的 Blob 存储文件夹并指定文件掩码。活动的输出需要作为 for-each 循环的输入。像这样的东西..@activity('Get Metadata').output。 顺便问一下,你是如何触发这个 ADF 管道的?实现此目的的另一种方法是设置一个事件触发器,以在该 blob 目录中创建文件时运行此管道。 以下是在存储容器中的文件上使用 For-Each 的步骤。

    1. 将获取元数据参数设置为“子项”
    2. 在您的 For-Each 中,将 Items 设置为 @activity('Get Metadata1').output.childitems

    1. 在复制活动中使用的源数据集中,创建一个名为 FileName 的参数。

    1. 设置文件路径使用参数

    2. 在复制活动中,将 FileName 参数设置为 @item().name

    要完成,您需要将水槽设置为您需要的任何东西。应该这样做。

    【讨论】:

    • 值得注意的是,GetMetadata 活动仅限于 1 Mb 的数据,如果该文件夹中有数千个文件(或某种长名称),它将引发错误。更好的方法是在 blob 存储数据集中使用通配符文件过滤器。这样,您只需进行常规复制活动。更多信息在这里:azure.microsoft.com/en-in/updates/…
    • 事件触发器 - 每当在文件夹中创建新文件时,adf 就会触发。如果有两个文件,那么将有两个并发执行。由于我目前正在将整个文件夹从当前移动到存档,因此任何一个并发执行都将失败,因为另一个已经移动了文件进程
    • @MartinEstebanZurita 大多数情况下只创建一个文件,但在极少数情况下会创建多个文件。
    • @Nate - 我能够添加带有子项和 FilterFile 活动的 GetMetaData(FilterFile 仅获取文件类型)并将 FilterFile 的输出提供给 forEach 活动。但现在我不确定如何将唯一文件名作为复制活动的来源。我可以将 FilterFile 的输出放入 adf 参数并为复制活动提供参数值吗?
    • @gopinath 我添加了分步说明。
    猜你喜欢
    • 2018-09-20
    • 2020-08-18
    • 2021-07-29
    • 2021-03-13
    • 2016-08-30
    • 2019-03-30
    • 2019-04-01
    • 2017-05-06
    • 2018-08-08
    相关资源
    最近更新 更多