天天看点

DataWorks百问百答27:for-each节点sql样例如何使用?

for-each节点作用:可实现将业务逻辑循环执行数次,并且将相关重要参数根须业务需求进行替换的功能。

限制:

  • DataWorks标准版及以上版本,才可以使用for-each节点功能。
  • for-each节点最多可以循环128次,一旦超过便会报错。

详细介绍参见链接:

https://help.aliyun.com/document_detail/137529.html?spm=a2c4g.11174283.6.779.5d822b65wrPtVr

下面讲下for-each节点使用sql业务替换执行的案例情况:(不仅局限于sql、shell,其他类型节点亦支持替换,请根据业务场景进行评选替换、延伸等{sql->shell->分支节点等等})

业务场景:因业务需要,重新整合2020年1月1号、2号、3号的业务数据,重新归纳到一张新报表的三个天分区中。分区已经确定为 2020-01-01,2020-01-02,2020-01-03三个分区。(顺序执行循环三次依次写入对应分区)

执行流程:

1.上游使用赋值节点传出三个分区值,赋值语言选择shell,直接输出这三个分区值(下游for-each节点接入参数会以以为数组形式接收改echo值)

DataWorks百问百答27:for-each节点sql样例如何使用?

2.下游使用for-each节点,for-each节点实际业务节点为sql节点:

DataWorks百问百答27:for-each节点sql样例如何使用?

for-each节点需要引用上游赋值节点的传出值(配置如下):

DataWorks百问百答27:for-each节点sql样例如何使用?

3.业务逻辑部分:创建新分区表并写入对应数据,循环三次写入三个分区:

DataWorks百问百答27:for-each节点sql样例如何使用?

--打印出实际接收到的数据

SELECT '${dag.loopDataArray[${dag.offset}]}'

;

--建分区表

CREATE TABLE IF NOT EXISTS yewubaobiao_2020

(

id BIGINT

,name STRING

,other STRING

)

PARTITIONED BY

dt STRING

--筛选数据(请根据实际业务逻辑编写sql)

INSERT OVERWRITE TABLE yewubaobiao_2020 PARTITION(dt='${dag.loopDataArray[${dag.offset}]}')

SELECT id

,name

,other

FROM wpw_table1

WHERE dt = '${dag.loopDataArray[${dag.offset}]}'

解释说明:

示例中用到了两个系统参数。

  • ${dag.loopDataArray}:输入的数据集。(即上游赋值节点输入下来的一维数据形式值)
  • ${dag.offset}:偏移量。(从0开始,这里刚好可以用作一维数组的index下标)

for-each节点支持的系统参数可在对应文档中查找。

**循环次数是有什么控制的?

这里for-each节点循环次数由一维数组的元素个数控制。

发布运行任务,看下实际结果:

赋值节点:

DataWorks百问百答27:for-each节点sql样例如何使用?

for-each内部节点:(数据已被替换)

DataWorks百问百答27:for-each节点sql样例如何使用?

DataWorks百问百答历史记录

请点击这里查看>>

更多DataWorks技术和产品信息,欢迎加入

【DataWorks钉钉交流群】