微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。