DataWorks 如何设置调度依赖

  1. 云栖社区>
  2. 阿里云DataWorks>
  3. 博客>
  4. 正文

DataWorks 如何设置调度依赖

dataworks彭敏 2018-10-23 22:04:27 浏览4870

DataWorks 新版本在配置任务依赖的时候,是根据本节点输出名称作为关联项来给任务间设置依赖关系的,那我们应该如何配置任务的输入输出呢。

如何配置任务的本节点输入

本节点输入有两种配法,一种是使用代码自动解析功能,解析出任务的依赖;另一种是手动输入任务依赖(手动输入父节点的本节点输出名称)。
image
敲黑板:手动输入上游节点时,输入的是父节点本节点输出名称,如果父节点任务名称和父节点的本节点输出名称不一致的话,一定不要输错了。

在配置上游节点的时候,经常会遇到一个问题:通过自动解析出来的上游节点,是一个无效的上游依赖。那如何识别一个依赖是否有效呢,可以查看解析出来的上游依赖,在父节点ID这一列是否有值。
image

任务依赖的配置,实质上是给两个节点设置节点间的依赖关系,只有真实存在的节点,才能够设置上有效的依赖关系,任务依赖才能设置成功。

无效的上游依赖

那遇到无效的上游依赖时,应该如何处理呢。
Case 1:
image
Case 2:
image
这个时候很明显了,解析出来的父节点输出名称是不存在的,那有可能project_b_name.pm_table_b这个表,是没有产出任务的,或者这个表产出任务的本节点输出配置的不对,导致无法解析出来。

那解决方案有两个:

  1. 确认这个表是否有产出任务
  2. 确认这个表产出任务的本节点输出名称是什么,将这个本节点输出名称手动输入到依赖的上游节点中。
    image

敲黑板:手动输入上游节点时,输入的是父节点本节点输出名称,如果父节点任务名称和父节点的本节点输出名称不一致的话,一定不要输错了。
举个例子吧:有一个上游节点A,A的本节点输出名称是A1;有一个下游节点B需要依赖A,这个时候应该在依赖上游节点的输入框中,输入A1,并点击右侧的加号进行添加。

同步任务如何配置上游依赖

我的表是从源库抽取过来的,没有上游了,你告诉我咋办吧。

那就点一下使用项目根节点吧。
image

如何配置任务的本节点输出

配置本节点输入好麻烦,有一点点不太想写代码,有啥好方法没。

下面给大家讲解一下,在阿里内部是如何高效配置本节点输出的。

懒人法:本节点名称、本节点输出名称、本节点输出表名,三名合一,一招鲜,吃遍天。

这个三名合一有几个好处:

  1. 能够快速的知道这个任务操作的是哪个表
  2. 能够快速知道这个任务失败后造成的影响范围有多大
  3. 使用自动解析配置任务依赖时,只要本节点输出符合三名合一的规则,自动解析的精准性能得到大大的提升

自动解析

自动解析:通过代码自动解析调度依赖关系。
底层实现原理:代码中只能拿到表名,如何根据表名解析出对应的产出任务,如果表名和任务名一样该有多好找啊。

如odps sql类型节点代码如下:

INSERT OVERWRITE TABLE pm_table_a
SELECT  *
FROM    project_b_name.pm_table_b
;

解析出来的依赖关系如下:
image

系统会判断这个节点应该是要依赖project_b_name产出 pm_table_b 的节点,同时本节点最终产出 pm_table_a ,因此解析父节点输出名称为 project_b_name.pm_table_b,本节点的输出名称为本project_name.pm_table_a。(本项目名称为test_pm_01)

  • 如果不想用从代码解析到的依赖,那么就选择”否”。
  • 如果代码里有很多表是临时表如t_开头的表为临时表,那么这个表是不会被解析为调度依赖。临时表的定义可以通过项目配置来定义以什么开头的表名为临时表。
  • 如果代码里一个表名即是产出表又是被引用表(被依赖表)则解析时只解析为产出表。
  • 如果代码里一个表名被多次引用或者被多次产出,那么解析时只解析一个调度依赖关系。

注意:默认情况下,表名为t 开头的会被当成临时表,自动解析不解析临时表。如果t开头不是临时表,请联系自己的项目管理员到项目配置中进行修改,修改地址为项目配置

image

如何删除某表的输入输出

自在进行数据开发的时候,经常会使用到静态表(数据通过本地文件上传到表中),这部分静态数据其实是没有产出任务的,这时候在配置依赖的时候,就需要将静态表给删除输入,若静态表的表名又不满足t开头,不会被当成临时表,那么应该如何处理呢。
实际上就是:自动依赖解析出了一堆不需要的依赖,怎么干掉它们...

这种情况,可以在代码中选中表名,点击删除输入。
image

另外再给一个小贴士:
大家使用DataWorks 2.0版本的时候,大部分都是从1.0版本迁移过来的,我们会将迁移过来的DataWorks任务的本节点输出默认置为项目名.节点名。在挂迁移任务的依赖时,也可以使用节点名来挂任务依赖。
image

一定要看

当任务依赖配置完成以后,提交的窗口会有一个选项,当输入输出和代码血缘分析不匹配时,我确认继续执行提交操作。

这个大前提是:我确认依赖关系是正确的,如果不能确认的时候,再按照上面的方法来确认一下依赖关系吧。

image

关于DataWorks V2.0版本还有啥使用上的疑惑,就加入我们的钉钉群吧,有专业的技术支持同学接客,欢迎钉钉扫码进群,二维码如下:
image