我的原文地址:
简短介绍
大家好,了解了Hue、hive、sqoop、kylin、shell等等一系列工具知识之后,是不是对于大数据的开发有了一定的认知了呢?那么今天分享下常规数仓开发规范。都是比较通用的,无论在哪个公司都会有类似的一套规范。
01-数仓开发常规-规范
-
1、规范目的
一般数仓开发规范,都是为了能够很好的规范集群中数据库的内容而制定的。在数仓中往往存在大量的表和字段。为了使数据开发者通过表名一眼就能识别出表是做什么用的,并且里面存放的是什么类型的数据,从而制定的规范。(^_^ 是不是很神奇呢?你也可以的)
-
2、数据分层设计规范
2.1、大数据中数据分层,通常是集群中创建单独的数据库来实现的。我们数仓通常会分为四层:原始数据层、清洗层、模型层、应用层。当然还有一些带有开发测试属性的层,例如:开发层、公共层、临时层。
| 数据库命名说明(仅供参考和学习) | |||
| 层次描述 |
层次简写 |
数据库名 |
举例说明 |
| 基础数据层 |
STG |
STG |
统一选用parquet文件格式做存储 |
| 清洗整合层 |
ODS |
ODS |
统一选用parquet文件格式做存储 对数据进行整合、码表进行规范、空值进行处理 |
| 数据仓库层 |
DW |
DW |
统一选用parquet文件格式做存储 最好分区(默认15天) |
| 数据应用层 |
DM |
DM |
统一选用parquet文件格式做存储 最好分区(默认15天) |
| 数据公共层 |
PUB |
PUB |
统一选用parquet文件格式做存储 公共数据库(用存储维度相关信息便于权限管理) |
| 清洗临时层 |
TMP |
TMP |
统一选用parquet文件格式做存储 调度中间临时库,用做作业临时表存储 |
| 开发测试层 |
DEV |
DEV |
统一选用parquet文件格式做存储 开发测试临时库 |
| 注意: STG 创建表默认 业务类型_来源库名_表名_(增量:inc) 字段默认为string 类型 ODS 创建表默认ODS_模型表名_(增量:inc ) 字段严格按照模型字段类型 DW 创建表默认DW_主题_业务内容 DM 创建表默认DM_主题_业务内容 TMP 创建表默认目标表_(编号00-99) RPT 创建表默认RPT_部门简称(公有-pub)_业务内容_(日期表-ds/ws/ms/qs/ys) | |||
2.2、数据流向
通常STG原始层保持与业务源一样的结构和数据,之后通过sql将数据做清洗整合存入ODS层,再将ODS层数据相互关联提炼成模型放入DW层,最终报表和数据支撑通过查询DW数据可落入DM应用层做结果展示。简单理解数据流向为:stg-> ods -> dw -> dm
-
3、数据对象设计规范
3.1、表命名规范
l STG层(原始层 分全量分区表及全量不分区表)
Ø全量不分区表{业务简称}_{库名简称}_{表名}。
Ø全量分区表 {业务简称}_{库名简称}_{表名}_pt。
l ODS层(中间表层 每个分区都是全量数据)
Ø表名(ods)_业务整合表_(inc增量)_(分区表ds)。
l PUB(数据公共层)
Ø表名(维度表dim)_业务内容表_(历史表His)。
l DW层(模型层 每个分区都是全量数据)
Ø表名按(事实_fact、维度_dim)_主题_业务数据_统计内容_(增量 inc)(分区表ds)。
Ø按天周月份季度年度统计的表后缀 天_ds周_ws 月份_ms 季度_qs 年度_ys
l DM层(应用层)
Ø 表名按_应用(报表rpt 标签系统 lbl)_业务数据_统计内容_(增量 inc)(分区表ds)。
Ø 按天周月份季度年度统计的表后缀 天_ds周_ws 月份_ms 季度_qs 年度_ys
3.2、字段命名规范
l 由大小写字母,下划线,数字组成,以字母开头,不包含中文和特殊字符
l 使用富有意义的英文词汇,参照常用字段关键词说明,过长单词使用缩写
l 统计字段,后缀
金额 _amt
次数 _cnt
人数 _num
l 日期字段,后缀
日期(不带时分秒) _dt
日期(带时分秒) _time
分区日期默认dt
l ods\dw层日期 默认string类型(yyyyMMdd)
l dm层日期 默认日期类型(yyyy-MM-dd)
3.3、字段类型规范
l 字符型使用STRING类型
l 非整型数值型使用DECIMAL类型,使用DECIMAL型时必须指定长度和精度
l 最大值10位及以上的整数使用BIGINT
l 最大值在3-9位的整数使用INT
l 最小粒度在天的日期型使用DATE类型
l 最小粒度在小时及以下的日期型使用TIMESTAMP类型
3.4、敏感字段脱敏规范
数仓中带有如下字段的表都需要进行脱敏处理。敏感字段包含:
l 姓名
l 手机号
l 身份证号
l 银行卡号
l 详细地址
3.5、空值处理规范(在进入清洗整合层时需要标准化)
| 缺省值定义说明(仅供参考和学习) | |
| 字段类型 |
空值替换值 |
| STRING |
‘’ |
| DECIMAL |
0 |
| FLOAT |
0 |
| DOUBLE |
0 |
| INT |
0 |
| BIGINT |
0 |
| DATE |
1900-01-01 |
| TIMESTAMP |
1900-01-01 00:00:00.000 |
| 注意: ★如果缺少定义的字段类型可以添加 | |
3.6、通用字段名称定义
| 字段关键词说明(仅供参考和学习) | ||
| 关键词描述 |
关键词 |
说明 |
| id |
id |
|
| 名称 |
name |
|
| 描述、详情 |
desc |
|
| 会员 |
member |
|
| 产品 |
product |
车、房、保险、信用卡 |
| 订单流水号 |
serialid |
固定组合 |
| 资源 |
resource |
|
| 平台 |
plat |
|
| 设备 |
device |
|
| 会话 |
session |
|
| 用户 |
user |
|
| 城市 |
city |
|
| 省 |
province |
|
| 区域 |
arearegion |
如华南区域、华东区域 |
| 县 |
county |
县 |
| 镇 |
town |
|
| 洲 |
continent |
|
| 国家 |
country |
|
| 国际 |
inter |
|
| 日期 |
createdate |
|
| 时间 |
createtime |
|
| 创建 |
create |
|
| 更新 |
update |
|
| 消费 |
consume |
|
| 出行 |
travel |
|
| 回团 |
return |
|
| 订单 |
order |
|
| 乘客 |
passenger |
|
| 保险 |
insurance |
|
| 支付 |
pay |
|
| 支付方式 |
payment |
|
| 票 |
ticket |
|
| 金额 |
amount |
|
| 价格 |
price |
|
| 营收 |
revenue |
如marketrevenue |
| 时长 |
market |
|
| 总营收 |
totaltakeoff |
固定组合 |
| GMV |
GMV |
|
| 标识 |
flag |
|
| 状态 |
status |
|
| 测试 |
test |
|
| 是否 |
is |
0为否,1为是 |
| 有效 |
valid |
|
| 开始 |
start |
|
| 结束 |
end |
|
| 经度 |
lon |
|
| 纬度 |
lat |
|
| 体系、系统 |
sys |
|
| 注册 |
reg |
|
| 等级 |
level |
|
| 类型 |
type |
|
| 点评 |
comment |
|
| 红包 |
coupon |
|
| 投诉 |
complain |
|
| 邮箱 |
|
|
| 手机号 |
mobile |
|
| 性别 |
sex |
|
| 身份证号 |
identityno |
|
| 出生日期 |
birthday |
|
| 联系人 |
linkman |
|
| 微信 |
weixin |
|
| 页面 |
page |
|
| 事件 |
event |
|
| 过滤 |
filter |
|
| 财务 |
finance |
|
| 发票号、单据号 |
billno |
|
| 文件 |
file |
|
| 注意: ★如果缺少定义的关键词可以添加 | ||
02-小结
通过对数仓建设中,常规数据开发规范的了解。是不是觉得很清晰易懂了呢?在我们实际工作中如果严格遵守开发规范。就算数仓在庞大也是很容易维护。所以各位小伙伴可以多多了解数仓开发规范方面的知识。这些都是很重要的哦^_^。