Skip to content

数仓ETL规范

1. 表命名规范

  • ODS层命名为ods_表名
  • DWD层命名为dwd_dim/fact_表名
  • DWS层命名为dws_表名
  • DWT层命名为dwt_表名
  • DIM层命名为dim_表名
  • ADS层命名为ads_表名
  • 临时表命名为tmp_xxx
  • 用户行为表,以log为后缀

2. 脚本命名规范

  1. 脚本名字小写,单词用下划线间隔
  2. 数据层名_目标表名_用途_源表名.sh

3. 脚本内容规范

脚本分为三部分:
1.开头注释区:包含任务名、源表、目标表、调度方式、调度频率、描述以及算法 、作者、创建日期
2.自定义变量申明区
3.sql内容,建议不超过一千行

4. sql规范

4.1 sql注释

  1. sql比较复杂的应带有详细的注释
  2. sql注释可以以"—"开头(脚本中还支持#开头),但不支持/内容/
  3. 语句注释:如果某句sql很复杂,注释需要说明里面的实现逻辑和特殊处理,方便其他同学了解和排查
  4. 字段注释:需要—后面跟字段中文名,表后面跟中文表名 缩进和换行 变量名和关键字使用大写,

4.2 sql格式

  1. sql书写递进式,外面使用4个空格,内层使用8个空格,不能使用tab键代替
  2. 遇到关键字select from where update insert on HAVING、LATERAL VIEW 需要换行
  3. 字段每一行用逗号开头
  4. sql结尾换一行用分号结尾
  5. as 后面跟上字段不能换行
  6. 每一行建议最多有120个字符
  7. 层次不同的sql里面,涉及子查询要用4个空格缩进
  8. 使用+-*/%>=等符号两边要有空格

5. 别名规范

  1. 外层别名用T1T2,内层别名用S1,内三层用P1 别名必须用AS
  2. select后面所有要查出的字段都要含有表的别名

5. 关联规范

  1. 大表关联不超过3个 小表关联不超过10个
  2. 一般认为不超过10万数据为小表
  3. 一般使用左外关联
  4. 不建议使用自然连接而是inner join
  5. 不建议使用full join
  6. 如果关联条件是为唯一值可以不用关联,比如 a.date=‘20240101’ and b.date=‘20240101’
  7. 左表选择过滤数据多的去关联
  8. 关联表出现null值,目标表字段不能为空,需要处理空值
  9. 关联的字段是唯一值不能为null
  10. a join b 的关联字段中b的字段最好是主键
  11. 关联的表中使用别名就所有地方都使用别名,避免出现表名和别名都在用的情况,容易出现笛卡尔集

6. null值规范

初始表数据和数据处理, 字段如果为 数值:默认为0 字符串:默认为‘’
日期类型:默认为20991231或者0001–01-01 时间戳:0001-01-01 00:00:00 如果新建字段,默认值可以跟着业务走,默认按照上述默认值规则 如果是join没有关联上的字段为null,可按照码值设置未知值,否则按照上诉默认值规则

7. 临时表规范

按照删除创建再删除流程处理,保证在数据仓库中不存在临时表 以vt_ 时间yyyymmdd或者编号) 数据存放在tmpdb库中

8. 备份表规范

备份表名长度不超过32位,按照表名_bak_yyyymmdd,方便后期磁盘空间不足清理部分表 为了hdfs最大使用率空间采用orc压缩格式

9. 字段类型规范

  1. 数量类型用bigint
  2. 金额类型为decimal(12,2)
  3. 字符串(名字, 描述信息等)类型为string
  4. 主键外键类型为string
  5. 时间戳类型为bigint
  6. 为了提高数据仓库性能,不建议使用隐式转换
  7. 不建议数值类型和字符串类型插入日期类型的表中
  8. 字符串入库前要trim,字符串连接或者运算时候要trim,关联的时候要trim
  9. where和on后面 的字段类型要匹配,不能出现字段做转换,可以用具体值转换,比如str_to_date(a.datestr)=‘20240101’

10. 表类型规范

大部分都用orc非事务型存储 备份表也是orc非事务存储