1 建立maxcompute任务
1.1 选择数据开发 -> 业务流程 -> 目标的业务流程(本案例中以yht_prod为例) -> 数据开发 -> 选择合适的文件夹 -> 右键新建OOPS SQL任务
如下图:
1.2 按照表命名规则一样来命名odpssql任务,点击提交,即进行节点开发页面,如下图:
2 配置maxcompute任务参数
2.1、正常情况
图中的案例是:t1表为分区表,周期性调度;t2表为非分区表,无调度,t3表为分区表,但是非周期性调度
数据开发中的任务只需要配置调度配置页面各参数,关于参数配置会在后面单独开一个章节来介绍。其实除了配置时间参数外,主要的就是配置调度依赖下的各个参数了,如下图
在进行具体的参数配置之前,其实想谈一下自己对调度的理解。调度其实就是将一个个任务,按照一定循序,按照一定逻辑,组成的一个有向无环图。而从这样的理解中出发,其实每个任务的上游的依赖对象是一个个调度任务,而如果依赖对象不是调度任务,就不需要存在在调度中了。
在maxcompute任务开发过程中,每张from后的表均是该任务所依赖的表,而dataworks提供了代码解析功能,即上图中,代码解析功能,我们点击代码解析后,系统会自动将任务所有依赖的表均自动解析出来,如下图
对比上面两张图,可以看到差异;比照脚本,我们可以看到在from后的所有得依赖均被解析了出来。
提交按钮,发现提交报错,如下图:
报错提示:“依赖性选择其他节点时,依赖项的节点不允许为空”,这个报错其实是在说明,我们配置的任务中,系统找不到它任务调度,这也是在脚本注释里我标注了每张表的调度信息,以及对待是否分区表,在书写sql时的不同处理方式的原因。 这种情况下,我们需要将无调度的任务从任务依赖中删除,该删除有两种方式:
- 直接在代码解析的”依赖的上游节点“选项卡里删除无调度任务的依赖
- 在脚本中选中需要在依赖中剔除的表名,鼠标右键 -> 选择删除输入 -> 再次点击代码解析
上述任何一种操作后,在maxcompute任务的最上方会出现如下图的脚本
此时,依赖的上游节点中就把无调度的表给删除了,这样我们点击提交就可以提交了。而这也验证了我一开始对调度的思考,脚本中的依赖表很多,但是在调度依赖中并不需要把所有的表配置进去,而是应该把所有由调度任务生成的表配置进去,所以,针对无调度的表应该剔除出去。
2.2、特殊情况1
在第一种情况的基础上,增加了一张表,具体如下:
可以看到脚本上多了一张cw1的表,而右侧在代码解析的时候解析出来的表的名称为空。此时进入到业务流程进行任务提交的时候会报如下图的错误: 报”当前节点依赖的父节点输出名:XXX 不存在,不能提交本节点,请确保拥有该输出名的父节点:已被提交!“错误,这种情况暂时不知道原因,解决办法是进入业务流程页面,手工将上游依赖与本任务进行关联,具体操作如下图:
在官方文档中也总结出了几个原因,具体大家可以点击链接关注官方文档 提交节点报错:当前节点依赖的父节点输出名不存在
2.3、特殊情况2
还有一种情况,就是自依赖——意思为本表的本周期的产出,必须依赖本周的上一周期的产出。 根据脚本可以看出来,表的产出需要其本身上一个周期的,这种情况应该如何配置调度参数呢?具体的情况如下:
我们可以看到,在上一周期中选择本节点,这样在就配置好了自关联,而我们在“血缘关系”选项卡中可以看到自己设置的自连接的可视化,如下图: