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