每个EXECL保留一个SHEET页。
注:目前解析程序只解析第一个sheet页。如果与其他sheet页关联可能将导致数据不准确风险。
数据文件名称为自定义数据表文件名称,要有实在意义,取名简单,遵守企业命名规范,hdfs
文件命名和ftp缓存服务器英文件命名保持一致。
规范: 数据文件命名构成为: 8位日期数字_原表英文名称-批次号(3位数值).后缀名
注明:
例如
ftp文件名:
8位日期数字_原表英文名称-批次号.后缀名
20190831-packing_list-001.xlsx
Hdfs文件名:
20190831-packing_list-001.csv
存储介质 |
远程FTP本地服务器文件目录 |
状态 |
人力数据 |
/data/recv_t_dev/业务系统简称/时间/数据文件名 |
日全量数据 |
源数接入类型: i:增量(Increment)、 t:全量(Total)、 p:区间(Period)
命名规范: /data/recv_{ 数据类型}_{环境类型}/业务系统简称/数据时间/表名称/数据文件
存储介质 |
目录(生产:pro 开发:dev) |
状态 |
sftp本地目录 |
/data/recv_*_环境/业务系统简称/时间/文件名 |
临时文件存储 |
HDFS集群目录 |
/data/recv_t_pro/业务系统简称/时间/库表名/文件名 |
清洗后数据目录(全),生产 |
HDFS集群目录 | /data/ftpdata_t_dev/业务系统简称/时间/库表名/文件名 | 源数据接入(全),生产 |
ODS仓库目录 |
/user/hive/warehouse/库名/表名 |
业务库表 |
业务系统简称(和hive业务库名称对应):环境 _业务系统英文简称(3位字母位)
接入类型 |
HDFS目录划分(生产:pro 开发:dev) |
数据层级 |
数据周期 |
全量数据接入 |
/data/recv_t_dev/data_hrg/20190829/表名/数据文件 |
tmp层 |
人力按日接入 |
注:1. 上述依据生产环境HDFS目录和FTP服务器目录统一相同为例!
特殊说明:
实例规范解析:
数据接入SFTP文件实例(财务按月刷入整月数据):
生产环境数据源目录:/data/recv_*_pro/data_hrg/20190829/数据
数据接入HDFS实例(财务按月刷入整月数据):
生产环境数据源目录:/data/recv_*_pro/data_hrg/20190829/表名/数据
实例1:sftp目录(财务按月刷入整月数据):
sftp目录: /data/recv_t_dev/data_hrg/201908/20190831-packing_list-001. xlsx
hdfs源数据目录: /data/ftpdata_t_dev/data_hrg/201908/packing_list /20190831-packing_list-001.csv
hdfs清洗后目录: /data/recv_t_dev/data_hrg/201908/packing_list /20190831-packing_list-001.csv
在金博士平台(数据中台系统)建TMP层数据库和层数据表,都采用不同数据库数据。
数据库命名规则由两部分组成,命名规范:环境_库状态_业务系统英文简称
环境分类:pro、dev
例如(测试环境外部库):整理库如下(开发库为例):
|
数据表接入库级命名-登记册 |
库名(生产:pro 开发:dev) |
|
序列号 |
业务系统描述 |
业务代码简称 |
HIVE库名 |
1 |
测试 |
test |
dev_test |
2 |
集团人力数据 |
HRG(SF) |
dev_hrg |
表层级前缀命名规则
环境 |
模型层 |
库类型 |
数据加工分类入库 |
开发环境:dev
生产环境:pro |
贴源模型层 |
外部数据源(tmp层) |
外部表:源数据接入缓存层(表名规范: tmp_* ) |
贴源层数据库(ODS层) |
内部表:增量更新、全量刷新、初始化库、源数据入库 (表名规范: ods_* ) |
||
公共模型层 |
明细层数据库(DWD 层) |
明细整合表、明细宽表 (表名规范: dwd_* ) |
|
轻度汇总层数据库(DWS 层) |
轻度汇总数据、维度数据表、二次量值统计数据 (表名规范: dws_* ) |
||
标签模型层 |
标签层数据库(TDM 层) |
前台应用标签数据表 (表名规范: tdm_* ) |
|
应用模型层 |
应用层数据库(ADM 层) |
应用集市、场景集市、对外发布的数据表 (表名规范: adm_* ) |
|
营销模型层 |
数据营销层库(RDM 层) |
数据应用多维幅度计算层监控指标 (表名规范: rdm_* ) |
例如:{ 数据层/数据层级}_{业务系统}_{业务库}_源系统表_{表状态}{加工频率}{加工类型}
表后缀命名规则
数据表状态:
u:更新表update、 s:流水表stream
数据加工频率:
h:小时(hour)、d:天(day)、w:周(week)、 m:月(momth)、q:季度(quarter)、 y:年(year)
数据加工类型:
i:增量(Increment)、 t:全量(Total)、 p:区间(Period)
后缀命名规范: _{数据表状态}{数据加工频率}{数据加工类型}
数据表设计:
表后缀名 |
描述 |
_*dt |
dt 后缀,日刷新、 每个分区是一份全量 |
_*di |
di 后缀,日刷新、 每个分区是一份增量 |
_*hi |
hi 后缀,小时刷新、每个分区是一份增量 |
_*wi |
wi 后缀,周刷新、 每个分区是一份增量 |
_*mi |
mi 后缀,月刷新、 每个分区是一份增量 |
_*qi |
qi 后缀,季度刷新、 每个分区是一份增量 |
_*yi |
yi 后缀,年度刷新、 每个分区是一份增量 |
说明:
以上未加入数据表状态(以上”*”代表: 数据表状态: u:更新表update、 s:流水表stream)。
一共能组合成种类数据表: 2x6*5*4*3*2x3*2=8640
源系统表重组命名规则 :
源系统名: 指源系统英文简称代码
源系统库名: 指源系统表所在的库英文简称
源系统表名: 指源系统英文表名
数据层_{业务系统}_{业务库}_源系统表_{表状态}{加工频率}{加工类型}
ODS_{业务系统}_{业务库}_源系统表_{表状态}{加工频率}{加工类型}
如:
ods_ {业务系统}_{业务库}_{业务表名缩写/自定义表命名标签缩写}_{u/s}{h/d/w/m/q/y}{i/t/p}
更新表日增量命名取法: ods_eam_maximo_user_udi
流水表日全量命名取法: ods_eam_maximo_user_sdt
如:
ods层表名:
ods_agt_loan_app_sdi (贷款申请信息表,贴源层、每个分区是一份流水表每日刷增量)
ods_agt_loan_app_udt (贷款申请信息表,贴源层、 每个分区是一份更新表每日刷全量)
CDW(DWD/DWS)/AMD层表重组命名规则 :
业务系统: 指源系统业务线英文简称代码
再生业务表:是经过多表融合后再生的新业务表名,要有实在含义
AMD/DWS/DWD_{业务系统}_{再生业务表}_{表状态}{加工频率}{加工类型}
如:
DWD_SF_ PERSONINFO_SDT
SF: 集团人力数据库是SAP云端的数据中心,集中在上海,统称DC15
HRG: 人力资源
PERSONINFO:员工基础明细数据表(员工表+合同表+教育表)
1.1 基本原则
命名以表述实体的真实含义、方便辨认为目的,数据库表名首字母大写,能用一个单词就用一个,需要多个的则只用关键单词,同一字段名在数据库中应保持含义相同,标识这个表是什么就行,每个单词都采用单数形式,每个单词首字母要大写(除此第一个单词),命名规则:表名+单词或单词缩写,如 firstName,startDate,endDate。
注意点:禁止使用中文或拼音缩写进行命名,表名、字段名、视图名长度控制在5个单词之内,总长度小于30个字符。
1.2 如遇单词太长,可采用缩写,选择顺序如下:
a)首选在命名规范"常用缩写"中列示的缩写。
b)行业约定被广泛接受的缩写。
c)元音字母剔除法生成的缩写,缩写后长度应控制在5个字符以内,大写表示,但需在项目词汇表列示。
d)提取表名前4个字母,使用拼接后面有实在意义的字段名,如 userName、userPwd等。
1.3 与字段有关,默认的一些特殊字段, 非常多表中:
比方一些业务处理表中,除了加入生成的自己主动编号ID(一般作为主键用),该记录创建的时间CreateDate(创建时间)与updateDate(更新时间),该记录的创建人CreatBy (注意这里。没UI_ID(用户信息表User_Info的主键UI_ID),由于还有改动人),最后改动人LastEditBy。最后改动时间LastEditDate。(这些能够直接使用中文字符,而不使用编码,提高查询的效率)
同一时候有的时候须要注意,删除的时候并不真的删除该记录,而是加入一个标识位,比方XX_DeleteStaus删除状态。1是有效的,0则是无效的。
列如:
-- 1、ODS层内部表
DROP TABLE IF EXISTS DEV_HRG.ODS_SAPDC15_HRG_JOBTRANSFERS_UDT;
CREATE TABLE DEV_HRG.ODS_SAPDC15_HRG_JOBTRANSFERS_UDT (
serial string COMMENT '序号'
,empId string COMMENT '员工编号'
,firstName string COMMENT '姓名'
,startDate string COMMENT '生效日期'
,customString20Old string COMMENT '原业务单元'
) COMMENT '员工岗位异动报表' PARTITIONED BY (dt STRING)
ROW FORMAT DELIMITED NULL DEFINED AS ''
STORED AS ORCFILE;
1.4 主建定义
每一个表都应该有一个主键,这个主键最好是数字。并且是递增的,有非常多表的主键用32位字符编码,这样做的目的很多其它的是从安全考虑的。由于字符多时索引时效率低,而使用自增列也不是非常少,比方加入主表和从表操作时。主表的主键是从表的外键,这个时候还有取返回值,然后再加入,不能够同一时候加入。
主键能够用自己定义的规则,大部分用MAX(ID)的做法,也能够自己定义一个序列表,有点像序列。或者用时间的年月日秒详细到毫秒。关于列的命名,建议对数据类型也做一些规范,由于非常easy确定。仅仅有四种主要类型:数字,字符,时间,逻辑值,这些在类型上和长度上都能够定好规范,统一起来。
1.5 冲突字段
字段名与 hive 保留字冲突时处理规则:加一个”_col”后缀,即:源字段名_col。
分区英文名 |
含义描述 |
分区描述 |
dt |
当天日期,格式为:20191010 |
一级分区, 当日维度 |
dh |
当日小时,格式为:2019101001(24小时制) |
二级分区, 小时维度 |
dm |
当月时间,格式为:201910 |
二级分区, 月度维度 |
dy |
当年日期,格式为:2019 |
二级分区, 年度维度 |
dw |
当年自然周, 格式为:52 |
二级分区,自然周维度 |
dq |
当年自然季度(共4季度), 格式为:1 |
二级分区,自然季度维度 |
$自定义分区 |
定制化分区,格式取对应场景有意义简称 |
二级分区,定制化场景维度 |
变量表示 |
实际值 |
业务含义 |
$dh |
当日小时时间,格式为:2199123001 |
分区:小时维度 |
$dt |
当天日期,格式为:20151231 |
分区:一级分区,天维度 |
$dm |
当日小时时间,格式为:219912 |
分区:月维度 |
$dy |
当日小时时间,格式为:2199 |
分区:年维度 |
$TXDATE |
当天日期,格式为:2099-12-31 |
业务日期格式 |
$TXDATE |
当天日期,格式为:2099-12-31 12:00:00 |
业务时间格式 |
$START_DT |
当天日期,格式为:21991230 |
开始时间 |
$END_DT |
当天日期,格式为:21991231 |
结束时间 |
$cycTime |
日期型, yyyyMMddHHmmss |
分区参数:作业的定时运行时间 |
$bizDate |
日期型, yyyyMMdd |
分区参数:业务日期,即作业调度日期的前一天 |
$bizMonth |
日期型, yyyyMM |
分区参数:作业调度日期的前一月 |
Oracle与hive之间转换:
Oracle字段类型 |
Hive改造 字段类型 |
改造规则 |
LONG |
STRING |
LONG类型是Oracle中存储可变长度字符串,最大长度限制是2GB,可使用Hive库STRING存储,STRING最大长度限制4GB。 |
VARCHAR |
VARCHAR |
数据取值范围和Oracle系统保持一致,可满足长度限制。 |
STRING |
STRING |
数据取值范围和Oracle系统保持一致,可满足长度限制。 |
NVARCHAR2 |
VARCHAR |
NVARCHAR2是包含UNICODE格式数据的变长字符串,可使用HIVE库VARCHAR替代。 |
FLOAT |
FLOAT |
数据取值范围和Oracle系统保持一致 |
CHAR |
CHAR |
数据取值范围和Oracle系统保持一致,可满足长度限制。 |
CLOB |
STRING |
CLOB类型是Oracle中用于存储非结构化二进制数据,可使用Hive库STRING存储。 |
INTEGER |
INT |
数据取值范围和Oracle系统保持一致 |
DECIMAL(p,s) |
DECIMAL(p,s) |
数据取值范围和Oracle系统保持一致 |
alpha |
CHAR/INT |
目前oracle库中数据情况: |
NCHAR |
CHAR |
无需转换,Hive库VCHAR可以存储中英文字节 |
RAW |
STRING |
RAW用于存储二进制或字符类型数据,变长二进制数据,这种类型最多可以存储2,000字节的信息,可以使用STRING替代 |
VARCHAR2 |
VARCHAR |
VARCHAR2基本等同于VARCHAR,不同在于VARCHAR2使用null代替VARCHAR的空字符串 |
BLOB |
STRING |
BLOB用于存储二进制数据,可使用Hive库STRING存储。目前库中所有表及字段都是空和空格。 |
SMALLINT |
smallint |
int是整型的,smallint是短整型 |
BIT取值为0或1 |
INT/CHAR |
|
TINYINT |
INT/smallint |
存储从 0 到 255 的整型数据。存储大小为 1 字节 |
LONG RAW |
STRING |
LONG RAW类型是Oracle中用来存储二进制数据的,最大长度限制是2GB,可使用Hive库STRING存储。 |
NUMBER |
DECIMAL(24,2) |
hive暂将number此两种类型数据置为decimal。 |
NUMBER(x) |
||
NUMBER(p,s) |
DECIMAL(p,s) |
源系统字段类型为可变精度的NUMBER(p,s)类型,需要根据实际数据具体分析,hive默认设置为decimal(p,s) |
TIMESTAMP |
Varchar(32) |
目前由于生产上线前看不到数据,且源系统时间类型的数据格式较为复杂,暂将时间类型数据置为Varchar(32),以保证使用。 |
DATE(20161231) |
||
DATE(2016-12-31 12:12:12) |
||
DATE(2016-12-31 12:12:12.0) |
Mysql与hive之间转换:
Mysql 数据类型 |
Hive 数据类型 |
TINYINT/SMALLINT/ MEDIUMINT/ INTEGER / BIGINT |
Bigint |
FLOAT / DOUBLE / DECIMAL |
Double |
LONGTEXT /TEXT/VARCHAR/CHAR |
String |
DATE/ DATETIME |
String(格式:YYYY-MM-DD HH24:MI:SS) |
Hbase与hive之间转换:
Hbase 数据类型 |
Hive 数据类型 |
TINYINT/SMALLINT/ MEDIUMINT/ INTEGER / BIGINT |
Bigint |
FLOAT / DOUBLE / DECIMAL |
Double |
LONGTEXT /TEXT/VARCHAR/CHAR/ VARBINARY |
String |
DATE/ DATETIME |
String(格式:YYYY-MM-DD HH24:MI:SS) |
|
|
CDM/ADM 数据公共层如果是引用 ODS 层数据,默认使用 ODS 层字段数据类型;
衍生加工数据字段按以下标准执行:
Ø 模型、金额类及其它小数点数据:double
Ø 字符类数据:string
Ø ID 类和整形数值、数值指标:bigint
Ø 时间类型数据:string(如果有特殊的格式强制要求,可以统一使用 Datetime )
Ø 状态、其他字段,统一用 string
Sql脚本标题头模板:
-- #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*# |
其他程序脚本描述文件头模板:
#-*-coding: utf-8 -*- """ # ============================================================ # 版权信息: 集团数据与流程管理部@版权所有(c) 2019 # 作业名称: 集团人才发展 SF # 责 任 人: gjggw123 # 源 表: # 目 标 表: # 功能描述: 1. # 2. # 3. # 备 注: # 版 本 号: v 1.0 # 修订日期: 2019-10-10 # 更 改 人: # 更改说明: 1. 2. 3. # =============================================================""" |
工作流节点类型及脚本命名
节点类型 |
命名规范 |
示例 |
备注 |
虚拟节点 |
vt_{虚拟节点含义} |
vt_ap_start |
集群任务根节点 |
同步节点导入任务 |
imp_{表名}_[{源库标示}] |
imp_ods_r360_cell_basic_delta |
如果存在多个源库表名重复的情况,可以增加源库标示后缀 |
同步节点导出任务 |
exp_{表名}_[{目标库标示}] |
exp_dws_mbr_user_pr file_dd |
如果存在多个目标库,可以增加目标库标示后缀 |
数据处理节点 |
{输出表名} |
dwd_mbr_tbl_user_dd |
1. 单个任务只能输出一个目标表,禁止单个任务往多个表写入数据(临时表除外) 2. 多个任务插入同一张表的不同分区,后面建一个虚拟目标表任务 |
Shell 节点 |
sh_{脚本命名} |
sh_upt_comm_log |
|
MR 节点 |
mr_{脚本命名} |
mr_cbu_ilog_parse |
|
跨调度依赖或检查 |
chk_{源表名} |
chk_dim_tbl_user |
检查该任务是否完成 |
清洗任务 |
cln_{源表名} |
cln_ods_loan_tbl_user_delta |
过滤脏数据 |
合并任务 |
mrg_{ODPS 的表名} |
mrg_ods_loan_tbl_user |
|
极限存储 |
exst_{ODPS 的表名} |
exst_dwd_mbr_tbl_user_dd |
|
说明:
a)、项目中所有的资源文件建议放在 RESOURCE 目录中,资源名称需有后缀表示
资源类型,如.java、.py、.sh 等 。
b)、DDL 资源全部以 *.sql 结尾标识 。
c)、脚本内临时表命名规范:tmp_{产出表表名}_{n} 。
d)、备份表:统一后缀 _bakyyyymmdd,只是用作临时备份,如果数据需要永久备份保留,表名加后缀 _his , 并将生命周期设置为 999999 。
e)、下线表:生产任务下线后的表重命名统一前缀 delete_,30天后自动删除。
f)、回流表:数仓离线加工的表,由于工具不支持,需要建一个以 _exp后缀的回流表。
g)、垃圾表: 统一后缀 _trashyyyymmdd, 默认 YYYYMMDD 的一个月以后自动删除。
h)、中间表:M_{数仓表名},为了任务优化拆分并行计算方便,引入中间表,但只能被一个计算任务所依赖,不开放给分析师和其他任务使用;这是个临时方案,未来需要工具层面或调度层面解决单个任务内的多段SQL 并行执行。
j)、外部数据引入:引入的数据不论落地还是不落地,产出表或视图都应该遵循公司模型设计规范,原则上我们尽量使用集团中间层数据对于外部数据,命名不符合模型设计规范的,需要从 ODS 层开始建设。