任务间的调度依赖关系是您构建有序业务流程的根本。只有正确构建任务的依赖关系,才能保障业务数据有效、适时地产出,形成规范化的数据研发场景。

在DataWorks使用上,您可以通过代码自动解析和设置节点依赖关系配置节点依赖,以正常的上下游关系及节点运行状态来保障业务数据的顺序产出。

设置节点依赖关系的目的:检测SQL查询中表数据的产出时间,通过节点的状态判断上游数据是否顺利产出。

您可以将上游节点的本节点输出作为下游节点的本节点输入,以形成依赖关系。依赖关系
DataWorks为您提供自动推荐自动解析自定义配置三种依赖配置模式。依赖关系的操作示例请参见设置调度依赖最佳实践调度依赖

无论如何配置依赖关系,调度的总逻辑不变:上游执行成功之后才会触发下游调度。因此,所有节点必须至少有一个父节点,调度依赖的核心即设置父子节点的依赖关系。下文将为您详细介绍调度依赖的原理及配置方式。

说明

规范化数据开发场景

  • 在进行调度依赖关系配置前,您需要了解以下基本概念:
    • DataWorks任务:定义对数据执行的操作,详情请参见基本概念
    • 输出名称:系统将为每个节点默认分配一个以.out结尾的输出名,同时您也可以增加自定义输出名,但需要注意输出节点名称在租户内不允许重复。详情请参见基本概念
    • 产出表:指某节点的SQL语句中,INSERT或CREATE语句之后的表。
    • 输入表:指某节点的SQL语句中,FROM后的表。
    • SQL语句:此处指MaxCompute SQL

    实际工作中,1个DataWorks任务可以包含单个SQL语句,也可以包含多个SQL语句。

    每个形成上下游关系的任务均通过输出名进行关联,其中创建的最上游节点可以配置为本工作空间的根节点(节点名projectname_root)。

  • 规范化数据开发原则
    在规范化的数据开发流程中,会构建多个SQL任务形成具有依赖关系的上下游,同时建议遵循以下原则:
    • 下游任务的输入表必须是上游任务的产出表。
    • 一个任务仅产出一张表。

    目的是为了当业务流程无限膨胀时,可以快速地通过自动解析方式配置复杂的依赖关系。

  • 规范化数据开发流程示例开发示例
    上图中,各任务及其代码如下:
    • Task_1任务代码如下,本任务的输入数据来自ods_raw_log_d表,数据输出至ods_log_info_d表。
      INSERT OVERWRITE TABLE ods_log_info_d PARTITION (dt=${bdp.system.bizdate})
        SELECT ……  //代表您的select操作。
        FROM (
        SELECT ……  //代表您的select操作。
        FROM ods_raw_log_d
        WHERE dt = ${bdp.system.bizdate}
      ) a;
    • Task_2任务代码如下,本任务的输入数据来自ods_user_info_dods_log_info_d表,数据输出至dw_user_info_all_d表。
      INSERT OVERWRITE TABLE dw_user_info_all_d PARTITION (dt='${bdp.system.bizdate}')
      SELECT ……  //代表您的select操作。
      FROM (
        SELECT *
        FROM ods_log_info_d
        WHERE dt = ${bdp.system.bizdate}
      ) a
      LEFT OUTER JOIN (
        SELECT *
        FROM ods_user_info_d
        WHERE dt = ${bdp.system.bizdate}
      ) b
      ON a.uid = b.uid;
    • Task_3任务代码如下,本任务输入数据来自dw_user_info_all_d表,数据输出至rpt_user_info_d表。
      INSERT OVERWRITE TABLE rpt_user_info_d PARTITION (dt='${bdp.system.bizdate}')
      SELECT ……  //代表您的select操作。
      FROM dw_user_info_all_d
      WHERE dt = ${bdp.system.bizdate}
      GROUP BY uid;
    x

依赖的上游节点

依赖的上游节点指当前节点依赖的父节点,此处需要输入上游节点的输出名称(一个节点可以同时存在多个输出名称,您可以根据自身需求输入需要的输出即可),并不是上游节点名。您可以手动搜索上游输出名进行添加,也可以通过SQL血缘关系代码解析获取。依赖的上游节点
说明 依赖的上游节点,必须使用上游节点的输出名或输出表名进行检索。

如果您通过手动搜索上游输出名添加,则搜索器会根据已提交至调度系统中的节点的输出名来进行搜索。

  • 通过输入父节点输出名搜索

    您可以通过搜索某节点的输出名,将其配置为本节点的上游依赖来形成依赖关系。

  • 通过输入父节点输出名的表名称进行搜索
    通过该方法搜索必须保证父节点的某一个输出名,为本节点SQL语句中INSERT或CREATE之后的表名称,形如projectname.表名(通常该类输出名可以自动解析获取)。搜索
    执行提交后,其它节点可以通过搜索表名的方式搜素该输出名。提交

本节点的输出

本节点的输出指当前节点的输出,您可以在右侧的调度配置页面获取本节点的输出信息。

系统将为每个节点默认分配一个以.out结尾的输出名,同时您也可以增加自定义输出名或通过自动解析获取输出名。
说明 输出节点名称全局唯一,在整个阿里云账号内不允许重复。

自动解析依赖关系

DataWorks将根据任务节点中实际的SQL内容解析出不同的依赖关系,解析得到的父节点输出名称、本节点输出名称如下所示:
  • 父节点输出名称:projectname.INSERT后的表名。
  • 本节点输出名称:
    • projectname.INSERT后的表名。
    • projectname.CREATE后的表名(通常用于临时表)。
说明 如果您是从DataWorksV1.0升级至DataWorks V2.0的用户,则本节点输出名称为projectname.本节点名。
下图为自动解析依赖关系的原理。原理图
  • Select一张表,该表将自动解析为本节点依赖的上游。
  • INSERT一张表,该表将自动解析为本节点的输出。
如果出现的多个INSERT、FROM,则会自动解析出多个输出、输入名称。解析多个输出
如果您构建了存在依赖关系的多个任务且满足条件:下游任务的输入表均来自上游任务的输出表,则通过自动解析功能即可实现全工作流依赖关系的快速配置。输出表
说明
  • 为提高任务的灵活性,建议一个任务仅包含一个输出点,以便您可以灵活组装SQL业务流程,达到解耦的目的。
  • 如果SQL语句中的一个表名既是产出表又是被引用表(被依赖表),则解析时只解析为产出表。
  • 如果SQL语句中的一个表名被多次引用或被多次产出,则解析时只解析一个调度依赖关系。
  • 如果SQL代码中有临时表(例如在属性配置中指定t_开头的表为临时表),则该表不会被解析为调度依赖。
在自动解析的前提下,您可以通过手工设置添加、删除、输入或输出的方式,来决定避免或增加某些SQL语句中的字符被自动解析为输出名或输入名。自动解析

右键单击选中的表名,即可对SQL语句中出现的所有表名进行输出、输入的添加或删除。操作后,被添加输入的字符会被解析为父节点输出名称,被添加输出的字符则会被解析为本节点的输出。反之,如果选择删除输入删除输出则不会被解析。

说明 除右键选中SQL语句中的字符外,您还可以通过添加注释的方式修改依赖。
--@extra_input=表名 --添加输入
--@extra_output=表名 --添加输出
--@exclude_input=表名 --删除输入
--@exclude_output=表名 --删除输出

自定义添加依赖关系

当通过SQL血缘关系无法准确自动解析节点之间的依赖关系时,您可以选择下图中的来自行配置依赖关系。依赖关系

当自动解析选择为时,您可以单击自动推荐,启用自动推荐上游依赖功能。系统将会基于本工作空间的SQL血缘关系为您推荐产出当前节点输入表的其它所有SQL节点,您可以根据自身需求,单选或多选推荐列表中的任务,配置为当前节点的上游依赖任务。

说明 被推荐节点需在前1天提交到调度系统,等到第2天的数据产出之后,才可以被自动推荐功能识别。
常见场景:
  • 本任务输入表不等于上游任务产出表。
  • 本任务产出表不等于下游任务输入表。
在自定义方式下,您可以通过以下两种方式配置依赖:
  • 手动添加依赖的上游节点示例
    1. 新建3个节点,系统会自动为它们分别配置一个输出名称。输出名称task_1task_2task_3
    2. 将最上游节点task_1配置依赖本工作空间根节点,单击保存保存
    3. 配置task_2依赖task_1的输出名称,单击保存保存
    4. 配置task_3依赖task_2的输出名称,单击保存保存
    5. 配置完成后,单击提交,判断依赖关系是否正确。如果提交成功则说明依赖配置无误。提交
  • 通过拖拽形成依赖关系示例
    1. 新建3个task节点,将最上游task_1配置依赖上游为根节点,单击保存保存
    2. 通过拖拽方式连接3个task。连接task
    3. 查看task_2、task_3的依赖配置,可以看到已自动生成依赖的父节点输出名。输出名输出名
    4. 配置完成后,单击提交,判断依赖关系是否正确。如果提交成功则说明依赖配置无误。依赖配置

跨项目(工作空间)依赖

目前DataWorks支持同区域下的跨工作空间依赖,配置方法与普通依赖一致。
说明 对于部分早期工作空间,可能无法支持标准模式工作空间依赖简单模式工作空间,请提交工单申请修复。