Excel資料模型自動生成Hive建表語句

語言: CN / TW / HK

最近在「空白女俠」公號上看到她回答了大家會困擾的精力問題,比如為什麼我(空白女俠)能同時做那麼多事情,精力那麼充沛?工作中遵循一個真理:

複雜的事情簡單化,簡單的事情標準化,標準的事情流程化,流程化的事情工具化,工具化的事情自動化,無法自動化的事情外包化。

資料開發過程中,有些過程是可以工具化來提高工作效率,騰出更多的時間和精力去提高自己(摸魚~)

工具化

在日常資料開發過程中,會經常需要根據資料模型編寫建表語句,每次寫建表語句都會用幾分鐘的時間,而且還容易出一些低階的錯誤,於是打算做個 Excel 模板,把表字段、表分割槽、表名寫在裡面,通過程式自動生成建表語句。效果如下圖:

資料模型生成建表語句

製作模板

主要包括表名、表中文描述、欄位名、資料型別、欄位說明、是不可以為空、唯一主鍵、表分割槽等寫在裡面(可以根據實際情況進行調整)

模板組成分為三個部分:

  • 1-3行是表名、表中文描述和模板列說明
  • 4-19行為建立表字段的基本資訊
  • 20行為分割槽欄位

資料模型模板

實現原理

獲取指定目錄下的資料模型檔案,約定為以「資料模型.xls」或「資料模型.xlsx」檔名結尾的 Excel 檔案

迴圈遍歷每個模板檔案,根據模板組成規範,解析檔案,拼接 SQL 語句,生成建表語句檔案

生成結果

CREATE EXTERNAL TABLE ods_cbonddescription (
    object_id string  COMMENT '物件ID',
    b_info_fullname string  COMMENT '債券名稱',
    s_info_name string  COMMENT '債券簡稱',
    b_info_issuer string  COMMENT '發行人',
    b_issue_announcement string  COMMENT '發行公告日',
    b_issue_firstissue string  COMMENT '發行起始日',
    b_issue_lastissue string  COMMENT '發行截至日',
    b_issue_amountplan bigint  COMMENT '計劃發行總量(億元)',
    b_issue_amountact bigint  COMMENT '實際發行總量(億元)',
    b_info_issueprice bigint  COMMENT '發行價格',
    b_info_par bigint  COMMENT '面值',
    b_info_term_year int  COMMENT '債券期限(年)',
    b_info_term_day int  COMMENT '債券期限(天)',
    b_info_paymentdate int  COMMENT '兌付日',
    b_info_paymenttype int  COMMENT '計息方式',
    s_info_exchmarket string  COMMENT '交易所'
)
COMMENT '債券基本資訊' 
PARTITIONED BY(dt string) 
ROW FORMAT DELIMITED '\t' 
STORED AS ORC 
LOCATION 'hdfs://host:8020/dw/ods/ods_cbonddescription';

結語

如果大家在工作中使用了什麼樣的模板,可以一起交流如何形成一定的工具化的指令碼來提高我們工作的效率。

最後,關注公眾號,回覆「605」獲取模板和程式碼。

歡迎關注公眾號:HelloTech,獲取更多內容