数据仓库:SQL编码规范

SQL编码规范

在数据仓库SQL语句的编写中,需要遵循一定的SQL编码规范。遵循这些编码规范可以使代码的可读性强,层次分明,结构清晰。

SQL编码基础规范

基础规范规定所有的SQL语句需要共同遵循的规范。

  • 所有的关键字,函数名统一使用全大写
  • 所有的表名,字段名军使用全小写
  • 对应的括号要在同一列的位置上
  • WHERE语句条件编写注释
  • 运算符前后间隔1个空格
  • 4个空格为1个缩进量,所有的缩进均为1个缩进量的整数倍
SQL注释
  • 每条SQL语句均应添加注释说明。
  • 每条SQL语句的注释单独成行,并放在语句的前面。
  • 字段注释紧跟在字段后面。
  • 对不易理解的分支条件表达式添加注释。
  • 对重要的计算添加注释,说明其功能。
字段排列
  • SELECT语句选择的字段按照每行1个字段的方式编排。
  • 首个选择的字段与SELECT之间隔1个缩进量。
  • 换行缩进2个缩进量后,添加逗号再输入其它字段名。
  • 2个字段之间的逗号分隔符紧跟在第2个字段的前面。
  • AS语句应与相应的字段在同一行,多个字段的AS建议尽量对齐在同一列上。
关键字排列
  • 换行编写。
  • 与相应的SELECT语句左对齐编排。
  • 子句首个单词后添加2个缩进量,再编写后续的代码。
  • WHERE子句下的逻辑判断符AND、OR等,与WHERE左对齐编排。
  • 超过2个缩进量长度的子句加1个空格后,再编写后续代码。
CASE语句的编写

CASE语句可以用于SELECT语句中对字段值进行判断取值的操作。CASE语句编排的规则如下:

  • WHEN子语在CASE语句的同一行,并缩进1个缩进量后开始编写。
  • 每个WHEN子句尽量在1行内编写,如果语句较长可以换行。
  • CASE语句必须包含ELSE子语,ELSE子句与WHEN子句对齐。

SQL语句示例

下面给出一些在实际的开发中使用到的SQL代码模板。

建表语句

在实际的数仓工作中创建表需要注意以下几点:

  • 根据需要指定库名称
  • 创建分区表时使用一致的分区键
  • 为了兼容不同类型的源数据,尽量使用通用的数据类型
  • 在SQL脚本中创建临时表时使用DROP TABLE IF EXISTS和CREATE TABLE IF NOT EXISTS的方式
DROP TABLE IF EXISTS dim.dim_employees;
CREATE TABLE IF NOT EXISTS dim.dim_employees;
(
employee_id   BIGINT COMMENT '员工编号'  ,
first_name    STRING COMMENT '员工名字'  ,
last_name     STRING COMMENT '员工姓氏'  ,
email         STRING COMMENT '电子邮件'  ,
phone_number  STRING COMMENT '手机号码'  ,
department_id BIGINT COMMENT '部门编号'  ,
hire_date     DATE   COMMENT '雇佣时间'  ,
salary        DOUBLE COMMENT '薪资'
)
COMMENT '员工信息维度表'
PARTITIONED BY (ds STRING COMMENT '分区字段')
STORED AS ORC;
INSERT语句
--将有效ODS员工表数据写入员工信息维表
INSERT OVERWRITE TABLE dim.dim_employees PARTITION(ds)
SELECT    a.emp_id          AS employee_id
	, a.first_name      AS first_name
	, a.last_name       AS last_name
	, a.email           AS email
	, a.phone           AS phone_number
	, a.dept_id         AS department_id
	, a.hiredate        AS hire_date
	, a.sal             AS salary
	, '${biz_date}'
FROM    ods.t_hr_employees a
WHERE   a.is_invalid = 1
;

本文有借鉴阿里云Dataworks编码规范,地址:https://helpcdn.aliyun.com/document_detail/137491.html

posted @ 2021-09-24 17:28  VittorioLiu  阅读(802)  评论(0)    收藏  举报