0


2023-DataWorks数仓开发手册收藏版

DataWorks开发规范

1 数仓基本概念
1.4.1 ods数据源层表命名规范
1.4.2 dim维表层表命名规范
1.4.3 dwd数据明细层表命名规范
1.4.3 dws数据明细层表命名规范
1.4.4 ads数据应用层表命名规范
1.1 数据仓库架构
1.2 数据仓库具体业务域划分
1.3 数据仓库数据流动方向
1.4 数据仓库中表命名规范
2 DataWorks开发规范
2.2.1 工作空间的创立
2.2.2 数据源的创立
2.2.3 数据开发页面简介
2.2.4 临时查询页面简介
2.2.5 公共表页面简介
2.2.6 函数列表页面简介
2.1 概述
2.2 DataWorks开发的准备工作
3 DataWorks开发规范
3.2.1 建立maxcompute任务
3.2.2 配置maxcompute任务参数
3.1.1 数据集成概念
3.1.2 数据集成开发
3.1.3 数据集成发布
3.1 DataWorks数据集成开发规范
3.2 DataWorks数据开发规范
3.3 DataWorks任务发布
3.4 DataWorks运维
4 DataWorks 重点难点(敲黑板)
4.3.1 调度基本介绍
4.3.2 调度依赖关系
4.2.1 odpscmd客户端下载
4.2.2 odpscmd安装包
4.2.3 odpscmd安装包
4.2.4 运行odpscmd客户端
4.2.5 odpscmd 最佳实践
4.1 调度参数
4.2 MaxCompute客户端-odpscmd
4.3 DataWorks调度配置解析

1 数仓基本概念

1.1 数据仓库架构

   目前,本数据仓库主要分为 ods,dim,dwd,dws,ads五层,按照数据流入流出的过程,数据仓库架构可分为:源数据, 数据仓库, 数据应用,具体架构如下:

源数据:该部分数据主要是从生产数据库,线下手工数据和日志数据,集成到dataworks中,形成了数仓的第一层ods层的数据明细

数据仓库:主要是按照业务域,对明细数据进行建模,建立各个业务域的聚合数据和数据模型

数据应用:主要是在数据仓库的基础上,结合公司业务需求,聚合成前端报表展示需要的数据;数据分析需要的数据以及一些用户画像以及数据标签依赖的数据

   按照目前企业通行惯例,数仓具体分层架构如下:

1.2 数据仓库具体业务域划分

目前数据根据业务线,划分如下

表1 业务域命名
序号业务线业务域1海外仓ovl2定制运力cas3国际小包ilp4海运sea5空运air6铁路&租箱--7箱管cm

1.3 数据仓库数据流动方向

ods dim dwd dws ads

  • 切记,数据流动方向只能按照上述方向进行流动,可以跨层,比如 ods dwd dws ads, 或者 ods dim dws ads等,但是,不允许 类似的数据逆向流动

1.4 数据仓库中表命名规范

1.4.1 ods数据源层表命名规范

前缀名+业务域名+实例名(库名)+表名+表更新频次
前缀名

  • 按照数仓分层来命名,即ods来命名

业务域名

  • 按照上述业务域命名为准,如ilp指代国际小包

实例名

  • 是指数据来自数据源的实例名称或者数据库的名字,如uexpress

表名

  • 即是在源数据源中的表名或者自定义的线下表的名字

表更新频次

  • 表述由两个字符组成,前者表示更新的时间频次,后者表示更新的是表的全量还是增量

举例说明一个实际中使用频次最多的案例 - df ,d:意思为day,指每天更新,同理,y(year),q(quarter),m(month),h(hour),mi(minute);f:意思为full,指全量更新,而增量更新用i指代,是increase的缩写。

而两者可以进行随机组合,比如 hi,表示每小时增量更新

命名为小写,不允许大写

1.4.2 dim维表层表命名规范

前缀名+表名

尽管dim维表层数据跟dwd是同一层,但是按照通用做法,给其单独的前缀,比如;另外需要注意的是,由于dim层的维度表相对固定,所以,可能不定期进行更新或者并不会配置调度,因此需要在后续依赖维表的调度和脚本进行特殊的处理,具体在后续进行介绍。

命名为小写,不允许大写

1.4.3 dwd数据明细层表命名规范

   dwd层分为两部分内容,一部分是ods层的增量数据,处理后的全量数据,在dwd里,这部分表的命名是跟ods层命名规则一致,具体详见ods层的命名规则;第二部分是通过ods层做了一部分数据清洗后的明细层数据,该部分的命名按照 前缀名 + 业务域名 + 表名,具体如下:

前缀名

  • 按照数仓分层来命名,即dwd来命名

业务域名

  • 按照上述业务域命名为准,如ilp指代国际小包

表名

  • 该表名根据模型+业务进行独立命名

关于表名书写规则

  • 全部命名为小写,不允许大写

1.4.3 dws数据明细层表命名规范

dws数据明细层命名按照 前缀名 + 业务域名 + 表名,具体如下:

前缀名

  • 按照数仓分层来命名,即dws来命名

业务域名

  • 按照上述业务域命名为准,如ilp指代国际小包

表名

  • 该表名根据模型+业务进行独立命名

关于表名书写规则

  • 全部命名为小写,不允许大写

1.4.4 ads数据应用层表命名规范

ads数据应用层命名按照 前缀名 + 业务域名 + 表名,具体如下:前缀名

  • 按照数仓分层来命名,即ads来命名

业务域名

  • 按照上述业务域命名为准,如ilp指代国际小包

表名

  • 该表名根据模型+业务进行独立命名

关于表名书写规则

  • 全部命名为小写,不允许大写

2 DataWorks开发规范

2.1 概述

   目前的数仓为离线数仓,因此DataWorks开发主要涉及到离线数据集成和数据模型开发,因此本节也是分两部分来描述

2.2 DataWorks开发的准备工作

2.2.1 工作空间的创立

   工作空间是数据集成,数据开发的基础。本数仓通过工作空间,来实现数仓的分层,即每个工作空间作为数仓的一个物理分层。

工作空间列表跳转链接

登录阿里云 DataWorks控制台——工作空间列表

点击创建空间即可,不过该权限是需要管理员来操作,ram账号权限不足。

2.2.2 数据源的创立

数据源管理页面跳转链接

进入数据源管理页面,点击新增数据源

根据你的上游数据库的类型,进行勾选合适的数据库类型

以mysql为例:

   关系型数据库都有两种数据源类型,一种是阿里云实例模式,一种是连接串模式,建议大家以阿里云实例模式来新增数据源

  • 在业务中实践中发现,在连接阿里云自建mysql数据库时,为了简单而使用了连接串模式新建数据源,但是在测试连通性的时候,发现公网地址下可以连接;但是在内网地址下却无法连通。通过走工单询问客服,得到答复是:该模式下连接阿里云自建mysql是不支持连接串模式的。

   而“适用环境”选项中,一般勾选开发和生产两个选项,这样该数据源在做数据集成的时候,可以在开发和生产环境下均可以使用。
   rds实例ID和rds实例主账号ID,是由主账号生成的。
   而在输入数据库,用户名和密码后,需要测试连通性后才能点击完成,保证数据源是处于可联通的状态。至此,我们在做数据集成之前的准备工作已经做好。

2.2.3 数据开发页面简介

具体的开发页面如下图,针对数据开发中涉及到的主要功能页面接下来会一一介绍。

数据开发

   顾名思义,该页面是进行数据开发的页面    选中“业务流程”,右键新建业务流程,在新建业务流程中具体的功能如下图。而随后的数据集成和数据开发的所有的动作都会在这个页面中进行。

在业务流程中有几个常用的选项

1、数据集成

该选项是所有的已上线或者未上线的数据集成的任务

2、MaxCompute

该选项是所有的已上线或者未上线的数据模型的调度集合

3、通用

该选项是所有的已上线或者未上线的数据调度线的起始虚拟节点。

2.2.4 临时查询页面简介

如下图:

     每个开通了DataWorks权限的员工都有权建立属于自己的临时查询文件夹以及查询文件,每个开通了DataWorks权限的员工都有权查看其他人的文件夹以及文件,但是无法做修改。

2.2.5 公共表页面简介

  如下图

在该页面有两个内容需要读者了解下:

第一、可以在查询窗口查询所有存在的表,在选中表后,下方会有三个选项卡:
a、列信息
可以看到表中的所有的列名,字段类型和字段的备注 b、分区信息
可以看到表的目前已经存在的分区数据
c、数据预览
可以预览看到表中的前二十条数据
综上,可以让你对表结构以及表中数据有个大体的认识。
第二、可以在截图的右上角看到按钮来切换开发环境和生产环境,来查看开发环境和生产环境的的表

2.2.6 函数列表页面简介

如下图: 

   函数列表页面是罗列了部分dataworks支持的函数以及函数语法的说明。但是需要注意的是,该列表中的函数并不是dataworks支持的函数的全部,比如nvl函数也支持,但是在函数列表中并没有体现出来。

个人经验,dataworks支持大部分hive,mysql,sqlserver,oracle的函数,但可能又稍有不同,原则上以函数列表页面的函数为准,同时,其他支持的函数需要在业务中不断接触认识。

3 DataWorks开发规范

3.1 DataWorks数据集成开发规范

3.1.1 数据集成概念

   数据集成,从字表意思理解,数据的集中,也就是说将源数据从各个数据系统集成到dataworks中,或者从dataworks推送到各个目标系统中,以下将会介绍具体的数据集成的规范。

3.1.2 数据集成开发

1、位置
   数据开发 -> 点击业务流程 -> 点击新建 -> 选择“离线同步”,如下图:

2、操作
a、在新建选项卡页面,输入你的数据集成的名字,点击提交

  b、点击提交后页面如下所示,可以看到主要分为四部分功能区,下面将进行每一部分功能区的简述。

  • 左上角功能区主要是保存和运行提交功能区,第一个功能键为保存;第二个功能键为运行,参数取数按照上次运行的参数值或者默认值为准;第三个功能键为带参运行,顾名思义,就是需要你选定参数值,然后进行运行脚本;第四个功能键为任务提交到任务发布功能区,以待发布到生产环境;第五个功能键为任务提交并允许其他人编辑;第六个功能键为任务运行中的停止操作;第七个功能键为转换脚本,即将页面式拖拉脚本转化为脚本语言,正常人不太会用的功能。
  • 数据来源,指数据集成的数据来自于哪种类型数据库的哪个数据源,该数据源是指在前文中《2.2.2 数据源的创立》提到的数据源;
  • 数据去向,指数据集成的数据落表到哪种类型数据库的哪个数据源,该数据源是指在前文中《2.2.2 数据源的创立》提到的数据源;
  • 右侧功能区东西比较多,需要后续进行介绍

   待选择好数据来源选项卡中的数据源以及表名,数据去向选项卡中的数据源以及表名后,上述页面会变成如下页面:

  • 第1部分——数据来源选项卡中,多了开发项目名和生产项目名两个项目名,意思是该业务可以在开发跟生产环境下均可运行;第二部分是会有一个默认的分区信息,这个信息一般不需要我们处理,按照默认即可。
  • 第2部分——数据去向选项卡中,如果我们的去向数据库选择的是关系型数据库,即会出现上述两个选项:导入前准备语句和导入后完成语句,这两个选项的作用就在于,往关系型数据库写入数据的时候,在插入前或者插入后是否需要进行删除数据或者更新数据,如果需要,请按照去向数据库语法sql规则进行书写DDL sql语句。
  • 第3部分——字段映射选项卡中,是指数据源表与数据目标表中的字段映射关系,即dataworks底层数据就按照这个对应关系来同步或者推送数据;看右侧选项,如果数据源表与目标表的字段一致,我们可以用同名映射;如果数据源表与目标表的字段顺序一致,我们可以用同行映射;如果数据源表与目标表的字段不一致,包括字段名称或者顺序,我们可以手工进行拖拽字段的映射关系。

需要注意的一点是:在我们修改数据集成的,比如目标表或者原表的字段顺序发生改变,需要我们重新映射一下字段关系,否则,字段映射可能会混乱,因为dataworks本身无法进行自动字段映射。

  • 第4部分——通道控制选项卡中,按照默认设置即可,不需要改动。

   而在调度配置选项卡中,具体的示例如下。而此部分的配置是我们在数据集成乃至数据开发中的最重要的配置,具体如下:

  • 参数:可以直接加载代码中的参数,会将脚本中的参数自动加载出来
  • 时间属性:   实例生成方式 有两种,T+1次日生成,即任务上线生产环境后,需要到第二天到达其设定的调度时间后开始运行;发布后即时生成,指节点发布后可以立刻在生产运维中心周期实例面板中看到该实例:情况1,节点定时时间在节点发布时间点后10分钟的周期实例会正常运行;情况2,节点定时时间在节点发布时间点后10分以内或者节点发布时间点之前,那么实例会空跑。> 每天23:30分后进行节点变更操作并发布,节点生效时间为第三天才会生效。> 更加详细的描述请参见官方文档 实例生成方式  调度类型 分为三种,正常调度,暂停调度,空跑调度,我们以默认正常调度即可。   调度周期 支持分钟,小时,日,周,月和年调度,即在生产环境调度系统中,多久会真实执行一次节点中的代码逻辑> 更加详细的描述请参见官方文档 调度周期  定时调度时间 可以选择具体调度的时间,并且结合上面的调度周期,生成具体的调度周期和具体的执行任务的时间> 具体生成的cron表达式不了解的可以参见文档 cron表达式  超时定义 一般以默认为准,除非你的任务有具体的超时要求   重跑属性 正常以默认选项即可,运行成功或失败后均可重跑:如果节点多次重跑不会影响结果,可选择“运行成功或失败后皆可重跑”;运行成功后不可重跑,运行失败后可以重跑:如果节点运行一次成功后重跑会影响结果,而运行失败后重跑不会影响结果,可选择“运行成功后不可重跑,运行失败后可以重跑”;运行成功或失败后皆不可重跑:如果节点不管运行成功或失败重跑都会影响结果(如某些数据同步节点),可选择“运行成功或失败后皆不可重跑”,当选择这个选项时,如果系统出故障,在故障恢复后系统也不会自动重跑节点。
  • 调度依赖

依赖的上游节点 将数据来源的表名复制到输入框中,查到该任务名并添加
本节点的输出 将原默认的输出任务删除,将数据去向的表名复制到输入框中,查到该任务并添加

   在版本选项卡下,需要配置的信息不多,但是对于我们任务调度后出现问题,会很有用,如下图

   通过上图可以看到,这个任务我们有三个版本,目前生产上的版本为V3,如果说我们因为某种原因,需要将版本回退到V2,那么就点击V2后的操作选项卡下的回滚,即可回滚到V2版本。

   在资源集成资源组配置标签下,需要我们配置的只有一个,即需要手工选择方案,我们统一选择测试资源组即可。具体示例如下:

3.1.3 数据集成发布

   数据集成发布有两种方式:
   第一,在数据集成任务中,左上叫有一个发布的按钮,如下图:

   第二,在业务流程中(如何打开该页面,展开业务流程选项卡,双击我们开发的业务流程,即可出现),如下图:

   但是操作完上述操作其实并没有将任务发布到生产环境,而是仅仅将任务发布到任务发布中心,如下图,点击进入任务发布中心

   然后选择需要发布到生产的任务点击发布选中项,即发布成功,具体如下图:

3.2 DataWorks数据开发规范

本节提到的数据开发规范指的是除数据集成以外的数据模型开发过程。

3.2.1 建立maxcompute任务

选择数据开发 -> 业务流程 -> 目标的业务流程(本案例中以yht_prod为例) -> 数据开发 -> 选择合适的文件夹 -> 右键新建OOPS SQL任务
如下图: 按照表命名规则一样来命名odpssql任务,点击提交,即进行节点开发页面,如下图:

3.2.2 配置maxcompute任务参数

第一、正常情况    图中的案例是:t1表为分区表,周期性调度;t2表为非分区表,无调度,t3表为分区表,但是非周期性调度

   数据开发中的任务只需要配置调度配置页面各参数,关于参数配置会在后面单独开一个章节来介绍。

   其实除了配置时间参数外,主要的就是配置调度依赖下的各个参数了,如下图

   在进行具体的参数配置之前,其实想谈一下自己对调度的理解。调度其实就是将一个个任务,按照一定循序,按照一定逻辑,组成的一个有向无环图。而从这样的理解中出发,其实每个任务的上游的依赖对象是一个个调度任务,而如果依赖对象不是调度任务,就不需要存在在调度中了。    在maxcompute任务开发过程中,每张from后的表均是该任务所依赖的表,而dataworks提供了代码解析功能,即上图中,代码解析功能,我们点击代码解析后,系统会自动将任务所有依赖的表均自动解析出来,如下图
   对比上面两张图,可以看到差异;比照脚本,我们可以看到在from后的所有得依赖均被解析了出来。

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

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

   上述任何一种操作后,在maxcompute任务的最上方会出现如下图的脚本
   此时,依赖的上游节点中就把无调度的表给删除了,这样我们点击提交就可以提交了。而这也验证了我一开始对调度的思考,脚本中的依赖表很多,但是在调度依赖中并不需要把所有的表配置进去,而是应该把所有由调度任务生成的表配置进去,所以,针对无调度的表应该剔除出去。
第二、特殊情况1    在第一种情况的基础上,增加了一张表,具体如下:
   可以看到脚本上多了一张cw1的表,而右侧在代码解析的时候解析出来的表的名称为空。此时进入到业务流程进行任务提交的时候会报如下图的错误:    报”当前节点依赖的父节点输出名:XXX 不存在,不能提交本节点,请确保拥有该输出名的父节点:已被提交!“错误,这种情况暂时不知道原因,解决办法是进入业务流程页面,手工将上游依赖与本任务进行关联,具体操作如下图: 

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

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

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

3.3 DataWorks任务发布

任务发布会比较简单,需要注意的事项也不多。

1、如何进行任务发布呢?
   如下图,点击业务流程 -> 点击提交 -> 选择你要提交节点 -> 填写你的变更描述(可以随便填写,最好以提交的实际情况) -> 忽略输入输出不一致的告警
   在上文中关于代码解析功能时提到,有一部分自动解析的表名称为空,此时需要我们在业务流程图页面中进行手工拖动,建立关系;而在这种情况下,就必须勾选忽略输入输出不一致的告警的选项,否则系统默认你的输出与解析的输入不一致,而无法提交。

2、如何进入任务发布选项卡呢?
   在数据开发页面,有一个任务发布选项卡,直接点击即可进入任务发布选项卡,如图:
  如下图,即可以勾选你需要发布的任务进入到生产环境,点击下方的红色框,即可。

3.4 DataWorks运维

   其实跟数据发布一样,DataWorks运维也相对容易,不过还是有几个关注点需要注意下,首先来看一下如何进入运维页面以及运维页面长什么样子。

如何进入运维页面?   点击数据开发页面的运维中心,即可进入运维中心页面。     进入运维中心,我们会看到页面主要分为两部分,一部分是运维概览,一部分是数据集成,如下图:

   对于运维概览中,主要的关注是是否有报错,比如在重点关注页面下,我们可以看到某一天的失败实例、运行慢实例、等异常节点情况;   对于运行状态分布以及任务完成情况,我们可以看到我们目前任务完成状态的分布情况和任务完成的相对趋势情况,观察是否任务执行有异常。
在调度资源分配这个项目下,其实对于资源使用率是我们需要关注的指标,如果指标过高,我们应该考虑调整我们的调度时间,在不影响业务的情况下,进行削峰填谷,保证任务执行的时效。

   在数据集成页面,如下图,具体的关注点在失败任务上,我们需要通过日志找到原因,来进行补数。

   在运维中心的右侧是我们运维中心的所有功能项,其中比较有价值的是周期任务运维,如下图:

周期任务
   周期任务中是所有的调度任务,即已经自然执行的调度和上线但是未执行的调度
周期实例
   周期实例是所有的已到调度时间执行的调度任务

关于补数据
   补数据其实可以理解成:未到调度任务定时时间而手工执行的任务。

4 DataWorks 重点难点(敲黑板)

4.1 调度参数

参数类型类型定义参数名称名称定义内置参数在代码中直接获取业务日期或定时时间$bizdate业务日期,格式为yyyymmdd。该参数的应用较为广泛,日常调度中默认任务预期运行时间的前一天为业务日期$cyctime任务的定时时间,格式为yyyymmddhh24miss$gmtdate当前日期,格式为yyyymmdd。该参数默认取当天日期,执行补数据操作时输入的日期为业务日期+1$bizmonth业务月份,格式为yyyymm。如果业务日期的月份与当前月份一致,则
业务日期月份。如果业务日期的月份与当前月份不一致,则
bizmonth=业务日期月份。$jobid任务所属的业务流程ID$nodeid节点ID$taskid节点产生的实例ID自定义参数支持您在代码中根据业务需求自定义变量名称,再通过调度配置 > 参数赋值区域,统一为代码中的变量赋值自定义的调度参数格式,从而动态获取不同格式的时间参数${...}基于系统内置参数$bizdate,通过yyyy、yy、mm和dd自定义组合而生成的时间参数$[...]基于系统内置参数$cyctime,通过yyyy、yy、mm、dd、hh24、mi和ss自定义组合而生成的时间参数常量支持在赋值区域为变量赋值常量。例如,"abc"、1234
自定义参数${...},具体示例:

前/后N年${yyyy±N}

前/后N月${yyyymm±N}

前/后N周${yyyymmdd±7*N}

前/后N天${yyyy±N}

年月日加/减N天${yyyy±N}

加/减N年(yyyy格式)${yyyy±N}

加/减N年(yy格式)${yy±N}

业务月第一天${yyyymm}01

业务月上月第一天${yyyymm-1}01

其中:

  • yyyy:表示4位的年份,取值为$bizdate的年份。
  • yy:表示2位的年份,取值为$bizdate的年份。
  • mm:表示月份,取值为$bizdate的月份。
  • dd:表示天,取值为$bizdate的天。

自定义参数$[...],具体示例:

前/后N年$[add_months(yyyymmdd±12*N)]

前/后N月$[add_months(yyyymm±N]

前/后N周$[yyyymmdd±7*N]

前/后N天$[yyyymmdd±N]

前/后N小时$[自定义时间格式±N/24]

前/后N分钟$[自定义时间格式±N/24/60]

其中:

  • yyyy:表示4位的年份,取值为$cyctime的年份。
  • yy:表示2位的年份,取值为$cyctime的年份。
  • mm:表示月份,取值为$cyctime的月份。
  • dd:表示天,取值为$cyctime的天。
  • hh24:表示小时(12进制使用hh),取值为$cyctime的小时。
  • ss:表示秒,取值为$cyctime的秒。
  • mi:表示分钟,取值为$cyctime的分钟。

具体细节请参见阿里云官方文档 调度配置

4.2 MaxCompute客户端-odpscmd

   该客户端的主要功能是在于弥补网页端的不足之处,因为安全性等因素,网页端是限制上传(超过30MB的文件)和下载(超过1W条记录)的,因此通过该客户端来进行下载和上传大量数据的功能。

4.2.1 odpscmd客户端下载

   下载需要在github上下载,有的时候可能会登录不上或者下载很慢的情况,点击github下载地址 ,或者使用本地已下载版本,点击odps客户端

4.2.2 odpscmd安装包

   解压下载的安装包文件,得到bin、conf、lib和plugins文件夹。

4.2.3 odpscmd安装包

   进入conf文件夹,配置odps_config.ini文件。odps_config.ini文件内容如下:

project_name=
access_id=
access_key=
end_point=
log_view_host=
https_check=
# confirm threshold for query input size(unit: GB)
data_size_confirm=
# this url is for odpscmd update
update_url=
# download sql results by instance tunnel
use_instance_tunnel=
# the max records when download sql results by instance tunnel
instance_tunnel_max_record=
# IMPORTANT:
#   If leaving tunnel_endpoint untouched, console will try to automatically get one from odps service, which might charge networking fees in some cases.
#   Please refer to Endpoint
# tunnel_endpoint=

# use set.<key>=
# e.g. set.odps.sql.select.output.format=

odps_config.ini文件中使用井号(#)作为注释。参数详细信息如下。
参数是否必填描述示例project_name是访问的目标MaxCompute项目名称。如果您创建了标准模式的工作空间,在配置project_name时,请注意区分生产环境与开发环境(_dev)的项目名称,请参见简单模式和标准模式的区别。您可以登录MaxCompute控制台,在项目管理页签获取MaxCompute项目名称。doc_test_devaccess_id是阿里云账号或RAM用户的AccessKey ID。您可以进入AccessKey管理页面获取AccessKey ID。无access_key是AccessKey ID对应的AccessKey Secret。您可以进入AccessKey管理页面获取AccessKey Secret。无end_point是MaxCompute服务的连接地址。您需要根据创建MaxCompute项目时选择的地域以及网络连接方式配置Endpoint。各地域及网络对应的Endpoint值,请参见Endpoint。http://service.cn-hangzhou.maxcompute.aliyun.com/apilog_view_host否Logview地址。您可以通过该地址查看作业的详细运行信息,并为报错处理提供依据。固定取值为:http://logview.odps.aliyun.com。http://logview.odps.aliyun.comhttps_check否是否开启HTTPS访问机制,对访问MaxCompute项目的请求进行加密。取值范围如下:True:采用HTTPS机制。False:采用HTTP机制。默认值为False。Truedata_size_confirm否输入数据量的最大值,单位为GB。取值范围无限制。推荐设置为100 GB。100update_url否预留参数,暂无需关注无use_instance_tunnel否是否使用InstanceTunnel下载SQL执行结果。取值范围如下:True:使用InstanceTunnel下载SQL执行结果。False:不使用InstanceTunnel下载SQL执行结果。默认值为False。Trueinstance_tunnel_max_record否客户端返回的SQL执行结果的最大记录数。如果use_instance_tunnel值为True,需要配置该参数。最大值为10000。10000tunnel_endpoint否Tunnel服务的外网访问链接。如果您未配置Tunnel Endpoint,Tunnel会自动路由到MaxCompute服务所在网络对应的Tunnel Endpoint。如果您配置了Tunnel Endpoint,则以配置为准,不进行自动路由。各地域及网络对应的Tunnel Endpoint值,请参见Endpoint。http://dt.cn-hangzhou.maxcompute.aliyun.comset.<key>否设置MaxCompute项目的属性。et.odps.sql.decimal.odps2=true
4.2.4 运行odpscmd客户端

   在odps安装目录下,如下图:

   第一种运行方式:双击运行.bat文件即可

建议:将此bat文件发送到桌面,这样以后直接运行桌面的快捷键即可。

   第二种运行方式:通过 Win + R,调出CMD客户端,使用管理员身份运行(这样就不需要切换路径才能运行命令),切换路径到odps安装目录的bin目录下,执行,即可进入到指定的数仓project目录下。

建议:通过此方式进行执行脚本。

4.2.5 odpscmd 最佳实践

   下面主要介绍两种脚本,大家在使用的时候直接根据自己的目的性进行修改即可。
上传数据(Upload)

# 针对无分区表的上传情况:
tunnel upload D:\myfiles\temp\mytest.csv yht_dw_dev.t_mytable -ow true -charset gbk
# -ow 表示覆盖写入
# -charset 表示编码使用gbk方式,中文不会乱码

# 针对无分区表的上传情况:
tunnel upload D:\myfiles\temp\mytest.csv yht_dw_dev.t_mytable\pt="2022-07-06" -ow true -charset gbk

下载数据(Download)

# 对于无分区的表的数据的下载
tunnel download yht_dw_dev.t_billing_info -cf=true D:\myfiles\temp\hangzhou_billing_info.csv
# -cf 表示下载的文件格式为csv,如果不指定,默认为txt格式

# 对于有分区的表的数据的下载
# -- 将test_project.test_table表(二级分区表)中的数据下载到test_table.txt文件中。
tunnel download  test_project.test_table/p1="b1",p2="b2"  test_table.txt;

具体细节请参见阿里云官方文档 MaxCompute客户端安装(odpscmd)
具体细节请参见阿里云官方文档 Tunnel命令上传下载数据(odpscmd)

4.3 DataWorks调度配置解析

4.3.1 调度基本介绍

调度规则

首先满足依赖关系:即上游节点必须完成,才能调度下游节点;其次,判断定时时间是否已经到了,如果到了,立即执行;如果没有到,等待时间。

依赖关系

依赖关系是描述两个或多个节点之间的语义连接关系,其中上游节点的状态将影响其他下游节点的运行状态,反之,则不成立。

依赖关系细节

当任务对之前的周期有依赖的时候,可以勾选依赖上一周期,然后根据自己的要求选择具体的依赖项。

跨周期和跨版本,版本可以理解为一个业务日期,如果今天的任务依赖昨天任务即跨版本,今天的多个周期之间互相依赖,即跨周期。需要注意的是跨周期依赖不能指定具体哪个周期,只能依赖上一个周期!

本节点:即为自依赖,等待上一周期运行成功后才可执行

一级子节点:依赖第一层子任务的上一个周期

其他节点:可以选择本project或者其他project的节点作为依赖,即等待自定义节点上一周期运行成功后,才可执行。

4.3.2 调度依赖关系

天-天任务依赖

  • 天任务相互依赖,天定时任务相互依赖,上游未完成时下游即使到达定时时间,也不运行。

天-天任务依赖——上游天任务跨周期依赖

  • 上游任务自依赖,即存在跨周期依赖,上游前一天的周期任务失败,今天的任务A不会运行,今天下游任务B也会被堵塞。

天-天任务依赖——上游天任务依赖上一周期一层子节点

  • 天任务相互依赖,上游任务依赖上一周期的一层子节点,上游昨天的任务未成功运行会堵塞昨天下游和今天的上游和下游任务的执行。

小时调度自依赖

  • 小时任务依赖上一周期,只要一个周期未成功,后续所有周期都会阻塞,并且可以有效避免一个周期任务运行慢了导致后续周期定时时间到了,任务并发运行。

小时依赖天调度

小时依赖天调度

  • 小时任务依赖天任务,待天任务完成后,开始调度小时任务,定时时间已到的周期会并发开始执行

天依赖小时调度

天依赖小时调度

  • 天任务依赖小时任务,需要等小时任务的所有周期完成后才能调度天任务,即使天任务定时时间已经到了,但是小时任务还有周期未完成就不会被调度。

小时任务依赖小时任务

小时任务依赖小时任务

  • 上游跟下游都是小时任务,且周期数相同,则每个运行周期一一对应,下游若晚于上游定时,定时时间到并不会调度,需要等上游对应周期运行完成才会开始调度。

小时任务依赖小时任务周期数不一样

小时依赖小时-周期不一致

  • 小时任务依赖小时任务,且下游周期数大于上游周期数,会依据就近原则挂依赖(时间小于等于自己且不重复依赖)

小时依赖天任务——下游不并发

小时依赖天-小时任务不并发

  • 如果上游任务完成时,下游有多个周期定时时间已到,会导致这些周期被并发调度起来。如果不希望下游并发调度起来,则需要将小时调度改成自依赖——本节点->依赖上一周期。但是这样会出现一个问题,就是自依赖会依赖跨版本,如果昨天最后一个周期未完成,会导致今天的任务无法调度。

**天依赖小时任务——天任务到定时时间运行

天依赖小时任务

  • 任务依赖小时任务,需要等小时任务所有周期都完成才能开始调度。如果需要天任务尽量按照定时时间开始调度,则可以配置上游小时任务自依赖,待上游小时任务定时时间最近(且小于)的周期完成后,下游天任务就会被调度。

小时任务依赖天任务

小时依赖天任务-天自依赖

  • 小时任务依赖天任务且天任务自依赖,则小时任务的所有周期也会依赖上一周期的天任务。

天依赖小时任务-小时依赖上一周期一级子节点

  • 天依赖小时任务,小时任务依赖上一周期一级节点:上游的小时任务跨周期依赖下游的定时天任务,即上游小时任务会在每一周期都会依赖上一版本的下游任务。

小时任务依赖小时任务——下游节点依赖自定义父节点

小时依赖小时任务-下游节点依赖自定义节点

  • 下游节点设置依赖自定义节点(父节点ID) 此case比较特别,即可看出其实图中存在两个概念,既有跨周期(依赖上游小时任务的上一周期),又存在跨版本(依赖上游小时任务的上一版本的所有周期)

本文转载自: https://blog.csdn.net/ytp552200ytp/article/details/129712104
版权归原作者 000X000 所有, 如有侵权,请联系我们删除。

“2023-DataWorks数仓开发手册收藏版”的评论:

还没有评论