设置正确的调度依赖关系是您构建有序业务流程的根本,可以保障业务数据有效、适时地产出,形成规范化的数据研发场景。规范的依赖关系配置后,无需关心当前节点需要依赖表由哪个节点产出,通过自动解析一键为您设置任务依赖。

您可以通过以下三种方式设置节点的依赖关系:
  • 在业务流程面板连线形成依赖关系。
  • 自动解析配置形成依赖关系。
  • 自定义依赖。

您可以同时使用上述方式,依赖关系实际操作示例请参见设置调度依赖最佳实践

说明 建议一张表数据由一个节点产出,并且节点名与节点产出的表名保持一致。

在业务流程面板连线形成依赖关系

说明 在业务流程面板连线形成依赖关系需要依赖的节点都属于当前业务流程。
  1. 登录DataWorks控制台,单击相应工作空间后的进入数据开发
  2. 双击业务流程名称打开编辑面板,新建业务流程的详情请参见管理业务流程
  3. 在业务流程的编辑面板,通过拖拽连线的方式设置节点的依赖关系。
  4. 双击打开父节点,单击右侧导航栏中的调度属性,为业务流程的首节点设置依赖的上游节点。您可以单击调度依赖下的使用工作空间根节点,或根据业务场景在业务流程首节点依赖的上游处输入当前业务流程需要依赖的父节点输出名称。
  5. 配置完成后,单击工具栏中的提交
在业务流程面板连线形成依赖关系后,系统会自动将上游节点的输出名称作为下游节点的上游依赖(输入),即上游节点自带的_out输出名称作为下游节点的上游依赖(输入)。依赖关系输出

自动解析配置形成依赖关系

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

自动解析

自动解析是根据代码中表的血缘关系,解析出当前节点依赖的上游及本节点的输出名称。建议您在设置任务的调度依赖时,设置为通过自动解析来解析上下游依赖。自动解析
  • 当前节点insertcreate一张表时,会将该表作为当前节点的输出名称。格式为:project_name.table_name
  • 当前节点select一张表时,会将该表作为当前节点的上游依赖。
说明 默认情况下,表名为t_开头的会被当成临时表,自动解析不解析临时表。如果t_开头不是临时表,请联系自己的项目管理员到工作空间配置页面进行修改。
例如ODPS SQL节点的代码如下。
insert overwrite table table_a as select * from project_b_name.table_b;
系统会判断该节点需要依赖产出表table_b,同时本节点最终产出表table_a。因此解析父节点输出名称为project_b_name.table_b,本节点的输出名称为本project_name.table_a输出名称
使用自动解析的原因如下:
  • 根据代码的逻辑,判断您在当前节点需要产出某张表。当您以project_name.tablename的方式将其作为本节点输出时,后续其它节点需要查询该表时,您无需关注要依赖哪个节点,您只需要关注要依赖该表当前周期产出的数据。

    当您无法确定当前工作空间产出该表数据的具体节点时,您可以使用自动解析,帮助您快速开发业务流程。

  • 使用自动解析该操作的前提是遵循自动解析规范,即下文所述的避免血缘关系不正确的方式。
  • 同地域的工作空间支持自动解析依赖关系,即支持同地域跨工作空间配置节点调度依赖关系。

血缘关系

出现血缘关系不正确的原因如下:
  • 当您提交任务时,会提示血缘关系不正确,通常会忽略该提示单击提交

    当下游查询该表的数据时,自动解析会将该表作为当前节点的上游依赖,但在一开始并未将该表作为节点的输出,导致提交任务时报错依赖的父节点输出不存在,没有根据该表找到产出该表数据的上游任务。

  • 通常血缘关系不正确出现在自动解析为的场景中。
当出现血缘关系不正确时,提交您的节点会报错输入和代码血缘分析不匹配,指的是当前节点的上游依赖和代码解析到所查询的表不一致。血缘关系

例如在代码中查询了xc_DPE_E2.xc_ods_user_info_dxc_DPE_E2.xc_ods_log_info_d表,在依赖的上游节点处未将产出这两张表数据的节点作为当前节点的上游依赖,从而出现提交时报错输入和代码血缘关系不匹配的提示。

您可以通过以下方式避免血缘关系不正确:
  • 尽量避免设置自动解析,避免修改当前节点的输出名称。该节点select某张表的数据,则将该表作为本节点的上游依赖。该节点insertcreate该表的数据,则将该张表作为节点的输出名称。
  • 如果出现血缘关系不匹配导致提交时报错找不到表或找不到产出该表数据的节点时,您可以使用自定义依赖。

自定义添加或删除依赖

自定义依赖是指在依赖的上游节点处,手动添加需要依赖的上游节点(注意添加的是父节点输出名称)。

自定义依赖是血缘关系不准确时,额外添加的上游依赖。建议您尽量保证代码血缘的准确性,减少使用自定义依赖的次数。

自定义依赖的使用场景如下:
  • 自动解析为的情况下,使用自动推荐功能推荐需要依赖的上游节点。
  • 手动输入依赖的上游节点(父节点输出名称)。
  • 添加或删除输入、输出(即添加或删除不需要的依赖)。
详细说明如下:
  • 自动推荐

    当自动解析选择为时,您可以使用自动推荐功能自定义添加需要依赖的上游节点。

    自动推荐功能会自动解析出所有已经提交并发布至生产环境,并且实际运行产出该表的节点。
    说明 由于需要提交发布至生产环境并真实产出该表数据的节点,才会被解析出来,所以此处解析的节点有T+1的延迟。
  • 手动添加依赖
    当血缘关系不正确时,您可以在调度配置 > 依赖的上游节点处添加需要依赖的上游节点的输出名称,即产出该表数据的节点的本节点输出名称。手动添加上游依赖
  • 添加或删除输入、输出
    如果自动解析中包括不需要依赖的父节点输出名称,您可以在代码的编辑区域右键单击相应的表名,进行添加输入添加输出删除输入删除输出等操作。您也可以在代码的最上方添加一条规则的注释,操作完成后自动解析将不会解析该依赖。删除输入
说明 为保证代码血缘的准确性,建议减少使用自定义依赖的次数。完整的任务依赖需要根据业务场景结合调度参数和跨周期依赖,来保障业务数据的完整产出,请谨慎使用该功能。