阿里 SQL 程式碼編碼原則和規範
阿新 • • 發佈:2020-12-30
阿里 SQL 程式碼編碼原則和規範
編碼原則
SQL 程式碼的編碼原則如下:
- 程式碼功能完善。
- 程式碼行清晰、整齊,程式碼行的整體層次分明、結構化強。
- 程式碼編寫充分考慮執行速度最優的原則。
- 程式碼中需要新增必要的註釋,以增強程式碼的可讀性。
- 規範要求並非強制性約束開發人員的程式碼編寫行為。實際應用中,在不違反常規要求的前提下,允許存在可以理解的偏差。
- SQL 程式碼中應用到的所有 SQL 關鍵字、保留字都需使用全大寫或小寫,例如 select/SELECT、from/FROM、where/WHERE、and/AND、or/OR、union/UNION、insert/INSERT、delete/DELETE、group/GROUP、having/HAVING 和 count/COUNT 等。不能使用大小寫混合的方式,例如 Select 或 seLECT 等方式。
- 4 個空格為 1 個縮排量,所有的縮排均為 1 個縮排量的整數倍,按照程式碼層次對齊。
- 禁止使用
select *
操作,所有操作必須明確指定列名。 - 對應的括號要求在同一列的位置上。
SQL 編碼規範
SQL 程式碼的編碼規範如下:
-
程式碼頭部
程式碼頭部新增主題、功能描述、作者和日期等資訊,並預留修改日誌及標題欄,以便後續新增修改記錄。注意每行不超過 80 個字元,模板如下。
-- MaxCompute(ODPS) SQL --************************************************************************** -- ** 所屬主題: 交易 -- ** 功能描述: 交易退款分析 -- ** 建立者 : 有碼 -- ** 建立日期: 20170616 -- ** 修改日誌: -- ** 修改日期 修改人 修改內容 -- yyyymmdd name comment -- 20170831 無碼 增加對biz_type=1234交易的判斷 --**************************************************************************
-
欄位排列要求
- SELECT 語句選擇的欄位按照每行 1 個欄位的方式編排。
- 首個選擇的欄位與 SELECT 之間隔 1 個縮排量。
- 換行縮排 2 個縮排量後,新增逗號再輸入其它欄位名。
- 2 個欄位之間的逗號分隔符緊跟在第 2 個欄位的前面。
- AS 語句應與相應的欄位在同一行,多個欄位的 AS 建議儘量對齊在同一列上。
-
INSERT 子句排列要求
INSERT 子句寫在同一行,請勿換行。
-
SELECT 子句排列要求
SELECT 語句中所用到的from、where、group by、having、order by、join和union等子句,需要遵循如下要求:
- 換行編寫。
- 與相應的 SELECT 語句左對齊編排。
- 子句首個單詞後新增 2 個縮排量,再編寫後續的程式碼。
- WHERE 子句下的邏輯判斷符and、or等,與 WHERE 左對齊編排。
- 超過 2 個縮排量長度的子句加 1 個空格後,再編寫後續程式碼,例如order by和group by等。
-
運算子前後間隔要求
算術運算子、邏輯運算子前後要保留 1 個空格,並寫在同一行(超過每行 80 個字元長度的限制除外)。
-
CASE 語句的編寫
CASE 語句可以用於 SELECT 語句中對欄位值進行判斷取值的操作。CASE 語句編排的規則如下:
- WHEN 子語在 CASE 語句的同一行,並縮排 1 個縮排量後開始編寫。
- 每個 WHEN 子句儘量在 1 行內編寫,如果語句較長可以換行。
- CASE 語句必須包含 ELSE 子語,ELSE 子句與 WHEN 子句對齊。
-
查詢巢狀編寫規範
在資料倉庫系統 ETL 開發中經常使用子查詢巢狀,其編寫規範示例如下。
-
表別名定義約定
-
一旦在 SELECT 語句中給操作表定義了別名,在整個語句中對此表的引用都必須以別名替代,所以需要給所有的表新增別名。
-
表別名採用簡單字元命名,建議按 a、b、c、d…的順序進行命名,並避免使用關鍵字。
-
多層次的巢狀子查詢別名之前要體現層次關係,SQL 語句的別名需要分層命名,從第 1 層次至第 4 層次,分別用 P(Part) 、S(Segment)、 U(Unit) 和 D(Detail)表示。您也可以用 a、b、c、d 來表示第 1 層次到第 4 層次。
對於同一層次的多個子句,在字母后加 1、2、3、4……區分,並根據情況對錶別名添加註釋。
-
-
SQL 註釋
- 每條 SQL 語句均應添加註釋說明。
- 每條 SQL 語句的註釋單獨成行,並放在語句的前面。
- 欄位註釋緊跟在欄位後面。
- 對不易理解的分支條件表示式添加註釋。
- 對重要的計算添加註釋,說明其功能。
- 過長的函式實現,應將其語句按實現的功能分段,添加註釋進行說明。
- 新增常量及變數的註釋時,應註釋被儲存值的含義(必選),合法取值的範圍(可選)。
原文連結: