开发者学堂课程【SaaS 模式云数据仓库系列课程 —— 2021数仓必修课:DataWorks 调度依赖的基本使用】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/55/detail/1198
DataWorks 调度依赖的基本使用
内容简介:
一、为什么需要设置调度依赖
二、依赖关系设置的几种方式
三、拉线设置依赖
四、最佳实践
五、如何设置调度依赖
一、为什么需要设置调度依赖
1.为什么要设置调度依赖
设置调度依赖是为了保障业务数据有效、适时地产出,形成规范化的数据研发场景。规范的依赖关系配置后,无需关心当前节点需要依赖表由哪个节点产出,通过 DataWorks 自动解析一键为您设置任务依赖。
2.调度依赖在 DataWorks 上的具体实现
产出 table_ B 数据的节点 B 任务执行完成,平台默认数据已经准备就绪,下游需要依赖该表数据的节点(表)可以开始取数了。
“表之间依赖”转换为”产出表数据的节点之间依赖”
问题:
如何通过表找到产出该表数据的节点,挂上节点依赖呢?
3.调度依赖的原理
Dataworks 上通过节点输出来挂依赖的,上游节点的输出作为下游节点的输入形成依赖关系。
场景示例:
当前节点 B 产出 table_ B 数据,table_ B 数据依赖 table_A,那么我们将产出表 table_ A数据的节点作为当前节点B的上游依赖。
问题:
我知道需要依赖这个表数据,也知道这个表数据由哪个节点产出,但是我不可能每次需要依赖表的时候,都打开这个节点找到他的输出设置依赖关系,团队协同开发的时候,这样也是不可能的怎么办呢?
二、依赖关系设置的几种方式
➢自动解析(推荐★ )
➢自定义依赖
➢拉线设置依赖
2.1自动解析
1.insert overwrite table table_ a as select * from project _b _name.table_ b;
血缘关系:
● 查询 project _b _name.table _b 的数据写入 table _a。
自动解析:
● project _b_name.table_ b 会作为该节点输入,格式为 project_ b_name.table_ b;
● table_ a 会作为该节点的输出,格式为 project_ a _name.table_a。
2.推荐自动解析的原因:
➢根据代码的逻辑,判断您在当前节点需要出某张表。当您以 project _name. tablename 的方式将其作为本节点输出时,后续其它节点需要查询该表时您无需关注要依赖哪个节点,您只需要关注要依赖该表当前周期产出的数据。
➢当您无法确定当前工作空间产出该表数据的具体节点时,您可以使用自动解析,帮助您快速开发业务流程。
➢使用自动解析该操作的前提是遵循自动解析规范。
➢同地域的工作空间支持自动解析依赖关系,即支持同地域跨工作空间配置节点调度依赖关系。
2.2 自定义依赖
➢代码编辑输入输出
➢手动添加上游依赖
➢自动准荐
1. 问题:
这个表数据是我本地上传的,自动解析将他解析出来了,但是提交报错依赖的父节点输出不存在,自动解析的依赖关系这里不能删除,该怎么办?
● 方式一:代码中编辑输入输出
-- @extra_ input=表名--添加输入
--@extra_ output表名--添加输出
--@exclude_ input=表名--删除输入
--@exclude_ output=表名--删除输出
输入和代码血缘分析不四配的提示
1.为什么会出现该提示?
代码中删除输入输出——找不到产出该表数据的节点任务——表数据是固定的?
2.需要我们关注什么?
确认这张表的数据源来源
● 本地上传的表数据,可忽略血缘关系不一致的提示
● 是 DataWorks 周期调度产出的表数据,
请务必再次确认产出该表数据的节点是否有将该表作为节点输出。
● 方式二:手动添加上游依赖
场景一:
需要依赖某个表数据。
场景二:
需要依赖某个节点,不一定存在表血缘依赖。
● 方式三:自动推荐
自动推荐:
当自动解析选择为否时,您可以使用自动推荐功能自定义添加需要依赖的上游节点。
自动推荐功能会自动解析出所有已经提交并发布至生产环境,并且实际运行产出该表的节点。
说明:由于需要提交发布至生产环境并真实产出该表数据的节点,才会被解析出来,所以此处解析的节点有 T+1 的延迟。
三、拉线设置依赖
● 在业务流程面板连线形成依赖关系后,系统会自动将上游节点的输出。
● 名称作为下游节点的上游依赖(输入),即上游节点自带的 out 输出。
● 名称作为下游节点的上游依赖(输入)。
注意:拉线设置依赖的时候自动解析是默认打开的
四、最佳实践
● 产出表数据的节点将该表作为节点输出。
● 一张表数据由一个节点产出,保证节点输出 region 下唯一。
● 建议任务名称和输出表名保持一致。
五、如何设置调度依赖
5.1同步任务调度依赖配置
同步任务:建议节点名为该同步任冬产出的表名。
5.2血缘关系
出现血缘关系不正确的原因如下:根据自动解析我们可以知道,当下游查询该表的数据时,自动解析会将该表作为当前节点的上游依赖,但在一开始并未将该表作为节点的输出 ,导致提交任务时报错依赖的父节点输出不存在,没有根据该表找到产出该表数据的上游任务。
5.3依赖的父节点输出不存在
报错场景:当前节点产出 dw _user_ info_ all _d 表数据,依赖 ods _log_ jinfo_d,ods_ user_info_d_ 1 表,其中 ods_ user_ jnfo_d_ 1 表提交报错。
如果当前需要将节点提交上去不报错的解决方式:
1. 自动解析设置为否(不推荐x)
自动解析设置为否--血缘关系不一致--- 当前节点提交正常--下游
节点 select 表 dw _user_info_all_d 表--提交报错:
dw_ user_ info _all_ d 不存在-数据质量问题?
2.确认该表数据来源:
场景一 :本地上传的数据,代码中删除输入,忽略血缘关系提示,提交任务。
场景二:找到产出表 ods_ user_ jinfo_d_1 数据的节点,将该表作为节点输出。
5.4节点输出相同,提交失败
● 同 region 下同名节点需要修改一 个节点的输出。
● 一个表数据由一个节点产出。
5.5删除节点失败,当前节点存在下游
1.检查需要删除的节点调度配置界面
2.打开下游节点去除依赖
3.提交下游节点墅开发环境
4.发布下游节点整生产环境