一種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
;
相關文章
- [20231020]增加欄位的問題.txt
- MyBatis 解決欄位名不一致的問題MyBatis
- [20201109]11.2.0.4增加欄位與預設值問題.txt
- 巧用 Base62 解決欄位太短的問題
- Shiro效能優化:解決Session頻繁讀寫問題優化Session
- 多維分析模型頻繁變動的解決方案有哪些?模型
- Redigo: ScanStruct()匿名指標欄位的解析GoStruct指標
- [BUG反饋]模型增加欄位BUG模型
- 兩種解決powerdesigner概念模型轉物理模型報欄位重複錯誤的方法模型
- 小程式容器(沙箱)是否可以解決App頻繁發版問題?APP
- [React]setState呼叫過於頻繁的問題React
- redis中大key問題的解決思路Redis
- 解決吞吐效能問題時的思路
- 解決mybatis用Map返回的欄位全變大寫的問題MyBatis
- Bigkey問題的解決思路與方式探索
- [BUG反饋]模型增加欄位後field_sort欄位未更新模型
- 記一次記憶體溢位問題的排查、分析過程及解決思路記憶體溢位
- 繁瑣問題不用怕,風變程式設計Python課程一步來解決程式設計Python
- TDengine3.0:解決高基數問題的時序資料庫設計思路資料庫
- oracle增加欄位帶預設值Oracle
- 開發小程式被問到最頻繁的問題(上)
- 怎麼給模型中的欄位增加自動完成規則模型
- 從“股票問題”談動態規劃問題的解決思路動態規劃
- 位運算解決多標籤問題【原創】
- [提問交流]建立模型,新增屬性,欄位型別如何設定2位小數的欄位型別模型型別
- WPF頻繁更新UI卡頓問題UI
- hive的一些問題Hive
- 巢狀ScrollView問題解決思路巢狀View
- Request 增加自定義欄位的方式
- 解決hive資料庫 插入資料很慢的問題Hive資料庫
- 幽默:程式設計中困難的不是解決問題,而是確定要解決的問題 - Paul程式設計
- 使用 class-transformer 解決欄位名不一致轉化問題ORM
- Flutter Future 回撥地獄的一種解決思路Flutter
- 像程式設計師一樣思考——提高解決問題的能力程式設計師
- spingboot使用@Resource注入靜態變數報空指標的問題解決boot變數指標
- 表欄位經常要增加的業務怎麼設計表結構
- 涵蓋表內欄位設計以及應該避免的常見問題等
- 解決問題的能力 > 10倍程式設計師程式設計師