1. 程式人生 > >大資料平臺SQL編碼開發規範--轉自阿里雲DataWorks

大資料平臺SQL編碼開發規範--轉自阿里雲DataWorks

本文向您介紹SQL編碼的基本原則和詳細的編碼規範。

編碼原則

SQL程式碼的編碼原則如下:

  • 程式碼功能完善,健壯。
  • 程式碼行清晰、整齊,具有一定的可觀賞性。
  • 程式碼編寫要充分考慮執行速度最優的原則。
  • 程式碼行整體層次分明、結構化強。
  • 程式碼中應有必要的註釋以增強程式碼的可讀性。
  • 規範要求非強制性約束程式碼開發人員的程式碼編寫行為,在實際應用中在不違反常規要求的前提下允許存在可理解的偏差本規範在對日常的程式碼開發工作起到指導作用的同時也將得到不斷的完善和補充。
  • SQL程式碼中應用到的所有關鍵字、保留字都使用小寫,如select、from、where、and、or、union、insert、delete、group、having、count等。
  • SQL程式碼中應用到的除關鍵字、保留字之外的程式碼,也都使用小寫,如欄位名、表別名等。
  • 四個空格為一個縮排量,所有的縮排皆為一個縮排量的整數倍,按程式碼層次對齊。
  • 禁止使用select * 操作,所有操作必須明確指定列名。
  • 對應的括號要求在同一列的位置上。

SQL編碼規範

SQL程式碼的編碼規範如下:

  • 程式碼頭部

    程式碼頭部新增主題、功能描述、作者和日期等資訊,並預留修改日誌及標題欄,以便後續修改同學新增修改記錄。注意每一行不超過80個字元。模板如下: 
     

    -- MaxCompute(ODPS) SQL
    --**************************************************************************
    -- ** 所屬主題: 交易
    -- ** 功能描述: 交易退款分析
    -- ** 建立者 : 有碼
    -- ** 建立日期: 20170616 
    -- ** 修改日誌:
    -- ** 修改日期 修改人 修改內容
    -- yyyymmdd name comment 
    -- 20170831 無碼 增加對biz_type=1234交易的判斷 
    --**************************************************************************
  • 欄位排列要求
    • select語句選擇的欄位按每行一個欄位方式編排。
    • select單字後面一個縮排量後直接跟首個選擇的欄位,即欄位離首起二個縮排量。
    • 其它欄位前導二個縮排量,再在逗號後放置欄位名。
    • 兩個欄位之間的逗號分割符緊跟在第二個欄位的前面。
    • as語句應與相應的欄位在同一行。多個欄位的as建議儘量對齊在同一列上。
  • INSERT子句排列要求

    insert子句寫在同一行,請勿換行。

  • SELECT子句排列要求select語句中所用到的from、where、group by、having、order by、join、union等子句,需要遵循如下要求:
    • 換行編寫。
    • 與相應的select語句左對齊編排。
    • 子句後續的程式碼離子句首字母二個縮排量起編寫。
    • where子句下的邏輯判斷符and、or等與where左對齊編排。
    • 超過兩個縮排量長度的子句加一空格後編寫後續程式碼,如order by、group by等。
  • 運算子前後間隔要求算術運算子、邏輯運算子前後要保留一個空格,除非超過每行80個字元長度的限制,否則都寫在同一行。
  • CASE語句的編寫

    select語句中對欄位值進行判斷取值的操作將用到的case語句,正確的編排case語句的寫法對加強程式碼行的可閱讀性也是很關鍵的一部分。

    對case語句編排作如下約定:

    • when子語在case語句的同一行並縮排一個縮排量後開始編寫。
    • 每個when子語一行編寫,當然如果語句較長可換行編排。
    • case語句必須包含else子語,else子句與when子句對齊。
  • 查詢巢狀編寫規範

    子查詢巢狀在資料倉庫系統ETL開發中是經常要用到,因此程式碼的分層編排就非常重要。示例如下: 

  • 表別名定義約定
    • 所有的表都加上別名。因為一旦在SELECT語句中給操作表定義了別名,在整個語句中對此表的引用都必須慣以別名替代。考慮到編寫程式碼的方便性,約定別名儘量簡單、簡潔,同時避免使用關鍵字。
    • 表別名採用簡單字元命名,建議按a、b、c、d……的順序進行命名。
    • 多層次的巢狀子查詢別名之前要體現層次關係,SQL語句別名的命名,分層命名,從第一層次至第四層次,分別用P 、S、 U 、D表示,取意為Part, Segment, Unit, Detail。也可用a、b、c、d來表示第一層次到第四層次;對於同一層次的多個子句,在字母后加1、2、3、4……區分。有需要的情況下對錶別名加註釋。
  • SQL註釋
    • 每條SQL語句均應添加註釋說明。
    • 每條SQL語句的註釋單獨成行、放在語句前面。
    • 欄位註釋緊跟在欄位後面。
    • 應對不易理解的分支條件表示式加註釋。
    • 對重要的計算應說明其功能。
    • 過長的函式實現,應將其語句按實現的功能分段加以概括性說明。
    • 常量及變數註釋時,應註釋被儲存值的含義(必須),合法取值的範圍(可選)。