一種hive的模型設計思路,解決頻繁增加指標欄位的問題
1場景描述:
有一張由多個維度(維度1、維度2、維度3、……)和多個指標(指標1、指標2、指標3、……)欄位構成的表(schema.tablename1),由於業務頻繁變化,經常需要增加指標,按照這種模型設計結構每次增加指標都需要修改表結構,並修改業務邏輯程式碼。
樣例:
欄位名 | 欄位描述 | 欄位型別 |
dim1 | 維度1 | string |
dim2 | 維度2 | string |
dim3 | 維度3 | string |
kpi1 | 指標1 | double |
kpi2 | 指標2 | double |
kpi3 | 指標3 | double |
2每次新增指標如何實現不修改表結構呢?
解決思路:
構建一個map<string,string>結構的欄位,將指標欄位名和指標欄位值都存放在這一個欄位中。
表結構樣例:
欄位名 | 欄位描述 | 欄位型別 |
dim1 | 維度1 | string |
dim2 | 維度2 | string |
dim3 | 維度3 | string |
kpi_value | 格式:[指標欄位名1:指標欄位值1,指標欄位名2:指標欄位值2,指標欄位名3:指標欄位值3] | map<string,string> |
3實現方法:
CREATE TABLE IF NOT EXISTS schema.tablename2
(
dim1 string comment '維度1 ',
dim2 string comment '維度2 ',
dim3 string comment '維度3 ',
kpi_value MAP<STRING,STRING> comment '格式:指標欄位名1:指標欄位值1,指標欄位名2:指標欄位值2'
)
PARTITIONED BY (
date_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
NULL DEFINED AS ""
STORED AS ORC
tblproperties ('orc.compress'='SNAPPY')
;
資料由橫錶轉成map結構SQL樣例:
INSERT overwrite TABLE schema.tablename2 PARTITION (date_id)
select
dim1,
dim2,
dim3,
str_to_map(concat('kpi1!',coalesce(kpi1,0),'&',
'kpi2!',coalesce(kpi2,0),'&',
'kpi3!',coalesce(kpi3,0)
),'&','!') cols_str,
date_id
from schema_tablename1
;
4查詢方法:
Select dim1,dim2,dim3,
sum(kpi_value["kpi1"]) as kpi1,
sum(kpi_value["kpi2"]) as kpi2,
sum(kpi_value["kpi3"]) as kpi3
from schema.tablename2
group by dim1,dim2,dim3
;
相關文章
- 怎麼解決new一個類欄位唯一標識問題?
- MyBatis 解決欄位名不一致的問題MyBatis
- Oracle資料庫頻繁歸檔問題的解決辦法Oracle資料庫
- 巧用 Base62 解決欄位太短的問題
- 多維分析模型頻繁變動的解決方案有哪些?模型
- Shiro效能優化:解決Session頻繁讀寫問題優化Session
- 無線路由器頻繁斷線問題巧解決路由器
- [BUG反饋]模型增加欄位BUG模型
- Redigo: ScanStruct()匿名指標欄位的解析GoStruct指標
- 小程式容器(沙箱)是否可以解決App頻繁發版問題?APP
- 解決SQL Server中CHAR欄位空格問題SQLServer
- SQLServer利用HashKey計算列解決寬欄位查詢的效能問題SQLServer
- 解決吞吐效能問題時的思路
- redis中大key問題的解決思路Redis
- 解決mybatis用Map返回的欄位全變大寫的問題MyBatis
- 兩種解決powerdesigner概念模型轉物理模型報欄位重複錯誤的方法模型
- AIX問題解決思路AI
- [BUG反饋]模型增加欄位後field_sort欄位未更新模型
- 徹底解決windows標題欄字型變小問題Windows
- WPF頻繁更新UI卡頓問題UI
- windows7 頻繁當機的解決方法Windows
- Unity多單位戰鬥尋路問題的一種解決辦法Unity
- 指標問題的一點體會(區別 [指向指標的指標] 與 [指標的指標] .) (轉)指標
- 記一次記憶體溢位問題的排查、分析過程及解決思路記憶體溢位
- crontab導致的頻繁傳送郵件的問題
- Oledb操作Excel時欄位最大值255的問題解決方案Excel
- 怎麼給模型中的欄位增加自動完成規則模型
- oracle增加欄位帶預設值Oracle
- “策略依賴”一種設計的新思路
- 一種新的程式設計思路(中): (轉)程式設計
- 一種新的程式設計思路(上) (轉)程式設計
- 開發小程式被問到最頻繁的問題(上)
- TDengine3.0:解決高基數問題的時序資料庫設計思路資料庫
- 繁瑣問題不用怕,風變程式設計Python課程一步來解決程式設計Python
- 安卓開發中空指標問題 怎麼解決呢安卓指標
- 位運算解決多標籤問題【原創】
- 表欄位經常要增加的業務怎麼設計表結構
- Request 增加自定義欄位的方式