維度表技術常見:增加列,維度子集,角色扮演維度,層次維度,退化維度,雜項維度,維度合併,分段維度等基本維度表技術。
一.增加列
事實表和維度表上增加列。
hive上增加列,慎用alter table。原因老版本的hive對orc格式表的模式修改,尤其是增加列的支援存在很多問題。
jira上說2.0.0修復了orc表模式修改問題。
空值處理:<=>
二.維度子集
有些需求不需要最細節的資料。此時事實資料需要關聯特定的維度,這些特定維度包含在從細節維度選擇的行中,所以叫維度子集。
細節維度和維度子集具有相同的屬性或內容,具有一致性。
1.建立包含屬性子集的子維度
比如需要上鑽到子維度。
2.建立包含行子集的子維度
當兩個維度處於同一細節粒度,但是其中乙個僅僅是行的子集,會產生另外一種一致性維度構造子集。
某些版本的hive中,對orc表使用overwrite會出錯,為保持兼用性,使用truncate 。
3.使用檢視實現維度子集
實現維度子集,這種方式兩個主要問題:一需要額外的儲存空間,因為新建立的子維度是物理表;二是存在資料不一致的潛在風險。
為解決上述問題,常用做法是在基本維度上建立檢視生成子維度。
優點:實現簡單,不需要修改原來指令碼的邏輯;不占用儲存空間,因為檢視不真正儲存資料;消除資料不一致的可能。
缺點:當基本維度和子維度表資料量相差懸殊,效能比物理表差很多;如果定義檢視查詢,並且檢視很多,可能對元資料儲存系統造成壓力,嚴重影響查詢效能。
三.角色扮演維度
單個物理維度可以被事實表多次引用,每次引用連線邏輯上存在差異的角色維度。例如,事實表可以有多個日期,每個日期通過外來鍵引用不同的日期維度,原則上每個外來鍵表示不同維度檢視,這樣引用具有不同的含義。這些不同的維度檢視具有唯一的**鍵列名,被稱為角色,相關維度被稱為角色扮演維度。
hive中的order by,sort by ,distribute by,cluster by子句都用於對查詢結果進行排序,處理方式不一樣。
hive中order by跟傳統的sql語言的order by作用一樣的,會對查詢的結果做一次全域性排序,如果使用order by ,所有資料都會傳送到同乙個reduce進行處理。不管多少map,也不管檔案有多少block只會起動乙個reduce,因為多個reducer無法保證全域性有序。對於大量資料這將會消耗很長時間去執行。
sort by 在每個reducer端都會排序,也就保證了區域性有序。
ditribute by 控制map輸出reducer中是如何規劃。
假設有一張名為store 的商店表,mid是這個商店所屬的商戶,money是這個商戶的盈利,name商店名稱
語句:select mid,money.name from store distribute by mid sort by mid asc,money asc;
所有mid相同資料都會被送到同乙個reducer處理,這是因為指定了distribute by mid,這樣話就可以統計每個商戶中各個商店盈利排序。肯定全域性有序。因為相同的商戶會放到同乙個reducer去處理。
cluster by 是distribute by和sort by相結合,但是排序只能是公升序(至少hive 1.1.0是這樣)
四.層次維度
經常使用grouping__id 二進位制序列,rollup,collect_set,concat_ws等函式。
層次關係方法:固定深度層次進行分組和鑽取查詢,遞迴層次結構資料裝載、展開與平面化,多路徑層次和參差不齊處理
五.退化維度
除了業務主鍵外沒有其他內容的維度表。
六.雜項維度
包含資料具有很少可能值的維度。有時與其為每個標誌或屬性定義不同的維度,不如建立單獨的講不同維度合併到一起的雜項維度。
七.維度合併
如果幾個相關維度的基數都很小,或者具有多個公共屬性時,可以考慮合併。
八.分段維度
包含連續的分段度量值,通常用作客戶維度的行為標記時間序列,分析客戶行為。
參考《hadoop構建資料倉儲實踐》
資料倉儲系列 簡介 李孟 新浪部落格
打算做資料倉儲系列,可能會時間上跨度很大,畢竟現在專案比較繁忙。一.資料倉儲定義 資料倉儲,英文名稱為data warehouse,可簡寫為dw或dwh。資料倉儲,是為企業所有級別的決策制定過程,提供所有型別資料支援的戰略集合。它出於分析性報告和決策支援目的而建立。為需要業務智慧型的企業,提供指導業...
資料倉儲系列 建模 李孟 新浪部落格
一.資料倉儲的資料模型 1.系統記錄域 system of record 這部分是主要的資料倉儲業務資料儲存區,資料模型在這裡保證了資料的一致性。2.內部管理域 housekeeping 這部分主要儲存資料倉儲用於內部管理的元資料,資料模型在這裡能夠幫助進行統一的元資料的管理。3.彙總域 summa...
資料倉儲 維度表
維度建模將業務抽象成事實和維度兩個概念。維度建模的核心是對齊維度。所以維度表的一致性是很重要的!維度表是如何進行處理的呢?穩定的維度表。比如 時間維度表 這種維度表的屬性是穩定的,不需要做天的全量快照資料,直接匯入一次即可 緩慢漸變維 維度會隨著時間發生緩慢的變化。比如 使用者維度表 資料量很大,但...