本文主要從目前互聯網行業數據的采集、存儲、同步以及任務調度與監控方面闡述了大數據數據倉庫建設的相關技術,還專門針對數據倉庫的維度建模技術做了詳細的介紹。感興趣的朋友不妨看看!
大數據數據倉庫建設方案
互聯網行業,除了數據量大之外,業務時效性要求也很高,甚至很多是要求實時的,另外,互聯網行業的業務變化非常快,不可能像傳統行業一樣,可以使用自頂向下的方法建立數據倉庫,一勞永逸,它要求新的業務很快能融入數據倉庫中來,老的下線的業務,能很方便的從現有的數據倉庫中下線。
整體架構:
數據倉庫的邏輯分層架構:
1.數據源
數據源,顧名思義就是數據的來源,互聯網公司的數據來源隨著公司的規模擴張而呈遞增趨勢,同時自不同的業務源,比如埋點采集,客戶上報等。
2.ODS層
數據倉庫源頭系統的數據表通常會原封不動地存儲一份,這稱為ODS(OperationDataStore)層,ODS層也經常會被稱為準備區(Stagingarea),它們是后續數據倉庫層(即基于Kimball維度建模生成的事實表和維度表層,以及基于這些事實表和明細表加工的匯總層數據)加工數據的來源,同時ODS層也存儲著歷史的增量數據或全量數據。
3.DW層
據倉庫明細層(DataWarehouseDetail,DWD)和數據倉庫匯總層(DataWarehouseSummary,DWS)是數據倉庫的主題內容。DWD和DWS層的數據是ODS層經過ETL清洗、轉換、加載生成的,而且它們通常都是基于Kimball的維度建模理論來構建的,并通過一致性維度和數據總線來保證各個子主題的維度一致性。
4.DWS層
應用層匯總層主要是將DWD和DWS的明細數據在hadoop平臺進行匯總,然后將產生的結果同步到DWS數據庫,提供給各個應用。
數據采集:
數據采集的任務就是把數據從各種數據源中采集和存儲到數據存儲上,期間有可能會做一些簡單的清洗。
比較常見的就是用戶行為數據的采集,先做sdk埋點,通過kafka實時采集到用戶的訪問數據,再用spark做簡單的清洗,存入hdfs作為數據倉庫的數據源之一。
數據存儲:
隨著公司的規模不斷擴張,產生的數據也越來越到,像一些大公司每天產生的數據量都在PB級別,傳統的數據庫已經不能滿足存儲要求,目前hdfs是大數據環境下數據倉庫/數據平臺最完美的數據存儲解決方案。
在離線計算方面,也就是對實時性要求不高的部分,Hive還是首當其沖的選擇,豐富的數據類型、內置函數;壓縮比非常高的ORC/PARQUET文件存儲格式;非常方便的SQL支持,使得Hive在基于結構化數據上的統計分析遠遠比MapReduce要高效的多,一句SQL可以完成的需求,開發MR可能需要上百行代碼;而在實時計算方面,flink是最優的選擇,不過目前僅支持java跟scala開發。
數據同步:
數據同步是指不同數據存儲系統之間要進行數據遷移,比如在hdfs上,大多業務和應用因為效率的原因不可以直接從HDFS上獲取數據,因此需要將hdfs上匯總后的數據同步至其他的存儲系統,比如mysql;sqoop可以做到這一點,但是Sqoop太過繁重,而且不管數據量大小,都需要啟動MapReduce來執行,而且需要Hadoop集群的每臺機器都能訪問業務數據庫;阿里開源的dataX是一個很好的解決方案。
維度建模
維度建模的基本概念
維度建模(dimensionalmodeling)是專門用于分析型數據庫、數據倉庫、數據集市建模的方法。這里牽扯到兩個基本的名詞:維度,事實。
1、維度
維度是維度建模的基礎和靈魂,在維度建模中,將度量成為事實,將環境描述為維度,維度是用于分析事實所需的多樣環境。例如,在分析交易過程中,可以通過買家、賣家、商品和時間等維度描述交易發生的環境。
2、事實
事實表作為數據倉庫維度建模的核心,緊緊圍繞著業務過程來設計,通過獲取描述業務過程的度量來表達業務過程,包含了引用的維度和與業務過程有關的度量。事實表中一條記錄所表達的業務細節被稱之為粒度。通常粒度可以通過兩種方式來表述:一種是維度屬性組合所表示的細節程度;一種是所表示的具體業務含義。
維度建模用到的專業術語
1、數據域
指面向業務分析,將業務過程活動維度進行抽象的集合。其中,業務過程可以概括為一個個不可分割的行為事件,在業務過程里可以定義指標;維度是指度量的環境,如買家下單事件,買件是維度。為保障整個體系的生命力,數據域是需要抽象提煉并且長期維護更新的,但不輕易變動。在劃分數據域時,既要能涵蓋所有業務需求,又能在新業務進入時無影響的包含已有的數據還要擴展新的數據域。
2、業務過程
值企業活動事件,如下單、支付、退款都是業務過程。業務過程是一個不可分割的行為事件。
3、時間周期
用來名明確數據統計的時間周期或者時間點,如自然月、最近30天,自然周等。
4、修飾類型
是對抽象詞的一種抽象劃分。修飾類型從屬某個數據域,
如日志域的訪問終端涵蓋無線端,PC端等修飾詞。
5、修飾詞
指除了統計維度以外指標的業務場景限定抽象。修飾詞隸屬于某一個修飾類型。
6、度量/原子指標
基于某一業務事件行為下的度量,是業務定義中不可在分割的指標,具有明確的業務含義名詞,如支付金額。
7、維度
上述已經做了介紹,不必重述
8、維度屬性
維度屬性隸屬于某一個維度,如地理維度里面的國家名稱,國建id,省份名稱等。
9、事實
上述已經做了介紹,不必重述
10、派生指標
派生指標=一個原子指標+多個修飾詞+時間周期。可以理解為對原子指標業務統計范圍的圈定。如原子指標:支付金額,最近一天海外買家支付金額為派生指標(最近一天為時間周期,海外為修飾詞,買家為維度)。
11、鉆取
鉆取是改變維的層次,變換分析的粒度。它包括向上鉆取(rollup)和向下鉆取(drilldown)。rollup是在某一維上將低層次的細節數據概括到高層次的匯總數據,或者減少維數;是指自動生成匯總行的分析方法。通過向導的方式,用戶可以定義分析因素的匯總行,例如對于各地區各年度的銷售情況,可以生成地區與年度的合計行,也可以生成地區或者年度的合計行。
而drilldown則相反,它從匯總數據深入到細節數據進行觀察或增加新維。例如,用戶分析“各地區、城市的銷售情況”時,可以對某一個城市的銷售額細分為各個年度的銷售額,對某一年度的銷售額,可以繼續細分為各個季度的銷售額。通過鉆取的功能,使用戶對數據能更深入了解,更容易發現問題,做出正確的決策。
維度建模的三種模式
1、星形模式
星形模式(StarSchema)是最常用的維度建模方式,可以看出,星形模式的維度建模由一個事實表和一組維表成,且具有以下特點:
a.維表只和事實表關聯,維表之間沒有關聯;
b.每個維表的主碼為單列,且該主碼放置在事實表中,作為兩邊連接的外碼;
c.以事實表為核心,維表圍繞核心呈星形分布;
2、雪花模式
雪花模式(SnowflakeSchema)是對星形模式的擴展,每個維表可繼續向外連接多個子維表。
星形模式中的維表相對雪花模式來說要大,而且不滿足規范化設計。雪花模型相當于將星形模式的大維表拆分成小維表,滿足了規范化設計。然而這種模式在實際應用中很少見,因為這樣做會導致開發難度增大,而數據冗余問題在數據倉庫里并不嚴重。
3、星座模式
星座模式(FactConstellationsSchema)也是星型模式的擴展。基于這種思想就有了星座模式:
前面介紹的兩種維度建模方法都是多維表對應單事實表,但在很多時候維度空間內的事實表不止一個,而一個維表也可能被多個事實表用到。在業務發展后期,絕大部分維度建模都采用的是星座模式。
4、三種模式對比
雪花模式是將星型模式的維表進一步劃分,使各維表均滿足規范化設計。而星座模式則是允許星形模式中出現多個事實表。
維度表設計
維度的設計過程就是確定維度屬性的過程,如何生成維度屬性,以及所生成維度屬性的優劣,決定了維度是用的方便性,成為數據倉庫易用性的關鍵。數據倉庫的能力直接與維度屬性的質量和深度成正比。
維度表基本設計方法
以商品維度為例對維度設計放發進行詳細說明。
第一步:選擇維度或者新建維度。作為維度建模的核心,在企業級數據倉庫中,必須保證維度的唯一性。以商品維度為例,有且只有一個維度定義。
第二步:確定主維表。此處的主維表一般是ODS表,直接與業務系統同步。
第三步:確定相關維表。數據倉庫是業務源系統的數據整合,不同業務系統或者同一業務系統中的表之間存在關聯性,根據業務系統的梳理,確定哪些表和主維表存在關聯關系,并選擇其中的某些表用于生成維度屬性。以商品維度為例,根據業務邏輯的梳理,可以得到商品與類目、sku、買家、賣家、店鋪等維度存在的關聯關系。
第四步:確定維度屬性。本步驟主要包括兩個階段,其中一個階段是從主維表中選擇維度屬性或生成新的維度屬性;第二個階段是從相關維表中選擇維度屬性或者生成新的維度屬性。以商品維度為例,從主維表和類目、sku、賣家、店鋪等相關維表中選擇維度屬性或者生成新的維度屬性。
確定維度屬性的幾點提示:
a、盡可能生成豐富的維度屬性;
b、盡可能多的給出包括一些富有意義的文字描述;
c、區分數值型屬性和事實;
d、盡可能沉淀出通用的維度屬性。
規范化的商品維度表現形式:
該模式屬于雪花模式。
注意:采用雪花模式,用戶在統計分析的過程中需要大量的關聯操作,是用復雜度高,同時查詢性能很差,如果數據量巨大,那就更差了;因此需要將維度的屬性層次合并到單個維度中,該操作稱之為反規范化,采用反規范化處理,方便,易用且性能好。
對于商品維度,如果采用反規范化,將表現為:
采用雪花模式,除了可以節約一部分存儲之外,對于OLAP系統來說沒有其他的效用。而現階段存儲的成本非常低。出于易用性和性能的考慮,維表一般設計成不規范化的。在實際應用中,幾乎總是使用維表的空間來換取簡明性和查詢性能。
緩慢變化維
數據倉庫的特征之一就是反應歷史變化,所以如何處理維度的變化是設計的工作之一。緩慢變化維的提出是因為在現實世界中,維度的屬性不是靜態的,它會隨著時間的流逝緩慢的變化,與數據增長較快的事實表相比,維度變化相對緩慢。
以下介紹幾種處理這種情況的三種方式:
第一種方式:重寫維度值。采用此種方式,不保留歷史數據(簡單來說就是更新相關的維度字段)。比如商品所屬類目與2019年5月20日由類目1變成類目2,采用第一種處理方式。
第二種方式:插入新的維度行。采用此種方式,保留歷史數據,維度值變化前后的事實和過去的維度關聯,緯度值變化前后的事實和當前的維度值關聯。同上面的例子采用第二種方式。
第三種方式:添加維度列。采用第二種方式不能將變化前后記錄的事實歸一為變化前的維度或者歸一為變化后的維度。比如根據業務需求,需要將5月份的交易金額全部統計到類目2上,采用第二種方式無法實現。針對此問題,采用第三種處理方式,保留歷史數據,可以使用任何一個屬性列。同上面的例子,采用第三種方式。對于采用哪種方式解決緩慢變化維,只能根據業務需求去選擇。
事實表設計
事實表作為數據倉庫維度建模的核心,緊緊圍繞著業務過程來設計,通過獲取描述業務過程的度量來表達業務過程,包含了引用的維度和業務過程有關的度量。相對維表來說,事實表要細長的多,行的增加速度也比維表快很多。事實表分為三種類型:事務事實表,周期快照事實表,累計快照事實表。
1、事務事實表
用來描述業務過程,跟蹤時間或者空間上某點的度量事件,保存的是最原子的數據,也成為“原子事實表”。
2、周期快照事實表
以具有規律的,可預見的時間間隔記錄事實如每天、每月、每年等。
3、累計快照事實表
用來表述開始和結束之間的關鍵步驟事件,覆蓋整個生命周期,通常具有多個時間字段來記錄關鍵時間點,當過程隨著時間變化時,記錄也會跟著修改。
本文主要討論事務事實表,其他的兩種會在以后的文章中說明。
事實表設計原則
a、盡可能包括所有業務過程相關的事實
b、只選擇與業務過程相關的事實
c、分解不可加事實為可加的組件
d、選擇維度和事實之前必須先聲明粒度
e、在同一個事實表中不可以有多重不同粒度的事實
f、事實的單位要保持一致
g、對事實的null值要處理
h、使用退化維提高事實表的易用性
事務事實表的基本設計方法
任何類型的事件都可以被理解成一種事務。比如交易過程中的創建訂單,買家付款,物流中的發貨,簽收,付款等。事務事實表針對這些過程創建的一種事實表。下面店鋪交易事務為例,闡述事務事實表的一般設計過程。
1、選擇業務過程
交易的過程分為:創建訂單、買家付款、賣家發貨、買家確認收貨,即下單、支付、發貨和成功完結四個業務過程。
Kimball維度建模理論認為,為了便于進行獨立的分析研究,應該為每一個業務過程建立一個事實表。
2、確定粒度
業務過程選定之后,就要對每個業務過程確定一個粒度,即確定事實表每一行所表達的細節層次。需要為四個業務過程確定粒度,其中下單、支付和成功完結選擇交易子訂單粒度,即每個子訂單為事實表的一行,買家收貨的粒度為物流單。
3、確定維度
選定好業務過程并且確定粒度后,就可以確定維度信息了。在店鋪交易事實表設計過程中,按照經常用于統計分析的場景,確定維度包含:買家、賣家、商品、商品類目、發貨地區、收貨地址、父訂單維度以及雜項維度。
4、確定事實
作為過程度量的核心,事實表應該包含與其描述過程有關的所有事實。以店鋪交易事實表為例,選定三個業務過程:下單、支付、成功完結,不同的業務過程有不同的事實。比如在下單業務過程中,需要包含下單金額、下單數量、下單分攤金額;
在確定維度時,包含了買賣家維度,商品維度,類目維度,收發貨等。Kimball維度建模理論建議在事實表中只保留這個維度表的外鍵,但是在實際的應用中,可以將店鋪名稱、商品類型、商品屬性、類目屬性冗余到事實表中,提高對事實表的過濾查詢,減少表之間的關聯次數,加快查詢速度,該操作稱之為退化維。
經過以上的操作,基本完成了店鋪交易事務事實表的設計工作。
元數據管理
元數據通常定義為”關于數據的數據”,在數據倉庫中是定義和描述DW/BI系統的結構,操作和內容的所有信息。元數據貫穿了數據倉庫的整個生命周期,使用元數據驅動數據倉庫的開發,使數據倉庫自動化,可視化。
按照不同的用途將元數據分為兩類:技術元數據和業務元數據。
技術元數據指描述系統中技術細節相關的概念、關系和規則的數據,包括對數據結構、數據處理方面的描述,以及數據倉庫、ETL、前端展現等技術細節方面的信息。常見的技術元數據有:
1、分布式計算存儲元數據,如表、列、分區等信息。記錄表的表名、分區信息、責任人信息、文件大小、表類型、生命周期、列的字段、字段類型、字段備注等。
2、分布式計算系統運行元數據,集群上所有任務的運行信息;類似hive的運行日志,包括作業類型、實例名稱、輸入輸出、運行參數、運行時間等。
3、調度任務中的調度信息,包括輸入輸出字段、依賴類型、依賴關系等。
4、數據質量跟運維相關元數據,如任務監控、運維報警、數據質量、故障等。
業務元數據指從業務角度描述業務領域相關的概念、關系和規則的數據,包括業務術語和業務規則等信息。常用的技術元數據有:
如維度和屬性、業務過程、指標等規范化定義,用于更好的管理和使用數據。
數據應用元數據,數據報表、數據產品等配置和運行元數據。
注意:
關于元數據的建設這塊想要做好,非常復雜,我覺得目前對我們公司來說是價值小于成本,因此我們暫不考慮這塊。
任務調度與監控
在數據倉庫建設中,有各種各樣非常多的程序和任務,比如:數據采集任務、數據同步任務、數據清洗任務、數據分析任務等;這些任務除了定時調度,還存在非常復雜的任務依賴關系,比如:數據分析任務必須等相應的數據采集任務完成后才能開始;數據同步任務需要等數據分析任務完成后才能開始;這就需要一個非常完善的任務調度與監控系統,它作為數據倉庫的中樞,負責調度和監控所有任務的分配與運行。
具體采用哪種工具,請根據自己公司的本身現狀去做定奪。
綜上所述,數據倉庫建設是一個綜合性技術。若企業的業務復雜,更是需要專門團隊與業務方共同合作來完成。因此,一個優秀的數據倉庫建模團隊既要有堅實的數據倉庫建模技術,還要有對現實業務清晰、透徹的理解。此外,架構并不是技術越多越新越好,而是在可以滿足需求的情況下,越簡單越穩定越好。
責任編輯:Ct
評論
查看更多