SQL语言简单,使用频繁。但相比于其他语言,它本身用于查询的特性,决定了最高频的使用场景是快速且准确的和数据库io。可能没有很复杂的逻辑,但其中引用的字段的运算和数据加工逻辑,尤其是业务人员基于实际需要,对数据层层加工后输出结果,如果没有详细的注释,代码的交接和管理将变得异常麻烦。
开发过程中强烈建议补充全面的注释,同步利用代码缩进技巧让嵌套关系一目了然。**一段脚本好不好,让人用着舒服其实很重要。**这是我们对一段SQL脚本是否专业,是否好用的很在意的评价指标。
但细节决定成败,脚本可以覆盖全面的注释,可以逻辑清晰,没有废话。但如何变得优美,又对代码提出了更高的要求。更像是一篇作文,辞藻优美之后,卷面整洁,字体工整,往往还能拉开一两分的差距。
本篇默认你已经掌握了vscode 正版 开源编辑器的下载与使用,并且熟悉一些最基础的操作技巧,让你可以熟练的在其中编写SQL代码。以下技巧存在强迫症之嫌,望读者明加分辨,去其糟粕。
step1.建表语句怎么写,字段定义怎么建?
CREATE TABLE IF NOT EXISTS ADHOC_DATA.G701130_GGDAYREPORT
(
TM_DPST_BAL DECIMAL(18,4) -- 定期存款余额
,TM_DPST_BAL_SUB_D DECIMAL(18,4) -- 定期存款余额日增量
,TM_DPST_BAL_SUB_M DECIMAL(18,4) -- 定期存款余额月增量
,TM_DPST_BAL_SUB_Y DECIMAL(18,4) -- 定期存款余额年增量
,STRU_CHREM_BAL DECIMAL(18,4) -- 结构性存款余额
,STRU_CHREM_BAL_SUB_D DECIMAL(18,4) -- 结构性存款余额日增量
,STRU_CHREM_BAL_SUB_M DECIMAL(18,4) -- 结构性存款余额月增量
,STRU_CHREM_BAL_SUB_Y DECIMAL(18,4) -- 结构性存款余额年增量
)
DISTRIBUTE BY HASH (DATA_DT);
要点:
- 三段式或四段式结构,三段式包含 “字段名称 - 数据类型 - 注释中文定义”,四段式包含 “字段名称 - 数据类型 - 字段重命名或数据库展示内容(多用comment或as关键字引用) - 注释中文定义”。
- 字段命名应当清晰,命名一目了然,尽可能依靠查看字段名即可大致推测出实际含义,在一份代码中同类型口径的命名应当保持统一,增加意义可以通过添加下划线进行内容补充。例:TM_DPST_BAL_SUB_D,TM_DPST - time deposit,定期存款;BAL - balance 余额;SUB - substruction 减法;D - day 天,可以翻译为:定期存款余额前后两天相减,即,定期存款余额日增量。
- 在vscode或其他IDE中,tab命令应当严格设置为“按空格缩进,缩进量为四个空格”
- 代码中每段信息的分隔,都应当是上一个字段结束后,下一个开始前加入一个tab命令。上面代码每个分隔的开头,都是从这一行的第1,5,9,13,17,21…个位置开始写。
- 全部大写,看着整齐。
step2.代码如何改造为Q1?使用列模式同步缩进和输入内容,但是发现代码没有预留空格,怎么快捷处理?
,AUM_UP_DAY_TONG DECIMAL(38,4)
,AUM_UP_MONTH_TONG DECIMAL(38,4)
,AUM_UP_MONTH_AUM_TONG DECIMAL(38,4)
,AUM_BAL_BASE_MINUS_TONG DECIMAL(38,4)
,AUM_BAL_BASE_MINUS_MON_TONG DECIMAL(38,4)
,AUM_BAL_BASE_MINUS_YEAR_TONG DECIMAL(38,4)
如何优化这段截取出来的代码?
- 字段和数据格式的定义太紧凑了,字段里最长的一条,和数据定义里最短的一条,在列的方向上是重合的,应该将他们分开。使用替换命令,将原先的一个空格,替换为更多的空格,强行拉开距离,这里我使用八个空格替换一个空格,代码变成这样。
,AUM_UP_DAY_TONG DECIMAL(38,4)
,AUM_UP_MONTH_TONG DECIMAL(38,4)
,AUM_UP_MONTH_AUM_TONG DECIMAL(38,4)
,AUM_BAL_BASE_MINUS_TONG DECIMAL(38,4)
,AUM_BAL_BASE_MINUS_MON_TONG DECIMAL(38,4)
,AUM_BAL_BASE_MINUS_YEAR_TONG DECIMAL(38,4)
- 使用列模式,从最长数据定义名称和最短数据格式定义之间切割,并拖拽选取全部后面的数据格式内容。并剪切,粘贴放入新建页面。
-- 原始页内容
,AUM_UP_DAY_TONG
,AUM_UP_MONTH_TONG
,AUM_UP_MONTH_AUM_TONG
,AUM_BAL_BASE_MINUS_TONG
,AUM_BAL_BASE_MINUS_MON_TONG
,AUM_BAL_BASE_MINUS_YEAR_TONG
-- 新建页内容
DECIMAL(38,4)
DECIMAL(38,4)
DECIMAL(38,4)
DECIMAL(38,4)
DECIMAL(38,4)
DECIMAL(38,4)
- 将新建页的空格全部替换为‘啥都没有’之后,用列模式剪切回原始页。并将前面的部分用列模式删除到正常的距离。
-- 新建页内容
,AUM_UP_DAY_TONG DECIMAL(38,4)
,AUM_UP_MONTH_TONG DECIMAL(38,4)
,AUM_UP_MONTH_AUM_TONG DECIMAL(38,4)
,AUM_BAL_BASE_MINUS_TONG DECIMAL(38,4)
,AUM_BAL_BASE_MINUS_MON_TONG DECIMAL(38,4)
,AUM_BAL_BASE_MINUS_YEAR_TONG DECIMAL(38,4)
搞定。