本書是阿里巴巴分享描述了按照其公司業務的一些大數據技術實施的方案,是阿里巴巴對大數據的認知。其中也有很多值得學習的資料。
本書分為數據技術篇、數據模型篇、數據管理篇、數據應用篇
1、數據技術篇涉及阿里面對各種數據使用需求時的技術應對方案,其中包括日志采集、數據同步、離線數據開發及實時技術、數據服務、數據挖掘等大數據在技術平臺上的應用。
2、數據模型篇涉及數據在平臺架構的基礎上,合理組織和儲存數據。
3、數據管理篇涉及對元數據的管理,數據計算和存儲成本管理、數據質量的管理
4、數據應用涉及阿里巴巴的數據應用平臺(生意參謀,內部應用)
本篇文章是基于數據模型的知識整理:
面對數據規模的快速擴大,如何有序、有結構的的分類組織和存儲數據是我們面臨的極大挑戰。
數據模型解決面對業務需求,如何有效的組織和存儲數據的問題,其強調數據的性能,成本、效率、質量。(這4哥們都是相輔相成的。如何達到四者的平衡是數據模型的研究對象)
典型的數據倉庫模型:
1、ER模型
出發點是對數據的整合,對業務需求的抽象和總結,整理出描述分析需求的主題。然后根據分析主題構建適合的高層模型(描述主題和主題間關系的業務概括)、中層模型(細化高層模型的數據項)、物理模型(基于中層模型的基礎上,對數據進行物理存儲)
ER模型最典型的應用代表為金融業務的10大主題
2、維度模型
維度建模從分析決策的需求出發構建模型,把分析需求拆解為維度和事實,然后針對維度進行數據建模
3、data vault模型
出發點也是為了數據整合,但加入了審計的思想,要保留數據的歷史性質,講求數據的可塑性。(對主維度也進行了維度化,通過關系id找回數據記錄)
4、anchor模型
把data vault模型更一步極致化,基本把所有數據記錄成key-value化。
(個人理解:ER模型和維度模型都是專注與對數據的整合和規范,ER模型從需求分析出發規范數據從查閱層面的儲存,維度模型更多的關心是數據倉庫內部的一種數據存儲機制。兩者其實互相不沖突,可以在數據倉庫實施中使用維度模型,在數據模型設計、數據集市實施時使用ER模型整合數據。阿里巴巴的數據模型也是使用維度模型為核型理念進行模型方法論,在搭建數據整合及管理體系(onedata)時,使用的思想也符合ER模型的設計思想)
阿里巴巴數據模型層次為:
1、ODS操作數據層:數據同步、清洗、保存歷史
2、CDM公共維度模型層:
?? ? 1)、DWD明細數據層:面向業務過程建模,把維度退化到事實表中(減少事實表和維表的關聯,提高明細數據表的易用性);生成事務型、周期性快照、累計快照的事實表
? ? 2)、DWS匯總數據層:面向分析主題建模,使用明細數據寬表,復用關聯計算,減少數據掃描;統一口徑,實現數據命名和算法的規范化;構建一致性的維度,統一數據的計算口徑;
3、ADS應用數據層:存放個性化(不公用,復雜性)的統計指標;基于個性化定制報表的應用
構建數據倉庫的基本原則:
1、高內聚和低耦合:將業務相近或者相關、粒度相同的數據設計為一個邏輯或者物理模型;按照使用概率將數據進行分開儲存
2、核心模型和擴展模型分離:核心模型包括的字段支持最常用的業務,保持核心模型的簡潔
3、公共處理邏輯下沉:對公用處理邏輯進行提早下沉。
4、成本和性能的平衡:適當的冗余能換取查詢性能、不適宜過度冗余浪費儲存成本
5、數據可回滾:支持數據可以回滾
6、一致性:統一企業數據的口徑
7、命名清晰、可理解
阿里巴巴數據整合及管理體系(one data)
構建數據模型,最重要的還是有一個統一、規范、可共享的體系。全公司以統一的方式、理解、分類、數據,才能有更完善的可用的數據模型。
搭建數據整合管理體系的核心是:從業務架構設計到模型和設計、從數據研發到數據服務,做到數據可管理、可追溯、可規避重復建設。
阿里巴巴構建的體系
1、業務板塊
根據業務屬性進行板塊劃分,阿里巴巴業務板塊之間的指標或業務重疊性比較小。? ??
2、規范定義
對數據模型建設中的數據域、業務過程、維度、度量、修飾類型、時間、指標等進行一一定義。
數據域:指面向業務分析,將業務過程或者維度進行抽象的集合。
業務過程:指企業的業務活動事件
時間周期:用來明確數據統計的時間范圍或者時間點
修飾類型:修飾類型屬于某個業務域,用于描述修飾詞
修飾詞:除了維度意外用于具象指標的定義
度量、原子指標:基于某一業務事件行為下的度量。不可再拆分
維度:維度是度量的環境
維度屬性:用于描述維度
派生指標:派生指標=原子指標+多個修飾詞+時間周期
指標體系:阿里巴巴有一套成熟的指標命名規范
模型實施過程
業務調研和需求分析做得是否充分直接決定了數據倉庫建設是否成功
實施工作流包括:1、數據調研(包括業務調研與需求調研,簡單理解就是分析現有的業務流程、分析需求、行業要求)2、架構設計(數據區域劃分和構建總線矩陣,根據分析需求做業務板塊的劃分,構建指標維度關系表,清晰分析過程)
維度設計
確定維度屬性及維度之間的關聯關系,找到業務源系統中的主維度表,然后梳理各系統之間的維度關系和維度屬性
維度處理的主要原則:
1、盡可能生成豐富的維度屬性
2、盡可能多的給出包括一些富有意義的文字屬性
3、區分數值型屬性和事實
4、盡量沉淀出通用的維度屬性
維度擁有層次結構,當維度有鉆取功能時,可以設計反規范化的維度表進行儲存(分析系統的主要目的是用于數據的分析和統計,如何更方便用戶進行統計分析決定了分析系統的優劣)維度采用雪花模型進行設計在統計分析時需要大量的關聯操作,使用復雜性高,查詢性能差。采用反規范化的設計則方便易用且性能較好。
一致性維度
? ? 數據倉庫總線架構的重要基石之一就是一致性維度。在數據倉庫中使用多個指標進行交互是要注意維度是否完全一致。
維度整合
????垂直整合:將多個源系統的維度數據整合到一個維度表
????水平整合:使用關聯鍵進行維度組合(數據沖突的情況,建議使用)
維度拆分:
? ? 拆分原則:擴展性、效能、易用性
? ? 水平拆分:按照維度的不同分類或維度的業務關聯程度作為拆分依據,可將維度進行水平拆分
? ? 垂直拆分:當有維度屬性產出時間有差異,熱度高度不同等,可以構建垂直拆分
????歷史歸檔:
????????????1、同前臺歸檔策略,在數據倉庫中實現前臺歸檔算法
? ? ? ? ? ? 2、同前臺歸檔策略,但采用數據庫變更日志的方式
? ? ? ? ? ? 3、數據倉庫自定義歸檔策略。
維度變化:
? ? 緩慢變化維度:
? ? ? ? 1、插入新的維度行,對新增、修改的維度進行新記錄的形式進行保存。
? ? ? ? 2、添加維度列,在維度設計中增加一列保存維度的變化情況,優點是方便把維度歸于舊值或新值計算
? ? ????3、快照維度:直接快照記錄每天的維度情況。優點:簡單有效,開發和維護成本低;使用方便,理解性好。缺點:浪費存儲
? ? 極限儲存:做緩慢變化時的歷史拉鏈一般用分區來記錄start_dt,end_dt。隨著時間的遷移,分區數量會越來越多。使用極限儲存的辦法是每月月初重新開始做歷史拉鏈表;每月1號做全量的數據,月內剩下的每個日子存儲上一天的變化情況。
? ? 微型維度:把維度進行組合,對組合值進行枚舉以建立維度。
特殊維度:
? ? 遞歸層次:當維度擁有層次等級,可以建立遞歸的層次結構建立維度。
? ? 行為維度:? 通過后臺算法計算得到的一些維度(如賣家主營業務的維度),按照行為維度的計算頻率,邏輯復雜性確定維度的設計方式(冗余至現有維度或者單獨加工生成維度)
????多值維度:同一個事實表需要多次調用同一個維度。(1、可以降低事實表粒度,把事實分攤到維度的方式;2、事實表采用多維度;3、橋接表的形式記錄維度(使用橋接表記錄事實表中使用了的維度,并在橋接表中記錄對應的維度信息))
????雜項維度:事實表中有些字段只是含有某種說明性需求,存放在事實表,或者生成維度保存都不妥當,則可以建立雜項維度,把這些字段建立到一個維度表中,通過外鍵進行關聯。
事實表設計:
? ? 事實表類型:1、事務事實表;2、周期快照事實表;3、累計快照事實表;
事實表設計原則:
? ? 1、盡可能包含所有與業務過程相關的事實:
????2、選擇對應的業務過程建立事實表,并確保事實只與業務過程相關;
? ? 3、對于可加性事實進行分解(比如訂單優惠率分解為訂單原價金額,訂單優惠金額)
? ? 4、在選擇維度和事實之前必須先聲明粒度
? ? 5、在同一個事實表中不能有多種不同的粒度
? ? 6、保持事實單位的一致性
? ? 7、處理事實數據中的null值
? ? 8、退化維度到事實表,提高事實表的易用性
????9、父子事實的結構處理進行父度量分攤到子度量的操作
事實表設計實施方法:
? ? 1、選擇業務過程及確定事實表類型(針對需要分析的需求,從業務流中對業務過程進行篩選)
? ? 2、聲明粒度(精確定義事實表的每一行的業務含義,確定主鍵,粒度應該選擇最細力度的級別,方便滿足各項需求)
? ? 3、確定維度(選擇能夠清楚描述業務過程所處的環境的維度信息)
? ? 4、確定事實(選擇與業務過程有關的所有事實,對事實區分可加性,半可加性,非可加性,)
? ? 6、冗余維度(對事實表進行維度退化處理)
事務事實表:
????單事務事實表:單個業務過程使用單個事實表進行記錄
????多事務事實表:把多個業務過程記錄到同一張事實表中
? ? 對比:多事務事實表能有效減少計算儲存成本,但會造成度量數據的大量冗余,并增加下游業務使用的理解難度。并且有一定的使用要求(同一個粒度,一致維度)
? ? 設計原則:1、業務過程包含完整性;2、維度度量數據的一致性(確保度量單位統一,數據分攤準確);3、事實可加性需要對度量進行分攤
周期快照表:
? ? 對確定的時間間隔內進行度量的計算,這樣很容易得出實體度量值,而不需要聚集長期的事務歷史
特性:
? ? 1、使用快照采樣狀態(以預定的間隔采樣狀態度量)
? ? 2、快照粒度,計算快照的粒度范圍
? ? 3、密度和稀疏性,(周期快照表需要定時記錄數據)
? ? 4、半可加性(注意度量的匯總)
? ? 事務與快照應成對設計,設計事務數據的時候應設計快照數據。
? ? 可在快照事實表中多放置事實狀態,避免事實表的重復應用
? ? 考慮多周期的事實度量
累積快照表:
????用于計算保存發生事件的時間隔間的需求。
特性:
? ? 1、數據不斷更新(數據必須進行每天不斷更新,記錄每個業務日期的時間,并保證更新正確)
? ? 2、多業務過程日期(一個業務流里面記錄多個業務過程)
物理實現:
? ? 1、全量表形式,每天的分區存儲昨天的全量數據和當天的增量數據合并結果。使用全量數據較少的情況
? ? 2、全量表變化,分區保存最近產生N天的數據,其余數據做歸檔。需要保存多天的數據,數據量較大,存儲消耗較大
? ? 3、以業務實體的結束時間分區,每天的分區存放當天結束的數據。并設計一個分區放置歸檔數據存放截至當前未結束的數據。
無事實的事實表
? ? 1、記錄一些事件類的事實,如日志信息;2、記錄條件,范圍或資格類的信息
公共匯總層:
? ? 聚集型事實表,通過對維度的匯總實現初步計算,能有效減少數據的查詢性能。
原則:
? ? 一致性:確保聚集表中的維度和度量與原始模型的維度和度量是一致的
? ? 避免單一表設計:為減少用戶的誤用統計口徑的幾率,每列應為單一的數據應用。(篩選條件越復雜人們誤用率越大)
? ? 聚集粒度可不同:聚集可按照日常最基本的使用進行匯總
? ? 數據的公用性:盡量考慮多個數據應用場景,把需要經常分析的維度都考慮進去
? ? 不跨數據域:數據域是在較高層次上對數據進行分類聚集的抽象,數據聚集不需要跨數據域進行匯總。
? ? 區分統計周期:在表的命名上區分數據的統計周期