💡 工作中用到的数仓命名规范
文章摘要
qwen-turbo
此内容根据文章生成,并经过人工审核,仅用于文章内容的解释与总结
一、通用命名规范
- 目前主流的命名方法大体分类:大驼峰命名法 (camelCase) 和小驼峰命名法 (snake_case),本规范要求使用小驼峰命名法 (snake_case),统一为小写字符,单词之间使用下划线隔开,贴源层字段可以不遵守,字段命名和源系统保持一致。
- 单词长度不超过64个字符,字段或者表命名小于6级
- 命名尽量做到见名知意,言简意赅,尽量使用英文以及符合业界要求的字符,特殊情况下可以使用汉语拼音缩写
- 尽量避免使用关键字,确实需要使用关键字情况下使用“`”转义
- 优先使用词根管理规范中已有的关键字,定期维护词根规范表
- 定期review新增命名使用的字段规范性
二、表命名规范
1. 聚合粒度以及加工频率字段说明
字段中文 | 字段 | 字段全称 | 说明 |
---|---|---|---|
日 | d | day | 每天 |
周 | w | week | 每周 |
月 | m | month | 每月 |
年 | y | year | 每年 |
小时 | h | hour | 每小时 |
半小时 | hh | halfhour | 每半小时 |
2. 抽取方式字段说明
抽取方式 | 字段 | 字段全称 |
---|---|---|
全量 | f | full |
增量 | i | incremental |
拉链 | c | chain |
3. 数据表命名规范详解
模型层次 | 表命名规范 | 实例表明 | 实例表说明 |
---|---|---|---|
stg | stg_业态简称+系统入仓序号_源表名_加工频率+抽取方式 | stg_sg01_bill_di | stg为模型层次、sg为业态、01为业态下的系统入仓序号、bill代表源表名、d代表加工频率、i代表增量抽取方式 |
ods | ods_业态简称+系统入仓序号_源表名_加工频率+抽取方式 | ods_sg01_bill_df | ods为模型层次、sg为业态、01为业态下的系统入仓序号、bill代表源表名、d代表加工频率、f代表全量抽取方式 |
dwd | dwd_主题域_可选的主题_事实表相关描述_加工频率+抽取方式 | dwd_par_trader_detail_df | dwd为模型层次、par代表当事人主题域、trader代表商户主题、detail代表事实表相关描述、d代表加工频率、f代表全量抽取方式 |
dim | dim_通用维度相关描述_加工频率+抽取方式 | dim_brand_df | dim为模型层次、brand为通用维度相关描述、d代表加工频率、f代表全量抽取方式 |
dws | dws_主题域_可选的主题_相关描述_聚合粒度+抽取方式 | dws_par_trader_count_df | dws为模型层次、par代表当事人主题域、trader代表商户主题、count代表相关描述、d代表加工聚合粒度、f代表全量抽取方式 |
ads | ads_主题域_相关描述_加工频率+抽取方式 | ads_trader_count_df | ads为模型层次、trader_count代表相关描述、d代表加工频率、f代表全量抽取方式 |
4. 对于表名中统计周期和加工频率字段的补充说明
我们经常会发现聚合表的后缀会出现 _di 或者 _df,这里的 i 和 f 表示增量和全量,而 d 表示天,但是却又总是说不清楚它究竟是表示天级别的聚合粒度还是每天运行一次的加工频率。
大多数情况下表的聚合粒度和它的调度周期是一致的,然而也确实存在例外的情况,在dws层你可能每天运行一个聚合到小时级粒度的数据,以观察每小时的走势。站在使用者的角度来看,他并不关心表的调度周期,只在乎这个表的聚合粒度。
所以我们尽量不将表使用无关的 ETL 信息暴露给使用者。在dws层的时间后缀只表示该表的聚合粒度,与 ETL 的调度周期无关。
三、字段命名规范
同名同义性是我们对字段命名的首要要求。如果两个字段名字一样,那么它们的含义应该是一样的;反之,如果两个字段名字不一样,那么它们的含义就一定是要有区别的。当这个要求放在单个主题域内的时候,还是容易实现的。当它推广到全域范围内,这个事情就会变得有些困难。
其次,字段名称清晰是另外一个要求。良好的字段命名应当是自解释的,如果看完字段的注释还无法理解甚至曲解字段的含义,那个可以说这个字段的命名和注释是不合格的。
表分区字段说明
分区类型 | 分区字段 | 分区数据格式 | 备注 |
---|---|---|---|
按天分区 | stat_date | YYYYMMDD | |
按周分区 | stat_week | 自定义 | 转换当天所在月或者直接使用当周最后一天都可 |
按月分区 | stat_month | YYYYMM | |
按年分区 | stat_year | YYYY | |
按小时分区 | stat_date | YYYYMMDDHH | |
按半小时分区 | stat_date | YYYYMMDDHHMM |
其他字段相关说明
1、数据表etl时间字段统一使用etl_time
2、标志类型的字段,是否类型的,统一使用int类型,取值统一使用0/1,0代表否,1代表是,不允许出现空值域(如果有空值则新增取值2,代表未知)
3、字段命名规范中未说明的部分参照通用命名规范
四、任务命名规范
任务是组成工作流的最小单位,也是完成一次 ETL 的最小开发单位,同时也是调度任务进行失败重试的最小单元。我们要求一个任务只写一张目标表,同时任务的命名中必须包含该目标表的表名。
模型层次 | 任务命名规则 | 实例任务名 | 实例任务说明 |
---|---|---|---|
stg、ods | [源数据库类型>目标数据库类型][业态简称+系统入仓序号]目标表表明 | [oracle>hive][stg_sg01]stg_sg01_order_df | oracle为源系统数据库类型、hive为目标数据库类型、sg为业态简称,01为业态下源系统数据库入仓序号,stg_sg01_order_df为目标表名 |
dwd、dim、dws、ads | [目标表模型层次][主题域][可选的主题][目标表表明]目标表表明 | [dwd][par][trader][订单明细实时表]dws_par_trader_count_df | dwd为目标表模型层次、par为当事人主题域、trader为商户主题、订单明细实时表为目标表中文名、dws_par_trader_count_df为目标表名 |
导出业务 | [源数据库类型>目标库数据库类型][导出表中文名说明]导出表名称 | [hive>mysql][订单表]ads_order_df | hive为源数据库类型、mysql为目标库数据库类型、订单表为导出表中文名说明、ads_order_df为导出表表名 |
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自白贺BAIHE - 分享大数据知识及生活感悟
评论 ()