for-each 在 azure 数据工厂中一次传递所有文件

问题描述

我是 Azure 的新手,我遇到了 for-each Activity 的问题。

场景:每天必须将 6 个文件从 blob 存储复制到 Azure sql

第 1 天:vendors-01、Transactions01、Orders01、Customers01、purchase01、history01 第 2 天:vendors-02、Transactions02、Orders02、Customers02、purchase02、history02 ...

问题:我的 for-each 一次传递所有文件多次,而不是循环遍历它们并一次传递每个文件

理想的世界应该是这样的

  1. 一个循环:供应商文件
  2. 第二个循环:交易文件
  3. 第三个循环:订单文件
  4. 第四个循环:客户文件
  5. 第 5 次循环:购买文件
  6. 第 6 次循环:历史文件

目前正在发生的事情:

  1. 一个循环:供应商文件、交易文件、订单文件、客户文件、采购文件、历史文件
  2. 第二个循环:供应商文件、交易文件、订单文件、客户文件、采购文件、历史文件 ...

这会导致管道失败,因为 for-each 无法正常工作。

父管道

the parent pipline

这是实际文件数量 6,这就是管道被执行 6 次的原因

enter image description here

这是管道每个循环的计数,它给了我 24 个文件而不是 3 个类似的文件,或者一次 1 个

enter image description here

我在哪里遗漏了一步?

任何反馈将不胜感激!

提前谢谢?

解决方法

由于作业执行的可变部分是附加在文件末尾的日期而不是文件名,因此您可以通过多种方法获得结果:

  1. 创建日期及其处理状态的配置表。

Foreach 循环活动:它的值应该是我们需要处理的提取日期的数量(意味着我们需要复制文件的日期)

在 foreach 中,创建 6 个复制活动(每个文件名,如历史记录、订单等),其中源数据集需要是动态的以获取文件 @cancat("order_number",utcnow()) 类似的东西。

  1. 与其在 FOreach 活动中进行 6 个不同的复制活动, 因为 ADF 不支持 foreach 内的 foreach ;创建另一个管道,该管道将包含一个 Array 类型的变量,其值为不同的文件名。 在新管道中,创建一个以变量作为输入的 forache 循环,并在 foreach 中创建一个复制活动。

在 foreach 活动中的原始管道中(基于日期参数),调用新管道。

,

也许您可以试试这个:使用通配符路径将文件从 Blob 存储复制到 Azure SQL 中的相应表。

我的测试:

  1. 创建一个变量,它的类型是数组,值是你的表名。 enter image description here

2.loop 这个数组 enter image description here

3.使用通配符路径过滤文件名 enter image description here

4.pass @item() 到数据集作为接收器 enter image description here