-
按月分區(qū)
之前的模型設計師及架構師留下的表分區(qū)為STRING型的etl_time:20181222153000(年月日時分秒)
image.png
業(yè)務人員使用時經常用時間取數,導致需要截取etl_time,效率比直接查詢分區(qū)字段原始值慢兩倍。

image.png
思考: 若是重新分區(qū),基于現在的業(yè)務場景及數據使用方便層面,我更傾向于年月-日-時
-
同樣是按月分區(qū),這樣會在年月目錄中存儲單月30天的目錄數據;
image.png 天目錄下有時目錄( 甚至可以天時一層目錄,因為一天只保留一份當天全量數據)
后續(xù): 若是需要批量修改底層表的分區(qū)字段及分區(qū)字段值
思路:
-
將類似etl_time:20181222153000的字段分兩列: etl_date: 20181222 etl_time: 153000(根據使用場景決定time存儲時分秒)
-- 檢查數據是否備份至臨時表,此步驟決定是否執(zhí)行下一步 CREATE TABLE 臨時表 AS orc AS SELECT * FROM 原表; - 這期間耗時會根據表量、數據量決定 - DROP TABLE 原表; -- 檢查數據已備份至臨時表,再執(zhí)行此步驟 CREATE TABLE 新表 (業(yè)務字段,分列字段,分區(qū)字段); —- 分區(qū)字段參考etl_date INSERT INTO 新表 (業(yè)務字段,分列字段,分區(qū)字段) -- 檢查數據是否完整 select 業(yè)務字段 ,SUBSTRING(20181222153000,1,8) ,SUBSTRING(20181222153000,9,6) FROM 臨時表; -- 備份歷史數據-插數據還是挺快的,秒級幾十萬條(單條數據約為0.005KB) ...

