DataWorks数据模型开发规范

时间:2023-02-11 12:00:44

1 建立maxcompute任务

1.1 选择数据开发 -> 业务流程 -> 目标的业务流程(本案例中以yht_prod为例) -> 数据开发 -> 选择合适的文件夹 -> 右键新建OOPS SQL任务
如下图: DataWorks数据模型开发规范

1.2 按照表命名规则一样来命名odpssql任务,点击提交,即进行节点开发页面,如下图:
DataWorks数据模型开发规范

2 配置maxcompute任务参数

2.1、正常情况   

图中的案例是:t1表为分区表,周期性调度;t2表为非分区表,无调度,t3表为分区表,但是非周期性调度

数据开发中的任务只需要配置调度配置页面各参数,关于参数配置会在后面单独开一个章节来介绍。其实除了配置时间参数外,主要的就是配置调度依赖下的各个参数了,如下图
DataWorks数据模型开发规范

 在进行具体的参数配置之前,其实想谈一下自己对调度的理解。调度其实就是将一个个任务,按照一定循序,按照一定逻辑,组成的一个有向无环图。而从这样的理解中出发,其实每个任务的上游的依赖对象是一个个调度任务,而如果依赖对象不是调度任务,就不需要存在在调度中了。   

在maxcompute任务开发过程中,每张from后的表均是该任务所依赖的表,而dataworks提供了代码解析功能,即上图中,代码解析功能,我们点击代码解析后,系统会自动将任务所有依赖的表均自动解析出来,如下图
DataWorks数据模型开发规范  

对比上面两张图,可以看到差异;比照脚本,我们可以看到在from后的所有得依赖均被解析了出来。

提交按钮,发现提交报错,如下图:
DataWorks数据模型开发规范   报错提示:“依赖性选择其他节点时,依赖项的节点不允许为空”,这个报错其实是在说明,我们配置的任务中,系统找不到它任务调度,这也是在脚本注释里我标注了每张表的调度信息,以及对待是否分区表,在书写sql时的不同处理方式的原因。   这种情况下,我们需要将无调度的任务从任务依赖中删除,该删除有两种方式:

  • 直接在代码解析的”依赖的上游节点“选项卡里删除无调度任务的依赖
  • 在脚本中选中需要在依赖中剔除的表名,鼠标右键 -> 选择删除输入 -> 再次点击代码解析

   上述任何一种操作后,在maxcompute任务的最上方会出现如下图的脚本
DataWorks数据模型开发规范   此时,依赖的上游节点中就把无调度的表给删除了,这样我们点击提交就可以提交了。而这也验证了我一开始对调度的思考,脚本中的依赖表很多,但是在调度依赖中并不需要把所有的表配置进去,而是应该把所有由调度任务生成的表配置进去,所以,针对无调度的表应该剔除出去。


2.2、特殊情况1   

在第一种情况的基础上,增加了一张表,具体如下:
DataWorks数据模型开发规范   可以看到脚本上多了一张cw1的表,而右侧在代码解析的时候解析出来的表的名称为空。此时进入到业务流程进行任务提交的时候会报如下图的错误: DataWorks数据模型开发规范   报”当前节点依赖的父节点输出名:XXX 不存在,不能提交本节点,请确保拥有该输出名的父节点:已被提交!“错误,这种情况暂时不知道原因,解决办法是进入业务流程页面,手工将上游依赖与本任务进行关联,具体操作如下图: 
DataWorks数据模型开发规范

在官方文档中也总结出了几个原因,具体大家可以点击链接关注官方文档 提交节点报错:当前节点依赖的父节点输出名不存在


2.3、特殊情况2


   还有一种情况,就是自依赖——意思为本表的本周期的产出,必须依赖本周的上一周期的产出。   根据脚本可以看出来,表的产出需要其本身上一个周期的,这种情况应该如何配置调度参数呢?具体的情况如下:

   我们可以看到,在上一周期中选择本节点,这样在就配置好了自关联,而我们在“血缘关系”选项卡中可以看到自己设置的自连接的可视化,如下图:
DataWorks数据模型开发规范