😍 数仓规范篇、02.开发规范 - 白程序员的自习室

标签: | 发表时间:2021-04-08 11:52 | 作者:
出处:https://www.studytime.xin

HIVE SQL 作为数仓操作语言,良好的代码习惯能我们高效地完成数据分析工作。除了根据 SQL 执行顺序上的优化外,按以下规范编写 SQL 代码既能使代码更加清晰,方便自己后期维护,也方便其他同事接手。

一、注释规范

  • 注释内容要清晰明了,含义准确,避免歧义

  • 字段注释紧跟在字段后面

  • 应对不易理解的分支条件表达式加注释

  • 对重要的计算应说明其功能

  • 过长的函数实现,应将其语句按实现的功能分段加以概括性说明

  • 原则上所有表、字段、任务都需要添加注释,任务有特定的注释规范,见下文任务注释说明

任务注释说明

1            
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- [hive][ads][营销类应收未付明细报表]ads_fin_receivable_unpaid_marketing_detail_df            

-- **************************************************************************
-- ** 创建者 : baihe
-- ** 创建日期 : 20210326
-- ** 功能描述 :营销类应收未付明细报表
-- **************************************************************************
-- **************************** 修改日志 *************************************
-- 2021.3.10 修正应收未付金额算法逻辑为直接取值
--
-- **************************************************************************
-- ** 依赖表:
-- dws_fin_receivable_unpaid_marketing_detail_df 营销类应收未付汇总表
--
-- **************************************************************************
-- ** 输出表:
-- ads_fin_receivable_unpaid_marketing_detail_df 营销类应收未付明细报表
-- **************************************************************************
--
-- ******************* CURRENT_VERSION : V.1.1 ***************************
-- **************************************************************************

任务注释注意事项补充

1、提供任务名,方便任务创建时任务的获取以及平台中任务查询
2、提供创建者、创建日期、功能描述等信息,方便后期维护跟踪
2、提供代码变更历史,便于了解代码演进历史及依据
3、提供脚本依赖表清单,方便后续任务依赖配置
4、提供输出表清单,方便确认是否单个目标表

二、存储格式规范

所谓的存储格式就是在Hive建表的时候指定的将表中的数据按照什么样子的存储方式,如果指定了方式,那么在向表中插入数据的时候,将会使用该方式向HDFS中添加相应的数据类型。建表如果无特殊要求,一律使用下面的row format格式及存储格式。

1            
2
row format serde 'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe'            
stored as RCFile;

三、建表语句规范

1            
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--参考实例            
create table if not exists ads_sg.ads_fin_receivable_unpaid_marketing_detail_df
(
`business_id` STRING comment '关联id',
`contract_id` STRING comment '合同id',
`region_id` STRING COMMENT '所属大区ID',
`region_name` STRING COMMENT '所属大区',
`city_company_id` STRING COMMENT '所属城市公司ID',
`city_company_name` STRING COMMENT '所属城市公司名称',
`plaza_id` STRING COMMENT '广场主数据id',
`plaza_name` STRING COMMENT '广场简称',
`category` STRING COMMENT '类别',
`budget_amt` DECIMAL(18, 2) COMMENT '预算金额',
`contract_type` STRING COMMENT '合同类型',
`supplier_name` STRING COMMENT '乙方单位',
`contract_amt` DECIMAL(18, 2) COMMENT '合同金额',
`change_amt` DECIMAL(18, 2) COMMENT '预计变更金额',
`sign_off_amt` DECIMAL(18, 2) COMMENT '预计结算金额',
`payable_amt` DECIMAL(18, 2) COMMENT '累计应付金额',
`payable_rat` DECIMAL(18, 4) COMMENT '累计应付比例',
`payment_amt` DECIMAL(18, 2) COMMENT '累计已付金额',
`unpaid_amt` DECIMAL(18, 2) COMMENT '累计应付未付金额(计算)',
`is_acceptance_form` INT COMMENT '是否有验收单',
`acceptance_time` STRING COMMENT '验收时间',
`risk_prompt` STRING COMMENT '风险提示',
`last_update_time` timestamp() COMMENT 'etl时间'
)
comment '营销类应收未付明细报表'
partitioned by ( stat_date bigint comment '日期分区')
row format serde 'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe'
stored as RCFile;

四、数据类型规范

1、一般情况下大部分字段都采用 string类型
2、金额类及其它小数点数据等非整型数据统一使用decimal
3、分区字段比较特殊,在数仓中统一使用bigint(平台特性原因),非平台项目可以使用date或string
4、金额类数据如果单位是元,则采用 decimal(16,4)长度类型,如果单位是万元或亿元,则采用 decimal(10,6)长度类型,其它数据字段类型视具体情况而定
5、整形数值统一使用BIGINT或INT,最大值10位及以上的整数使用BIGINT,最大值在3-9位的整数使用INT
6、时间类型数据不做具体要求,可以使用string、也可以根据日期格式使用 date或timestamp,对于只包含年月日的数据字段可采用 date类型;对于既包含年月日也包含时分秒的数据字段可采用 timestamp类型

五、SQL编码原则及规范

1、SELECT 查询语句中禁止使用 select *,所有操作必须明确指定列名
2、QL代码中应用到的所有关键字、保留字都使用大写,如select、from、where、and、or、union、insert、delete、group、having、count等。
3、SQL语句多表连表时,应使用表的别名,同时表别名形式来引用列
4、SELECT语句排列样式上,对于字段应每行一个进行编排,两个字段之间的逗号分割符紧跟在第一个字段后面或第二个字段的前面,as语句应与相应的字段在同一行,多个字段的as建议尽量对齐在同一列上

5、CASE语句的编写排列样式上,when语句应在case语句下一行,缩进一个缩进量后开始编写,每个when语句一行,当然如果语句较长可换行编排,case语句必须包含else子语,else子句与when子句对齐。


6、SQL代码中应用到的除关键字、保留字之外的代码,也都使用小写,如字段名、表别名等
7、代码中开发人员应有必要的注释从而增加代码的可读性
8、开发人员编写的代码应功能完善及健壮,同时注重美观行列段落划分整洁清晰
9、代码编写应充分考虑执行速度最有原则

六、空值处理

对于表中的空值,尽量用如下规则统一,如果有特殊情况请视情况而定。

字段类型 空值替换值
STRING -
DECIMAL(16,4) 0.0000
DECIMAL(16,2) 0.00
FLOAT 0.00
INT、BIGINT 0
DATE 1970-01-01
TIMESTAMP 1970-01-01 00:00:00

特殊说明:
一般而言上述情况基本可以满足需求,但是不排除有特殊情况,需求要求不按照上述规范或者上述不足覆盖的场景,视情况而定。除了将空值替换为特定的值之外,业务也有直接过滤掉数据的情况。

规范要求的项,并非强制性约束,在实际应用中在不违反常规要求的前提下允许存在可理解的偏差。同时在研发过程中,如遇到问题以及好的建议,及时沟通补充此规范。也希望规范在对日常的代码开发工作起到指导作用的同时也将得到不断的完善和补充。


数据仓库命名规范:

https://www.studytime.xin/article/datawarehouse-naming-conventions.html


相关 [规范 开发 规范] 推荐:

java代码开发规范

- - BlogJava_首页
格式规范:                                                                      .       1、TAB空格的数量. 编辑器上的TAB空格数量统一取值为4.       2、换行, 每行120字符.       3、if语句的嵌套层数3层以内   .

JavaScript开发规范要求

- - 博客 - 伯乐在线
来源: webflash 的博客. 作为一名开发人员(WEB前端JavaScript开发),不规范的开发不仅使日后代码维护变的困难,同时也不利于团队的合作,通常还会带来代码安全以及执行效率上的问题. 本人在开发工作中就曾与不按规范来开发的同事合作过,与他合作就不能用“愉快”来形容了. 现在本人撰写此文的目的除了与大家分享一点点经验外,更多的是希望对未来的合作伙伴能够起到一定的借鉴作用.

MySQL数据库规范 (设计规范+开发规范+操作规范) - 东山絮柳仔 - 博客园

- -
      为了在软件生命周期内规范数据库相关的需求分析、设计、开发、测试、运维工作,便于不同团队之间的沟通协调,以及在相关规范上达成共识,提升相关环节的工作效率和系统的可维护性. 同时好的规范,在执行的时候可以培养出好的习惯,好的习惯是软件质量的保证.        本文档适用于开发、测试、QA及运维团队成员.

(转)豆瓣css开发规范

- Hu DongHai - 小豪~麦穗的部落格
今天无意间看到了豆瓣的一些前端开发规范,攻城师作战指南. 里面的Javascript代码风格规范 差不多就是基本的javascript规范,主要还是分享一下 css部分的规范. 因为规范是在google docs上,需要穿过篱笆,所以我就直接帖过来了,一起学习一下哈. ——————————————–华丽的分割线————————————————.

Drupal/PHP/XHTML开发规范1.2

- 建江 - willietse's blog
*文中涉及XHTML/CSS部分,背景为黄底. 常言道,“没有规矩,不成方圆”. 良好的编程风格与规范对开发者以及项目管理人员都是非常重要的. 当一个软件项目尝试着遵守公共一致的标准时,可以使参与项目的开发人员更容易了解项目中的代码、弄清程序的状况. 使新的参与者可以很快的适应环境,防止部分参与者出于节省时间的需要,自创一套风格并养成终生的习惯,导致其它人在阅读时浪费过多的时间和精力.

js/jQuery插件开发及规范

- - JavaScript - Web前端 - ITeye博客
当我们画出了UI之后就可以正式编写jQuery插件代码了,不过在着之前我们还需要对jQuery插件开发的一些规范性有一些了解.  这是来自jQuery官方的插件开发规范要求,使用这种编写方式有什么好处呢. c) 兼容jQuery操作符'$'和'jQuery'. 我们知道这段代码在被解析时会形同如下代码:.

移动开发规范概述

- - Jing
iOS 4.0+ 使用英文字体 Helvetica Neue,之前的iOS版本降级使用 Helvetica. 中文字体设置为华文黑体STHeiTi. 需补充说明,华文黑体并不存在iOS的字体库中( http://support.apple.com/kb/HT5484?viewlocale=en_US), 但系统会自动将华文黑体STHeiTi兼容命中系统默认中文字体黑体-简或黑体-繁.

互联网 MySQL 开发规范

- - leejun_2005的个人页面
对于刚加入互联网的朋友们,肯定会接触到MySQL,MySQL作为互联网最流行的关系型数据库产品,它有它擅长的地方,也有它不足的短板,针对它的特性,结合互联网大多应用的特点,笔者根据自己多年互联网公司的MySQL DBA经验,现总结出互联网MySQL的一些开发规范,仅供参考. 作者是微信订阅号yunweibang特约技术专家刘秋岐,多年数据库经验,如有问题可以订阅yunweibang并留言.

阿里官方Redis开发规范

- - 互联网 - ITeye博客
本文主要介绍在使用阿里云Redis的开发规范,从下面几个方面进行说明. 通过本文的介绍可以减少使用Redis过程带来的问题. 以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id. 保证语义的前提下,控制key的长度,当key较多时,内存占用也不容忽视,例如:. user:{uid}:friends:messages:{mid}简化为u:{uid}:fr:m:{mid}.

😍 数仓规范篇、02.开发规范 - 白程序员的自习室

- -
HIVE SQL 作为数仓操作语言,良好的代码习惯能我们高效地完成数据分析工作. 除了根据 SQL 执行顺序上的优化外,按以下规范编写 SQL 代码既能使代码更加清晰,方便自己后期维护,也方便其他同事接手. 注释内容要清晰明了,含义准确,避免歧义. 应对不易理解的分支条件表达式加注释. 过长的函数实现,应将其语句按实现的功能分段加以概括性说明.