type
status
date
slug
summary
tags
category
icon
password
😀
这里写文章的前言: 数仓开发规范
 

📝 ETL规范(Execl文件)

文档规范

execl表头记录所有表的信息,类似mysql的索引
序号
层次类别
表名
中文名称
备注
1
ods
user_list
用户信息
用户信息

单个表记录(单个execl页)

表英文名
dwd_ls_md_item_store_df
设计人
鲍洋
表备注
商品门店级别
备注
每天做快照,根据后期需求,再扩展计算指标
ETL策略
日全量
源表基本信息
表中文名称
表英文名称
别名
数据总量
商品所有基本信息
ods_erp.o_bas_club_item
ci
835943
商品所有基本信息1
ods_erp.o_bas_club_item1
ci1
835943
表关联关系描述
源表别名1
关联类型
源表别名2
备注
ci
inner join
ci1
字段映射描述(组1)
目标表
源表
规则
列名
字段类型
列描述
列名
club_nbr
bigint
门店号
ci.club_nbr
item_nbr
bigint
商品号
ci.item_nbr
item_on_shelf_date
date
上架日期
ci.item_on_shelf_date
item_off_shelf_dt
date
下架日期
ci.item_off_shelf_dt
markdown_status_cd
bigint
ci.markdown_status_cd
item_status_code
string
商品状态
ci.item_status_code
unit_retail_amt
decimal(25,10)
单位零售金额
ci.unit_retail_amt
link_item_nbr
bigint
链接上号号
ci.link_item_nbr
last_change_ts
timestamp
最近变更时间
ci.last_change_ts
last_change_userid
string
最近变更人
ci.last_change_userid
non_mbr_upchrg_ind
string
ci.non_mbr_upchrg_ind
unit_retail_chg_dt
date
ci.unit_retail_chg_dt
last_markdown_ind
string
ci.last_markdown_ind
whpk_sell_amt
decimal(25,10)
ci.whpk_sell_amt
vnpk_cost_amt
decimal(25,10)
ci.vnpk_cost_amt
last_update_pgm_id
string
ci1.last_update_pgm_id
item_create_dt
date
ci.item_create_dt
cancel_whn_out_dt
date
ci.cancel_whn_out_dt
cncl_unit_rtl_amt
decimal(25,10)
ci.cncl_unit_rtl_amt
lead_time_qty
smallint
ci.lead_time_qty
prompt_price_ind
string
促销价
ci.prompt_price_ind
lease_sales_pct
decimal(25,10)
ci.lease_sales_pct
lease_eff_date
date
ci.lease_eff_date
lease_exp_date
date
ci.lease_exp_date
last_sold_date
date
ci.last_sold_date
lease_dflt_sls_pct
decimal(25,10)
ci.lease_dflt_sls_pct
itemfile_source_nm
string
ci.itemfile_source_nm
max_retail_amt
decimal(25,10)
最大零售金额
ci.max_retail_amt
whpk_sell_chg_rsn_cd
bigint
ci.whpk_sell_chg_rsn_cd

ODS作业规范(Execl文件)

模板说明(首页execl)

基本信息
制定人
鲍某
编写时间
2022/9/28
审核人
审核时间
版本
V1.0
文档修订历史
序号
版本号
修订章节
修订原因

工程情况(单页execl)

版本时间
工程
调度数
>=100W数量表
备注
2022/9/1
ods_user
2
0

ods作业梳理

TASK
属主
SRC_TBL
TGT_DB
TGT_TBL
抽取方式
上线时间
调度频率
调度时间
更新时间
平台
当前状态
数据量
备注
目标表名
userdb
源表名
ods_userdb
o_[源表名]_di
增量
2022/9/1
每天一次
每天02:01
dolphinscheduler
激活
1379
目标表名
userdb
源表名
ods_userdb
o_[源表名]_df
全量
2022/9/1
每天一次
每天02:01
dolphinscheduler
激活
1379
 

数仓命名规范

库命名规范

正式库
临时库
ods_[source database name ]
ods_[source database name ]_tmp
dwd_db
dwd_db_tmp
dws_db
dws_db_tmp
ads_db
ads_db_tmp
dim_db
dim_db_tmp

表命名规范

  • 所有层级表必须要加字段包括:etl_load_ts
  • 表命名使用英文小写字母,单词之间用下划线分开,总长度不能超过 40 个字符

表类型

明细表:dtl 中间表:mid 信息:info 配置表:cfg 拉链表:zip 临时表:tmp 汇总表:sum 日志表:log 手工填报:imp(开头) 实时表:re
 

数据周期

时全量:hf 时增量:hi 时快照:hs 日全量:df 日增量:di 日快照:ds 周全量:wf 周增量:wi 周快照:ws 月全量:mf 月增量:mi 月快照:ms 注: df 每天全量(表没有分区),di 每天增量(每天一个分区),ds 每天增量保留 历史到目前记录(一天一个分区)

ods命名规范

  • 增量:ods_源库名.o_{表名}_di
  • 全量:ods_源库名.o_{表名}_df
  • 接口:ods_源库名.o_api_[api 数据名称]_[数据周期]
  • 文件:ods_源库名.o_flie_[业务数据名称]_[数据周期]
  • 数据量:历史数据量小于 50W 条记录,且未来增长慢的全量同步
  • 字段命名规范:字段默认使用源系统的字段名
  • 字段名与关键字冲突:在源字段名后加上_col,即源字段名_col
 

dwd命名规范

{库}.{层级}{业务域}{数据域}{业务内容}{表类型}{数据周期} 例如:dwd_db.dwd_ds_user{order_info}_dtl_di
 

dws命名规范

{库}.{层级}{业务域}{数据域}{业务内容}{表类型}{数据周期} 例如:dws_db.dws_ds_user{order_info}_sum_di
 

dim命名规范

{库}.{层级}{pub/维度内容}{数据周期}
例如:dim_db.dim_pub_area_df
其中的 pub 与具体业务无关,各个业务部都可以共用,例如时间维度
 

ads命名规范

{库}.{层级}{项目内容|自定义}{表类型}_{数据周期} 例如:ads_db.ads_user_dmp_sum_df
 

临时表

{临时库}.{表名}_tmp{序号} 例如:
dwd_db_tmp.dwd_order_info_dtl_di_tmp01 dwd_db_tmp.dwd_order_info_dtl_di_tmp02
 

分区表

分区字段:
  • 分 mi(00-59) 如 28
  • 时 hh(00-23) 如 10
  • 日 yyyy-mm-dd 如 2022-09-28
  • 月 yyyy-mm 如 2022-09
  • 年 yyyy 如 2022
 
区分表:分区表取数必须要加分区限制,分区注释必须注明根据那个字段进行分区 表分区到时、分分区级别时,表设计使用多级分区 ,如 时分区表;ts:表示日,hh: 表示时;分分区表:ts:表示日,hh:表示时;mi:表示分
 

实时表命名规范

  • 各数仓层次表设计以 re_ 开头
  • ODS 层表设计:{库}.re_{ods}{业务域}{数据域}{业务内容}{数据周期},其他命 名规范见
  • DWD 层表设计:{库}.re_{dwd}{业务域}{数据域}{业务内容}{数据周期},其他命 名规范见
  • DWS 层表设计:{库}.re_{dws}{业务域}{数据域}{业务内容}{数据周期},其他命 名规范见
  • DIM 层表设计:{库}.re_{dim}{pub/维度内容}{数据周期},其他命名规范见
 

字段类型规范

  • 字符:字符串类型使用string
  • 数字:整形最大值 10 位以上:bigint ; 整形最大值在 3 位到 9 位:int(不考虑); 非整形数字类型:decimal(25,10)
  • 时间类型:最小粒度为天: date ;时间: timestamp
  • 布尔类型是否判断:is_{业务},不允许出现空值 ; 0: 表示否, 1:表示是
 

工作流命名

ods

工作流: job_{ods_库名}_{序号} 例如:job_ods_ams
task: 目标表名 例如:o_order_info_df
 

dwd

工作流: job_dwd_{业务域}{数据域}{序号} 例如:job_dwd_ds_user
task: 目标表名 例如:dwd_ds_user_xxx_df
 

dws

工作流:job_dws_{业务域}{数据域}{序号} 例如:job_dws_ds_user
task:目标表名 例如:dws_ds_user_xxx_df
 

ads

工作流:job_ads_{业务域}_{序号} 例如:job_ads_ds
task: 目标表名 例如:ads_user_dmp_xxx_df

数据模型设计

横向分层

ods

操作数据层,即原始数据层。ODS 层有些时候会细分为两层,一个 STG 数据缓冲层,存原 始数据,一个 ODS,存简单清洗的数据

dwd

明细数据层,对数据进行清洗、代码统一、字段统一、格式统一、简单聚合等工作。DWD 层存在的意义是做数据的标准化,为后续的处理提供干净、统一、标准的数据

dws

数据汇总层,按照业务目标,对已经处理好的数据进行横向汇聚、纵向汇总。按照宽表模型 进行数据冗余和预计算,以空间换时间

dim

维度层,即存储所有维度(可以理解为码表)。其实 DIM 不应该单独作为一层,因为从 DWD 层开始向上的所有层都需要用到 DIM 中的内容,是横跨多层的

ads

应用服务层,一般就直接对接 OLAP 分析,或者业务层数据调用接口
 

纵向分域

主题域通常是联系较为紧密的数据主题的集合,方便寻找和使用数据

dw层

正式库: dw_db 临时库:dw_db
划分依据:按照业务或业务过程划分,比如一个靠销售广告位置的门户网站主题域可能会有 广告域,客户域等,而广告域可能就会有广告的库存,销售分析、内部投放分析等主题

DIM层

正式库: dim_db 临时库:dim_db_tmp
划分依据:按照公司主数据划分

DM层

正式库: dm_db 临时库:dm_db_tmp
划分依据:按照主题域进行划分

ADS层

正式库: ads_db_tables 临时库:ads_db_tmp
划分依据:
  1. 根据需求方划分:比如需求方为财务部,就可以设定对应的财务主题域(业务场景), 而财务主题域里面可能就会有员工工资分析
  1. 根据项目划分
notion image
 
 
 
 
 

🤗 总结归纳

📎 参考文章

 
💡
有关文章的问题,欢迎您在底部评论区留言,一起交流~