当前位置: 首页 > biancheng >正文

Azure Data Factory中FOR EACH组件的使用以及限制注意点

目录

(一)引言

(二)项目描述以及基本概念准备

1. For Each的概念

2. For Each组件在管道中的运作情况

(1)ADF中的配置概览

(2) 管道详情拆解

(3)For Each组件的限制:

(三)突破For Each组件限制的解决方案

1. 官方文档给出的思路

2. 具体解决方案

(1)人为拆分成多个管道执行

(2)使用COPY组件将结果直接表输出

(3)寻求微软官方帮助


(一)引言

       公司今年十一上一个APP塞优惠券的活动,具体的运作方式是:在Azure Data Factory(ADF)上创建一个含有FOR EACH组件的Pipeline(以下称管道),从生产数据库A中抽取出需要的人员信息载入发劵的数据库B中,并以传参数的形式给数据库B中一个存储过程(Stored Procedure)来处理。本文是我在这个项目中运行管道时候遇到的FOR EACH组件的限制以及解决思路,供大家参考。

(二)项目描述以及基本概念准备

1. For Each的概念

       ForEach 活动在 Azure 数据工厂中定义重复的控制流。 此活动用于循环访问集合,并在循环中执行指定的活动。 此活动的循环实现类似于采用编程语言的 Foreach 循环结构。具体想学习For Each的基本使用方法可以参考如下链接:ForEach 活动 - Azure Data Factory | Azure Docs

2. For Each组件在管道中的运作情况

(1)ADF中的配置概览

(2) 管道详情拆解

       (a)我们先用LOOKUP组件从数据库A中捞取出数据源(即用SQL拉出一个拥有两个字段的表对象)。

表对象:

LOOKUP组件配置参数:

       (b)在(a)中LOOKUP中得到的结果作为输入,一行行传入For Each组件中,并在For Each中作为参数传给一个指定的在数据库B中的存储过程(SP)执行。

For Each组件配置参数:

点击上图中For Each边上的铅笔图标,查看For Each中带的存储过程详情

 

 

(3)For Each组件的限制:

       我们可以找到在For Each组件的SETTING选项卡中看到一个叫Batch Count的参数,该参数最大值为50,用于控制并行执行数的批计数(当 isSequential 设为 false 时)。 这是并发数上限,但 for-each 活动不会始终按此数量执行,默认值为20。

      我在这个项目中会从源数据库A中拉取大概16000多条数据,但最后执行时候只有5000条数据被送入目标数据库B中的存储过程。5000这个数字很巧是个大整数,结合For Each的batch count最大值为50,我认为这应该是Azure Data Factory的限制所致,所以我们必须采取一些特别的解决方案去处理。

(三)突破For Each组件限制的解决方案

1. 官方文档给出的思路

2. 具体解决方案

(1)人为拆分成多个管道执行

       从业务角度将LOOKUP组件中源头数据人为拆解成几个编组 ,每个编组不突破FOR EACH执行的限制,使用多个管道同时执行。

 

(2)使用COPY组件将结果直接表输出

        这个方法的思路是,既然使用For Each调用有限制,那我将LOOKUP后16000多条数据直接使用COPY组建代替,以表复制的形式直接拷贝到目标库里的一个两列字段的临时表,再让目标库中的存储过程对于已经存在的临时表进行操作。

 

(3)寻求微软官方帮助

       由于这个限制极大可能在于微软的AZURE DATA FACTORY,所以作为用户我已经提交CASE到微软相关的供应商,他们有解决方案后我会在续写本篇并附上官方解决方案。

相关文章:

  • 牛客练习赛#84 F 莫比乌斯反演+杜教筛+技巧+斐波那契数列和gcd的结论+矩阵快速幂
  • ZZNUOJ_用C语言编写程序实现1342:支配值数目(附完整源码)
  • java毕业设计后勤管理系统餐饮评价监督系统(附源码、数据库)
  • 前端基础学习笔记
  • 【TS】联合类型--类型断言--类型推断
  • 谈笑风声的秘密
  • QT影城网上售票系统
  • NetCDF数据在ArcMap中的使用
  • 打怪升级(考验思路)
  • 持续精进,改变自己