作业管理
术语解释
抽取作业:指将数据从数据源接入在到数据仓库的作业。
计算作业:指通过脚本逻辑实现对数据进行加工处理的作业。
推送作业:指将源端的数据推送目标系统的作业。
质量作业:指通过配置质量检查规则对数据质量进行监测的作业。
作业负责人:指负责创建作业管理作业的人员
下游作业负责人:指负责创建下游作业管理下游作业的人员
数据平台维护人员:指负责维护平台管控数据的人员
一、作业生命周期管理 重要
A、作业线上管理
B、作业线下管理
C、数据平台对于连续失败15天的作业进行强制下线处理
二、作业脚本开发规范
A、脚本命名
- 脚本名称仅由小写字母,数字及下划线组成,且与该脚本生成的Hive目标表名一致。
- 脚本名称最大长度30位,对于超长内容尽量以JD缩写代替,可参考《京东数科数据仓库高频词根术语表》文档命名。
B、脚本注释
- 保持注释与代码行为完全一致。
- Description(描述):描述脚本的作用,内容清晰易懂。
- Creator(创建人)、Modified By(修改人):请使用京东邮箱,不允许填写中文名及各类简称。Modified By(修改人)、Modified Time (修改时间)及Modified Content (修改内容):新建脚本时留空;如为已线上脚本,则请仔细填写修改人、修改时间、修改内容信息。
C、SQL规范
- 脚本由一个或多个SQL片段组合而成,串行完成处理任务。
- SQL语句不能以注释开始,片段中的半角括号需要成对出现,否则脚本执行时将报错。
- SQL关键字大写,并保持必要的缩进。
- SQL中使用到的表名应显式的描述为“库表”.“表名”方式。
- 脚本中不允许创建或者删除非临时表表,不允许出现truncate或者rename 语法
- 临时表统一存放于tmp库中,命名方式如下所示:临时表:TMP_ODM_ACTV_BT_PLUS_PLANRELATION_S_D_T[X] 脚本名:ODM_ACTV_BT_PLUS_PLANRELATION_S_D.py 其中TMP为临时表前缀,T[X]为数字下标。当临时表使用完毕后,需在脚本的最后一个SQL片段中统一删除。
- 脚本中不允许INSERT临时表和目标表以外的表。
- 段裁剪(只查询业务处理需要的字段)
- 分区裁剪(查询条件限定分区字段,对应的比较值要求是固定条件,不能使用表字段或者执行时取值函数)
- 查询条件尽早过滤(关联条件前置为表过滤条件,空值过滤)
- 关联表时关联条件使用表唯一字段(关联表数据提前去重,避免使用多对多关联;不同类型字段关联时转换成同类型关联,大小表关联时小表前置)
- 关联表时倾斜数据可以使用map join
- 需要多次查询的含数据日期以外查询条件的数据,创建临时表保存数据。
- group by替代distinct
- max(struct())替代rownumber()=1
- muti-insert(一次查询结果插入多个表/分区)
三、如何作业部署规范
规范一:同层级间作业不准互相依
规范二:普通接入作业优先级为80,普通计算作业优先级为149,普通推送作业优先级为150,质量作业优先级170,重点作业优先级小于30
- 注明任务名称
set mapreduce.job.name=jobname_cusname_seq; use xxdb;
- 不允许CREATE/DROP非临时表,不允许TRUNCATE/RENAME
- 不允许INSERT临时表和目标表以外的表
四、常用UDF函数
UDF的全称为user-defined function,用户定义函数,为什么有它的存在呢?有的时候 你要写的查询无法轻松地使用Hive提供的内置函数来表示,通过写UDF,Hive就可以方便地插入用户写的处理代码并在查询中使用它们,相当于在HQL(Hive SQL)中自定义一些函数。
Hive中有三种UDF:(普通)UDF、用户定义聚集函数(user-defined aggregate function,UDAF)、用户定义表生成函数(user-defined table-generating function,UDTF)。
A、UDF操作作用于单个数据行,并且产生一个数据行作为输出。大多数函数都属于这一类(比如数学函数和字符串函数)。
B、UDAF 接受多个输入数据行,并产生一个输出数据行。想COUNT和MAX这样的函数就是聚集函数。
C、UDTF 操作作用于单个数据行,并且产生多个数据行——-一个表作为输出
表格如下:
UDF名称 | UDF介绍 |
---|---|
sysdate | 获取系统日期 |
changedate | 日期函数 |
date_format | 日期格式化 |
idNo_province | 身份证查询所在省份 |
distanceCalculator | 距离计算 |
IPExt | ip地址信息获取 |
idcardnotrans | 15位身份证转18位 |
rep_ascii | 过滤特殊字符 |
五、SQL编写注意事项
sql编写区,多个sql用分号分隔即可 在sql中可以使用大量的日期变量,例如: select * from {table1} where dt='{tx_date}'
变量和别名一样,需要用{}括起来,日期变量的所有日期都是根据当前任务数据日期计算而来,如果当前的数据日期为:2017-10-09,则上述语句程序解析后,实际运行语句为: select * from tmp.tmp_a_payment_1 where dt='2017-10-09'
注意事项
- 字段裁剪(只查询业务处理需要的字段)
- 分区裁剪(查询条件限定分区字段,对应的比较值要求是固定条件,不能使用表字段或者执行时取值函数)
- 查询条件尽早过滤(关联条件前置为表过滤条件,空值过滤)
- 关联表时关联条件使用表唯一字段(关联表数据提前去重,避免使用多对多关联;不同类型字段关联时转换成同类型关联,大小表关联时小表前置)
- 关联表时倾斜数据可以使用map join
- 需要多次查询的含数据日期以外查询条件的数据,创建临时表保存数据
- group by替代distinct
- max(struct())替代rownumber()=1
- muti-insert(一次查询结果插入多个表/分区)
下面展示同样高亮的 代码片
.
1 | // An highlighted block |