开发者学堂课程【DataWorks 一站式大数据开发治理平台精品课程:8.DataWorks 赋值-分支-归并-循环节点】与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/81/detail/1245
8.DataWorks 赋值-分支-归并-循环节点(一)
内容介绍:
一、赋值节点
二、分支节点
三、归并节点
四、循环节点
五、常见问题
六、控制赋值节点应用
一、赋值节点
赋值节点支持 ODPS SQL、SHELL 和 Python 三种赋值语言 ,且赋值节点自带outputs 输出。可以结合节点上下文,将赋值节点的最后一条查询结果作为下游节点的入参进行传递。Python 和 SHELL 的输出会基于逗号(,)分割为一维数组。ODPS SQL将输出结果作为一个二维数组传递至下游。转义符\可以对分隔符( , )进行转义,使其数据不因逗号而被分割。
上图可以看出效果,一个ABC的 print,右边的结果是第一行输出,它是ab作为一行,第二行是一个c。
二、分支节点
分支节点是 DataStudio 中提供的逻辑控制系列节点中的一类。它可以定义分支逻辑和在不同逻辑条件时下游分支走向。一般会结合赋值节点一起使用。赋值节点传入一个参数,分支节点中根据设置的分支条件判断输入的参数是走a分支还是走b分支,在分支条件中进行判断。
三、归并节点
1、归并节点也是 DataStudio 中提供的逻辑控制系列节点中的一类 ,可以对上游节点的运行状态进行归并,用来解决分支节点下游节点的依赖挂载和运行触发问题。 2、目前归并节点也可以直接对上游任务进行判断。不管它成功或者失败,通过归并节点的一个判断,继续运行下游。
3、注意:分支未运行只适用于上游是分支节点,下游运行状态为跳过时的判断,而上游为灰色未运行状态时,并不会进行逻辑判断。
四、循环节点
1、循环节点的循环次数控制,是由上游赋值节点实际输出的一维数组元素的个数控制,以此来达到循环的目的。
2、for-each 节点的使用有限制如下:
(1)您需要购买 DataWorks 标准版及以上版本,才可以使用 for each 节点。
(2) for-each 节点最多可以循环128次, 一旦超过便会报错。比如赋值节点输出130的结果集,下游循环节点去循环,它超过了128次,循环节点它就会报错失败。
(3)如果for-each节点内部需要进行逻辑判断和结果遍历,您可以使用分支节点。但是在遍历节点内部,分支节点需要和归并节点同时使用。这是因为分支节点下游会有一个分支是跳过的状态,所以它必须要和联合归并节点去将跳过状态那个分支投通过归并节点,让下游变成一个正常的状态,继续循环运行。
(4)for-each 节点不支持在 DataStudio 界面直接运行。您需要提交和发布节点后,在运维中心页面配合赋值节点运行。如果是标准项目的版本,就可以先将任务提交之后,进入运维中心的开发环境去测试运行,如果只是简单模式的项目,就只能提交到生产环境的运维中心去测试运行。
3、for-each 节点支持以下四种环境变量:
(1)${dag.foreach.current} :当前遍历到的数据行。
(2)${dag.loopDataArray} :输入的数据集。
(3)${dag.offset} :偏移量。
(4)${dag.loopTimes} :当前循环次数,值为${dag.offset}+1。
循环节点的内部,它也支持一种复杂的循环,比如看到一个复杂的业务流程,比如从star节点开始,第一个节点是一个同步任务的节点,同步任务节点输出,进入循环,对任务进行一个归并状态。如果它上游是一个分支或者其他节点,如果上游失败了,或者报错异常,反正就是一个失败状态,它下游进行归并,归并上游的一个状态,下游继续运行下去,继续循环起来,一个通过赋值节点将输出参数存入到一个分支节点中,走不同的一个分支链路,最后再进行一个归并的控制,通过上游的一个赋值节点输入控制它的一个循环次数。在整个循环节点的外部,它还会挂载一个一个赋值节点,赋值节点的输出控制一个循环的一个次数。
4、从赋值下来,走分支,分成两个不同分支的一个链路。下面有一个归并节点和一个直接挂在sql节点一个测试。通过一个归并节点上游判断上游两个任务的运行状态如何,它可以直接对两个任务的运行判断,比如判断节点失败了的状态会继续运行,如果是两个都成功,那就肯定都运行了,如果其中一个失败,那就会根据归并条件的判断,不是且或者是或的状态去判断,上游两个任务的一个情况。
五、常见问题
1、分支下的节点,怎么会是直接跳过的状态,并没有直接运行,日志只显示:It's set condition-skip by task(706803301668-分支b)这是因为该节点上游是分支节点的下游分支,且并没有挂归并节点,上游有被分支跳过的状态,所以其下游也均是被跳过运行,直接显示成功。有归并节点存在时,并不会有这种情况。
2、赋值节点输出为空的情况,下游分支节点因为取不到赋值节点传入的参数。日志中可以看到一个处理输入参数替换的错误。
3、父节点依赖已经挂上赋值节点,但在上下文传参那为什么有时会获取不到赋值节点的输出?这种情况,只需将上游赋值节点,先保存提交下,下游“本节点输入参数”, 就能下拉获取到相应的参数。
4、因为环境的问题,循环节点不支持在界面运行,需要提交到运维中心后再测试运行,或者如果是标准项目可以提交后,进入开发环境运维中心测试执行。
