數(shù)據(jù)倉(cāng)庫(kù)介紹
數(shù)據(jù)倉(cāng)庫(kù)
1. ?學(xué)習(xí)目標(biāo)
理解OLTP和OLAP的區(qū)別
理解數(shù)據(jù)倉(cāng)庫(kù)的特點(diǎn)
理解數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)架構(gòu)
理解指標(biāo)與維度
理解下鉆與上卷
理解事實(shí)表與維度表
理解星型模型和雪花模型
理解緩慢漸變維
掌握數(shù)據(jù)倉(cāng)庫(kù)的分層方法
2. ?數(shù)據(jù)倉(cāng)庫(kù)介紹
2.1 ?數(shù)據(jù)倉(cāng)庫(kù)概念
數(shù)據(jù)倉(cāng)庫(kù)概念創(chuàng)始人在《建立數(shù)據(jù)倉(cāng)庫(kù)》一書中對(duì)數(shù)據(jù)倉(cāng)庫(kù)的定義是:數(shù)據(jù)倉(cāng)庫(kù)(Data Warehouse)是一個(gè)面向主題的(Subject Oriented)、數(shù)據(jù)集成的(Integrated)、相對(duì)穩(wěn)定(非易失)的(Non-Volatile)、反映歷史變化(時(shí)變)(Time Variant)的數(shù)據(jù)集合,用于支持管理決策(Decision Making Support)。
數(shù)據(jù)倉(cāng)庫(kù)是決策支持系統(tǒng)(dss)的結(jié)構(gòu)化數(shù)據(jù)環(huán)境,如下圖,決策支持系統(tǒng)基于數(shù)據(jù)倉(cāng)庫(kù)進(jìn)行聯(lián)機(jī)分析處理 ( OLAP ) 。常用的技術(shù)有,HDFS、HBase、Hive、SparkSql等。
?
?
1.??數(shù)據(jù)采集, 將源數(shù)據(jù)采集到數(shù)據(jù)倉(cāng)庫(kù)
2.??基于數(shù)據(jù)倉(cāng)庫(kù)進(jìn)行數(shù)據(jù)分析
3.??生成報(bào)表
2.2 ?OLTP和OLAP區(qū)別
OLTP(On-Line Transaction?Processing)即聯(lián)機(jī)事務(wù)處理,也稱為面向交易的處理過(guò)程,其基本特征是前臺(tái)接收的用戶數(shù)據(jù)可以立即傳送到計(jì)算中心進(jìn)行處理,并在很短的時(shí)間內(nèi)給出處理結(jié)果,是對(duì)用戶操作快速響應(yīng)的方式之一,比如ERP系統(tǒng),CRM系統(tǒng),互聯(lián)網(wǎng)電商系統(tǒng)等,這類系統(tǒng)的特點(diǎn)是事務(wù)操作頻繁,數(shù)據(jù)量小。
OLAP(On-Line Analytical Processing)即聯(lián)機(jī)分析處理,有時(shí)也稱為決策支持系統(tǒng)(DSS),支持復(fù)雜的分析操作,側(cè)重決策支持,并且提供直觀易懂的查詢結(jié)果。這類系統(tǒng)的特點(diǎn)是沒有事務(wù)性操作,主要是查詢操作,數(shù)據(jù)量大。
詳細(xì)的區(qū)別如下:
對(duì)比項(xiàng)目
OLTP
OLAP
功能
面向交易的事務(wù)處理
面向分析查詢
設(shè)計(jì)
面向業(yè)務(wù)
面向主題
數(shù)據(jù)
最新數(shù)據(jù),二維數(shù)據(jù)
歷史數(shù)據(jù),多維數(shù)據(jù)
存儲(chǔ)
M,G ( 存儲(chǔ)單位 )
T、P、E
響應(yīng)時(shí)間
快
慢
用戶
業(yè)務(wù)操作人員
管理決策人員
?
2.3 ?數(shù)據(jù)倉(cāng)庫(kù)的特點(diǎn)
2.3.1 ?面向主題
理解主題的概念可以和數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)對(duì)比理解。
數(shù)據(jù)庫(kù)應(yīng)用是以業(yè)務(wù)流程來(lái)劃分應(yīng)用程序和數(shù)據(jù)庫(kù),比如ERP(Ent*erp*rise Resource Planning)包括:進(jìn)銷存系統(tǒng)、人力資源管理系統(tǒng)、財(cái)務(wù)管理系統(tǒng)、倉(cāng)庫(kù)管理系統(tǒng)等,進(jìn)銷存系統(tǒng)管理了進(jìn)貨、銷售、存儲(chǔ)等業(yè)務(wù)流程,人力資源系統(tǒng)管理了員工的信息、待遇等相關(guān)信息。
數(shù)據(jù)倉(cāng)庫(kù)是以數(shù)據(jù)分析需求來(lái)對(duì)數(shù)據(jù)進(jìn)行組織劃分若干主題,比如銷售主題、員工主題、產(chǎn)品主題,主題是一個(gè)抽象的概念,可以理解為相關(guān)數(shù)據(jù)的分類、目錄等,通過(guò)銷售主題可以進(jìn)行銷售相關(guān)的分析,如年度銷量排行、月度訂單量統(tǒng)計(jì)等。
總之,主題是以分析需求為導(dǎo)向來(lái)組織數(shù)據(jù),數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)是以業(yè)務(wù)流程為導(dǎo)向來(lái)組織數(shù)據(jù),注意:主題中的數(shù)據(jù)是跨應(yīng)用系統(tǒng)的。
2.3.2 ?數(shù)據(jù)集成
主題中的數(shù)據(jù)是跨應(yīng)用系統(tǒng)的,也就是說(shuō)數(shù)據(jù)是分散在各各應(yīng)用系統(tǒng),比如銷售數(shù)據(jù)在進(jìn)銷存系統(tǒng)中有,財(cái)務(wù)系統(tǒng)中也有,為了進(jìn)行銷售分析需要將銷售數(shù)據(jù)進(jìn)行集成,集成在銷售主題中,就可以從銷售主題來(lái)進(jìn)行數(shù)據(jù)分析。
2.3.3 ?非易失
數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)是根據(jù)業(yè)務(wù)需求進(jìn)行數(shù)據(jù)處理和存儲(chǔ),而數(shù)據(jù)倉(cāng)庫(kù)是根據(jù)數(shù)據(jù)分析需求來(lái)進(jìn)行數(shù)據(jù)存儲(chǔ),數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)用于查詢和分析,為了保證數(shù)據(jù)分析的準(zhǔn)確性和穩(wěn)定性,數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)一般是很少更新的,會(huì)將歷史快照保存下來(lái)。
2.3.4 ?時(shí)變
數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)存儲(chǔ)的是歷史數(shù)據(jù),歷史數(shù)據(jù)是隨時(shí)間變化的,比如歷年的銷售數(shù)據(jù)都會(huì)存儲(chǔ)到數(shù)據(jù)倉(cāng)庫(kù)中,即使數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)很少更新,但也不能保證沒有變化,如下需求:
1)會(huì)不斷添加新數(shù)據(jù)
每年的銷售數(shù)據(jù)會(huì)逐漸添加到數(shù)據(jù)倉(cāng)庫(kù)。
2)刪除過(guò)期數(shù)據(jù)
數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)會(huì)保存很長(zhǎng)的時(shí)間(5--10年),但也有過(guò)期時(shí)間,到過(guò)期 時(shí)間會(huì)刪除過(guò)期 數(shù)據(jù)。
3)對(duì)歷史明細(xì)數(shù)據(jù)進(jìn)行聚合
為了方便數(shù)據(jù)分析,根據(jù)分析需求會(huì)將比較細(xì)粒度的數(shù)據(jù)進(jìn)行數(shù)據(jù)聚合存儲(chǔ),這也是時(shí)變的一種表現(xiàn),比如:為了方便統(tǒng)計(jì)年度銷售額會(huì)將銷售記錄按月進(jìn)行統(tǒng)計(jì),統(tǒng)計(jì)年度銷售額時(shí)只需要針對(duì)月度銷售結(jié)果進(jìn)行統(tǒng)計(jì)即可。
3. ?數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)架構(gòu)
3.1 ?系統(tǒng)結(jié)構(gòu)圖
數(shù)據(jù)倉(cāng)庫(kù)提供企業(yè)決策分析的數(shù)據(jù)環(huán)境,數(shù)據(jù)從哪里獲?。繑?shù)據(jù)如何存儲(chǔ)到數(shù)據(jù)倉(cāng)庫(kù)?決策分析系統(tǒng)如何從數(shù)據(jù)倉(cāng)庫(kù)獲取數(shù)據(jù)進(jìn)行分析?我們可以把數(shù)據(jù)從獲取、存儲(chǔ)到數(shù)據(jù)倉(cāng)庫(kù)、數(shù)據(jù)分析的所有部分稱為一個(gè)數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng),本節(jié)講解數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)的工作流程和系統(tǒng)架構(gòu)。
?
下圖是數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)的結(jié)構(gòu)圖:
?
?
以下系統(tǒng)各部分的執(zhí)行流程是:
1、確定分析所依賴的源數(shù)據(jù)。
2、通過(guò)ETL將源數(shù)據(jù)采集到數(shù)據(jù)倉(cāng)庫(kù)。
3、數(shù)據(jù)按照數(shù)據(jù)倉(cāng)庫(kù)提供的主題結(jié)構(gòu)進(jìn)行存儲(chǔ)。
4、根據(jù)各部門的業(yè)務(wù)分析要求創(chuàng)建數(shù)據(jù)集市(數(shù)據(jù)倉(cāng)庫(kù)的子集)。
5、決策分析、報(bào)表等應(yīng)用系統(tǒng)從數(shù)據(jù)倉(cāng)庫(kù)查詢數(shù)據(jù)、分析數(shù)據(jù)。
6、用戶通過(guò)應(yīng)用系統(tǒng)查詢分析結(jié)果、報(bào)表。
?
3.2 ?源數(shù)據(jù)
源數(shù)據(jù)是指用于分析的原始數(shù)據(jù),這一步主要是根據(jù)分析需求確定源數(shù)據(jù),這個(gè)數(shù)據(jù)分布在內(nèi)部系統(tǒng)和外部分系統(tǒng)中,內(nèi)部數(shù)據(jù)主要是企業(yè)ERP系統(tǒng)、外部數(shù)據(jù)是指企業(yè)外部分系統(tǒng)所產(chǎn)生的數(shù)據(jù),通常是指行業(yè)數(shù)據(jù)。源數(shù)據(jù)最大的特點(diǎn)是格式不統(tǒng)一,如果要對(duì)源數(shù)據(jù)進(jìn)行分析需要經(jīng)過(guò)ETL對(duì)數(shù)據(jù)進(jìn)行集中獲取、過(guò)慮、轉(zhuǎn)換等處理。
3.3 ?ETL
ETL(Extra, Transfer, Load)包括數(shù)據(jù)抽取、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)裝載三個(gè)過(guò)程。
1、抽取
數(shù)據(jù)抽取是從各各業(yè)務(wù)系統(tǒng)、外部系統(tǒng)等源數(shù)據(jù)處采集源數(shù)據(jù)。
2、轉(zhuǎn)換
采集過(guò)來(lái)的源數(shù)據(jù)如果要存儲(chǔ)到數(shù)據(jù)倉(cāng)庫(kù)需要按照一定的數(shù)據(jù)格式對(duì)源數(shù)據(jù)進(jìn)行轉(zhuǎn)換,常見的轉(zhuǎn)換方式有數(shù)據(jù)類型轉(zhuǎn)換、格式轉(zhuǎn)換、缺失值補(bǔ)充、數(shù)據(jù)綜合等。
3、裝載
轉(zhuǎn)換后的數(shù)據(jù)就可以存儲(chǔ)到數(shù)據(jù)倉(cāng)庫(kù)中,這個(gè)過(guò)程要裝載。數(shù)據(jù)裝載通常是按一定的頻率進(jìn)行的,比如每天裝載當(dāng)天的訂單數(shù)據(jù)、每星期裝載客戶信息等。
?
3.4 ?數(shù)據(jù)倉(cāng)庫(kù)與數(shù)據(jù)集市
數(shù)據(jù)倉(cāng)庫(kù)是用于企業(yè)整體分析的數(shù)據(jù)集合,比如分為:銷售主題、客戶主題、產(chǎn)品主題等。數(shù)據(jù)集市是用于部門分析的數(shù)據(jù)集合,從范圍上來(lái)講它屬于數(shù)據(jù)倉(cāng)庫(kù)的子集,比如:銷售部門的數(shù)據(jù)集市只有銷售主題。
為什么會(huì)有數(shù)據(jù)集市的概念?
通常從企業(yè)整體出發(fā)去建數(shù)據(jù)倉(cāng)庫(kù)比較困難,所涉及到的業(yè)務(wù)及分析需求比較多,所以提出數(shù)據(jù)集市的概念,可以先從某個(gè)部門開始建設(shè)數(shù)據(jù)倉(cāng)庫(kù),這樣效率就比較高。
業(yè)界把從企業(yè)整體出發(fā)建設(shè)數(shù)據(jù)倉(cāng)庫(kù)的過(guò)程叫自頂向下,把從數(shù)據(jù)集市開始建設(shè)數(shù)據(jù)倉(cāng)庫(kù)再逐漸完善整個(gè)數(shù)據(jù)倉(cāng)庫(kù)的過(guò)程叫自下向上。通常建議自下向上建設(shè)數(shù)據(jù)倉(cāng)庫(kù),不過(guò)這個(gè)在業(yè)界也存在爭(zhēng)議。
數(shù)據(jù)倉(cāng)庫(kù)和數(shù)據(jù)集市具有什么區(qū)別?
1、范圍的區(qū)別
數(shù)據(jù)倉(cāng)庫(kù)是針對(duì)企業(yè)整體分析數(shù)據(jù)的集合。
數(shù)據(jù)集市是針對(duì)部門級(jí)別分析的數(shù)據(jù)集合。
2、數(shù)據(jù)粒度不同
數(shù)據(jù)倉(cāng)庫(kù)通常包括粒度較細(xì)的數(shù)據(jù)明細(xì)。
數(shù)據(jù)集市則會(huì)在數(shù)據(jù)倉(cāng)庫(kù)的基礎(chǔ)上進(jìn)行數(shù)據(jù)聚合,這些聚合后的數(shù)據(jù)就會(huì)直接用于部門業(yè)務(wù)分析。
?
3.5 ?應(yīng)用系統(tǒng)
這里的應(yīng)用系統(tǒng)是指使用數(shù)據(jù)倉(cāng)庫(kù)完成數(shù)據(jù)分析、數(shù)據(jù)查詢、數(shù)據(jù)報(bào)表等功能的系統(tǒng)。應(yīng)用系統(tǒng)需要從數(shù)據(jù)倉(cāng)庫(kù)中查詢數(shù)據(jù)、分析數(shù)據(jù),比如:OLAP 系統(tǒng)、數(shù)據(jù)查詢系統(tǒng)等。
?
3.6 ?用戶
使用數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)的用戶主要有數(shù)據(jù)分析人員、管理決策人員(公司高層)等。
?
4. ?維度分析
4.1 ?維度分析介紹
對(duì)數(shù)據(jù)進(jìn)行分析通常采取維度分析,比如:用戶提出分析課程訪問(wèn)量的指標(biāo),為了滿足不同的分析需求可以從時(shí)間維度分析課程訪問(wèn)量,分析每天、每小時(shí)的課程訪問(wèn)量;也可以從課程維度來(lái)分析課程訪問(wèn)量,分析每個(gè)課程、每個(gè)課程分類的訪問(wèn)量。
4.2 ?指標(biāo)與維度
要進(jìn)行維度分析需要先理解兩個(gè)術(shù)語(yǔ):指標(biāo)和維度。
指標(biāo)是衡量事務(wù)發(fā)展的標(biāo)準(zhǔn),也叫度量,如價(jià)格,銷量等;指標(biāo)可以求和、求平均值等計(jì)算。
指標(biāo)分為絕對(duì)數(shù)值和相對(duì)數(shù)值,絕對(duì)數(shù)值反映具體的大小和多少,如價(jià)格、銷量、分?jǐn)?shù)等;相對(duì)數(shù)值反映一定的程度,如及格率、購(gòu)買率、漲幅等。
維度是事務(wù)的特征,如顏色、區(qū)域、時(shí)間等,可以根據(jù)不同的維度來(lái)對(duì)指標(biāo)進(jìn)行分析對(duì)比。比如根據(jù)區(qū)域維度來(lái)分析不同區(qū)域的產(chǎn)品銷量,根據(jù)時(shí)間來(lái)分析每個(gè)月產(chǎn)品的銷量,同一個(gè)產(chǎn)品銷量指標(biāo)從不同的維度分析會(huì)得出不同的結(jié)果。
維度分為定性維度和定量維度兩種,定性維度就是字符類型的特征,比如區(qū)域維度包括全國(guó)各省份;定量維度就是數(shù)值類型的特征,如價(jià)格區(qū)間、銷量區(qū)間等,如價(jià)格區(qū)間維度分為0--100、100-1000兩個(gè)區(qū)間,可以按價(jià)格區(qū)間維度來(lái)對(duì)指標(biāo)進(jìn)行分析,說(shuō)到這里,其實(shí)指標(biāo)是可以轉(zhuǎn)成維度的,所轉(zhuǎn)成的維度就是定量維度。
用具體的指標(biāo)數(shù)值, 來(lái)度量不同的維度。x軸和y軸的關(guān)系。
4.3 ?業(yè)務(wù)需求
4.3.1 ?課程訪問(wèn)量
說(shuō)明:統(tǒng)計(jì)指定時(shí)間段內(nèi),訪問(wèn)課程的客戶數(shù)量。以天為單位進(jìn)行展示。
展現(xiàn):線狀圖
條件:年、季度、月
展示粒度:天 ?
數(shù)據(jù)來(lái)源:咨詢系統(tǒng)的web_chat_ems_2019_12等月表
?
按年:顯示指定年范圍內(nèi)每天的客戶訪問(wèn)量
按季度:顯示指定季度范圍內(nèi)每天的客戶訪問(wèn)量
按月:顯示指定月份范圍內(nèi)每天的客戶訪問(wèn)量
4.3.2 ?課程購(gòu)買量
說(shuō)明:統(tǒng)計(jì)指定時(shí)間段內(nèi),用戶購(gòu)買課程的數(shù)量。以天為單位進(jìn)行展示。
展現(xiàn):線狀圖
條件:年、季度、月
展示粒度:天
數(shù)據(jù)來(lái)源:咨詢系統(tǒng)的web_chat_ems_2019_12等月表
按年:顯示指定年范圍內(nèi)每天的客戶訪問(wèn)量
按季度:顯示指定季度范圍內(nèi)每天的客戶訪問(wèn)量
按月:顯示指定月份范圍內(nèi)每天的客戶訪問(wèn)量
?
4.4 ?識(shí)別維度案例
在日常生活中,我們從不同的角度看待事務(wù)會(huì)有不同的體會(huì),數(shù)據(jù)分析也如此,比如:一個(gè)在線教育的平臺(tái),作為運(yùn)營(yíng)方會(huì)關(guān)注按時(shí)間段分析課程的訪問(wèn)量,作為教育機(jī)構(gòu)則關(guān)注單個(gè)課程的訪問(wèn)量,都是課程訪問(wèn)量指標(biāo)根據(jù)不同的維度去分析得到結(jié)果不同,這就是維度分析。
比如:按時(shí)間分析課程訪問(wèn)量,時(shí)間維度是課程訪問(wèn)量的分析依據(jù),時(shí)間維度和業(yè)務(wù)中的課程訪問(wèn)量是對(duì)應(yīng)的,下表列出了課程訪問(wèn)量明細(xì)記錄:
IP
訪問(wèn)時(shí)間
課程ID
127.0.0.1
2019-10-01 00:00:00
10010
127.0.0.1
2019-10-01 01:00:00
10011
127.0.0.1
2019-10-01 02:00:00
10011
?
上表中顯示了部分課程訪問(wèn)的記錄,每條記錄表示一次課程訪問(wèn),記錄內(nèi)容包括:IP,訪問(wèn)時(shí)間、課程ID,根據(jù)上邊的記錄可以按時(shí)間統(tǒng)計(jì)每天所有課程的訪問(wèn)量,時(shí)間就是一個(gè)維度,如下是按時(shí)間維度分析的課程訪問(wèn)量:
?
時(shí)間維度(天)
時(shí)間(天)
課程訪問(wèn)量
2019-10-01
10000
2019-10-02
9000
2019-10-03
11000
...
...
?
?
維度是數(shù)據(jù)倉(cāng)庫(kù)建模的基礎(chǔ),維度是在分析時(shí)從多個(gè)方面來(lái)進(jìn)行分析,根據(jù)上邊的例子,將課程訪問(wèn)量作為度量,識(shí)別的維度主要是時(shí)間。
在真實(shí)的統(tǒng)計(jì)需求中,識(shí)別的維度除了時(shí)間外,還可能包括:課程、機(jī)構(gòu)(校區(qū))、學(xué)科(課程分類)等,如下圖:
?
?
將課程購(gòu)買量作為度量的維度可能包括:
?
?
?
4.5 ?維度分層與分級(jí)
通常在分析結(jié)果中首先看到的是一個(gè)總數(shù),比如全年課程購(gòu)買量,然后會(huì)詳細(xì)去看每個(gè)季度、每個(gè)月的課程購(gòu)買量,全年、季度、月這些屬于時(shí)間維度的一個(gè)層次,年、季度、月是這個(gè)層次的三個(gè)級(jí)別;再比如按地區(qū)分析課程購(gòu)買量,全國(guó)、省、市、縣屬于地區(qū)維度的一個(gè)層次,層次中共有四個(gè)級(jí)別。
相當(dāng)于將維度進(jìn)行細(xì)分。細(xì)分兩層,則維度包含一個(gè)層次,多個(gè)級(jí)別。 細(xì)分三層,則維度包含多個(gè)層次,多個(gè)級(jí)別。
每個(gè)維度至少有一個(gè)層次且該層次至少有一個(gè)級(jí)別。下邊將課程訪問(wèn)的各各維度定義層次和級(jí)別,如下:
?
?
時(shí)間維度:
一個(gè)層次四個(gè)級(jí)別:年、月、天、小時(shí)
課程維度:
課程名稱:只有一個(gè)級(jí)別,每門課程的名稱
課程分類:兩個(gè)級(jí)別,大類和小類
課程難度:只有三個(gè)級(jí)別,簡(jiǎn)單、一般、難
課程等級(jí):只有三個(gè)級(jí)別,初、中、高
地區(qū)維度:
一個(gè)層次三個(gè)級(jí)別:省、市、縣
?
4.6 ?下鉆與上卷
維度中有不同的層次,每個(gè)層次可以有多個(gè)級(jí)別,這樣就可以根據(jù)多個(gè)維護(hù)層次和級(jí)別進(jìn)行分析,可以靈活獲取高級(jí)別的匯總信息,獲取低級(jí)別的明細(xì)信息。
把獲取高級(jí)別的匯總信息的過(guò)程叫上卷,把獲取低級(jí)別的明細(xì)信息的過(guò)程叫下鉆,比如:課程訪問(wèn)量分析,時(shí)間維度有四個(gè)級(jí)別,分別是年、月、天、小時(shí),現(xiàn)在我們某個(gè)級(jí)別分析每天的課程訪問(wèn)量,比如按天分析課程訪問(wèn)量,此時(shí)我們可以按小時(shí)下鉆分析,得出一天內(nèi)每小時(shí)的課程訪問(wèn)量,也可以按月上卷,得到月度的課程訪問(wèn)量。
?
下鉆維度:
天、小時(shí)
上卷維度:
年、月
?
5. ?數(shù)倉(cāng)建模
5.1 ?概述
數(shù)據(jù)倉(cāng)庫(kù)建模的方法常用的有兩種:三范式建模法、維度建模法,三范式建模法主要是應(yīng)用于傳統(tǒng)的企業(yè)級(jí)數(shù)據(jù)倉(cāng)庫(kù),這類數(shù)據(jù)倉(cāng)庫(kù)通常使用關(guān)系型數(shù)據(jù)庫(kù)實(shí)現(xiàn),是由Inmon提出的,應(yīng)用于自頂向下的數(shù)據(jù)倉(cāng)庫(kù)架構(gòu); 維度數(shù)據(jù)模型就是基于維度分析來(lái)創(chuàng)建模型,是由Kimball提出,應(yīng)用于自下向上的數(shù)據(jù)倉(cāng)庫(kù)架構(gòu)。本課程采用維度建模的方法。
維度建模,簡(jiǎn)稱DM(Dimensional modeling),數(shù)據(jù)倉(cāng)庫(kù)大師Kimball的觀點(diǎn):維度數(shù)據(jù)模型是一種趨向于支持最終用戶對(duì)數(shù)據(jù)倉(cāng)庫(kù)進(jìn)行查詢的設(shè)計(jì)技術(shù),是圍繞性能和易理解性構(gòu)建的。維度模型是按照用戶看待或分析數(shù)據(jù)的角度來(lái)組織數(shù)據(jù)。
維度建模的兩個(gè)核心概念:事實(shí)表和維度表。
5.2 ?事實(shí)表
5.2.1 ?概述
事實(shí)表記錄了特定事件的數(shù)字化信息,一般由數(shù)值型數(shù)字和指向維度表的外鍵組成。
事實(shí)表的設(shè)計(jì)依賴于業(yè)務(wù)系統(tǒng),事實(shí)表的數(shù)據(jù)就是業(yè)務(wù)系統(tǒng)的指標(biāo)數(shù)據(jù)。數(shù)據(jù)分析的實(shí)質(zhì)就是基于事實(shí)表開展的計(jì)算操作。
5.2.2 ?分類
5.2.2.1 ?事務(wù)事實(shí)表
Transaction fact table,事務(wù)事實(shí)表與周期快照事實(shí)表、累積快照事實(shí)表使用相同的維度,但是它們?cè)诿枋鰳I(yè)務(wù)事實(shí)方面是有著非常大的差異的。
事務(wù)事實(shí)表記錄的事務(wù)層面的事實(shí),保存的是最原子的數(shù)據(jù),也稱“原子事實(shí)表”或“交易事實(shí)表”。事務(wù)事實(shí)表中的數(shù)據(jù)在事務(wù)事件發(fā)生后產(chǎn)生,數(shù)據(jù)的粒度通常是每個(gè)事務(wù)一條記錄。一旦事務(wù)被提交,事實(shí)表數(shù)據(jù)被插入,數(shù)據(jù)就不再進(jìn)行更改,其更新方式為增量更新。?
事務(wù)事實(shí)表的日期維度記錄的是事務(wù)發(fā)生的日期,它記錄的事實(shí)是事務(wù)活動(dòng)的內(nèi)容。用戶可以通過(guò)事務(wù)事實(shí)表對(duì)事務(wù)行為進(jìn)行特別詳細(xì)的分析。
溝通中常說(shuō)的事實(shí)表,大多指的是事務(wù)事實(shí)表。
?
5.2.2.2 ?周期快照事實(shí)表
Periodicsnapshot fact table,周期快照事實(shí)表以具有規(guī)律性的、可預(yù)見的時(shí)間間隔來(lái)記錄事實(shí),時(shí)間間隔如每天、每月、每年等等。典型的例子如銷售日快照表、庫(kù)存日快照表等。
想象以下場(chǎng)景,需要統(tǒng)計(jì)一個(gè)季度的商品成交量怎么取做?如果用一個(gè)季度內(nèi)的事實(shí)事務(wù)表進(jìn)行計(jì)算,雖然可以得出結(jié)果但是效率太低,在實(shí)際生產(chǎn)中并不可行,因此,需要定期對(duì)指定的度量進(jìn)行整合,作為周期快照表用于下游應(yīng)用。一般設(shè)計(jì)事實(shí)表時(shí),事務(wù)事實(shí)表和周期快照表是成對(duì)設(shè)計(jì)的,大部分的周期表由事務(wù)表加工產(chǎn)生,還有部分特殊數(shù)據(jù)是直接應(yīng)用系統(tǒng)產(chǎn)生(如訂單評(píng)價(jià))。
周期快照事實(shí)表的粒度是每個(gè)時(shí)間段一條記錄,通常比事務(wù)事實(shí)表的粒度要粗,是在事務(wù)事實(shí)表之上建立的聚集表。比如說(shuō)時(shí)間周期是1周,那么這個(gè)周期快照事實(shí)表的一條記錄就是這一周的對(duì)于某個(gè)度量的統(tǒng)計(jì)值。周期快照事實(shí)表的維度個(gè)數(shù)比事務(wù)事實(shí)表要少。
周期快照事實(shí)表的日期維度通常是記錄時(shí)間段的終止日,記錄的事實(shí)是這個(gè)時(shí)間段內(nèi)一些聚集事實(shí)值。事實(shí)表的數(shù)據(jù)一旦插入即不能更改,其更新方式為增量更新。
?
5.2.2.3 ?累積快照事實(shí)表
Accumulatingsnapshot fact table,累積快照事實(shí)表和周期快照事實(shí)表有些相似之處,它們存儲(chǔ)的都是事務(wù)數(shù)據(jù)的快照信息。但是它們之間也有著很大的不同,周期快照事實(shí)表記錄的確定的周期的數(shù)據(jù),而累積快照事實(shí)表記錄的不確定的周期的數(shù)據(jù)。
累積快照事實(shí)表代表的是完全覆蓋一個(gè)事務(wù)或產(chǎn)品的生命周期的時(shí)間跨度,它通常具有多個(gè)日期字段,用來(lái)記錄整個(gè)生命周期中的關(guān)鍵時(shí)間點(diǎn)。例如訂單累計(jì)快照事實(shí)表會(huì)有付款日期,發(fā)貨日期,收貨日期等時(shí)間點(diǎn)。
事務(wù)事實(shí)表中一個(gè)完整的交易記錄會(huì)有一系列不同狀態(tài)的數(shù)據(jù)來(lái)記錄整個(gè)交易過(guò)程;而累積快照事實(shí)表只會(huì)有一條記錄,數(shù)據(jù)會(huì)一直更新直到過(guò)程結(jié)束。
累積快照事實(shí)表代表的是完全覆蓋一個(gè)事務(wù)或產(chǎn)品的生命周期的時(shí)間跨度,它通常具有多個(gè)日期字段,用來(lái)記錄整個(gè)生命周期中的關(guān)鍵時(shí)間點(diǎn)。另外,它還會(huì)有一個(gè)用于指示最后更新日期的附加日期字段。
由于事實(shí)表中許多日期在首次加載時(shí)是不知道的,所以必須使用代理關(guān)鍵字來(lái)處理未定義的日期,而且這類事實(shí)表在數(shù)據(jù)加載完后,是可以對(duì)它進(jìn)行更新的,來(lái)補(bǔ)充隨后知道的日期信息。
舉例來(lái)說(shuō):訂貨日期、預(yù)定交貨日期、實(shí)際發(fā)貨日期、實(shí)際交貨日期、數(shù)量、金額、運(yùn)費(fèi)。
5.2.2.4 ?總結(jié)
特點(diǎn)
事務(wù)事實(shí)
周期快照事實(shí)
累積快照事實(shí)
時(shí)間/時(shí)期
時(shí)間
時(shí)期
時(shí)間跨度較短的多個(gè)時(shí)點(diǎn)
粒度
每行代表一個(gè)事務(wù)事件
每行代表一個(gè)時(shí)間周期
每行代表一個(gè)業(yè)務(wù)周期
事實(shí)表加載
新增
新增
新增和修改
事實(shí)表更新
不更新
不更新
新事件產(chǎn)生時(shí)更新
時(shí)間維
業(yè)務(wù)日期
時(shí)期末
多個(gè)業(yè)務(wù)過(guò)程的完成日期
事實(shí)
事務(wù)活動(dòng)
時(shí)間周期內(nèi)的績(jī)效
限定的多個(gè)業(yè)務(wù)階段內(nèi)的績(jī)效
?
?
5.3 ?維度表
5.3.1 ?概述
維度是指觀察數(shù)據(jù)的角度,一般是一個(gè)名詞,比如對(duì)于銷售金額這個(gè)事實(shí),我們可以從銷售時(shí)間、銷售產(chǎn)品、銷售店鋪、購(gòu)買顧客等多個(gè)維度來(lái)觀察分析。
維度表的記錄數(shù)比事實(shí)表少,但是每條記錄可能會(huì)包含很多字段。
5.3.2 ?分類
主要包含兩大類數(shù)據(jù):
1.高基數(shù)維度數(shù)據(jù):一般是用戶資料表、商品資料表類似的資料表。數(shù)據(jù)量可能是千萬(wàn)級(jí)或者上億級(jí)別。
2.低基數(shù)維度數(shù)據(jù):一般是配置表,比如枚舉值對(duì)應(yīng)的中文含義,或者日期維表、地理維表等。數(shù)據(jù)量可能是個(gè)位數(shù)或者幾千條幾萬(wàn)條。
基數(shù)指的是一個(gè)字段中不同值的個(gè)數(shù),比如主鍵列具有唯一值,所以具有最高的基數(shù),而性別枚舉值(日期、地區(qū)等)這樣的列的基數(shù)就很低。
?
栗子:
時(shí)間維度表
描述事件發(fā)生的時(shí)間,數(shù)據(jù)倉(cāng)庫(kù)就是一個(gè)隨時(shí)間變化的數(shù)據(jù)集合,因此可能需要一個(gè)時(shí)間維度表。年月日時(shí)分秒。
地理維度表
描述地理位置信息數(shù)據(jù),國(guó)家、省市縣鎮(zhèn)村、郵編等。
產(chǎn)品維度表
描述產(chǎn)品屬性。比如書的分類,有科技、教育、小說(shuō)等分類屬性。
人員維度表
描述人員相關(guān)信息,銷售人員、市場(chǎng)人員、開發(fā)人員等。
?
5.4 ?常見的建模方法
5.4.1 ?星型模型
是一種多維的數(shù)據(jù)關(guān)系。一個(gè)事實(shí)表為中心,多個(gè)維度表環(huán)繞周圍。
一個(gè)星型模型中可以有一個(gè)或多個(gè)事實(shí)表,每個(gè)事實(shí)表可以引用任意數(shù)量的維度表。
星型模型將業(yè)務(wù)流程分為事實(shí)和維度。事實(shí)是對(duì)業(yè)務(wù)的度量,是定量的數(shù)據(jù),比如價(jià)格、銷售數(shù)量、距離、速度、質(zhì)量等。維度是對(duì)事實(shí)數(shù)據(jù)屬性的描述,比如日期、產(chǎn)品、客戶、地理位置等。
?
?
5.4.2 ?雪花模型
當(dāng)有一個(gè)或多個(gè)維表沒有直接連接到事實(shí)表上,而是通過(guò)其他維表連接到事實(shí)表上時(shí),就像多個(gè)雪花連接在一起,故稱雪花模型。雪花模型是對(duì)星型模型的擴(kuò)展,它對(duì)星型模型的維表進(jìn)一步層次化,原有的各維表可能被擴(kuò)展為小的事實(shí)表,形成一些局部的 "層次 " 區(qū)域,這些被分解的表都連接到主維度表而不是事實(shí)表。
?
如何將維度表進(jìn)行層次化處理呢?
即把低基數(shù)(重復(fù)比較多、辨識(shí)度比較低、維度數(shù)據(jù)少,比如性別)的屬性從維度表中移除并形成單獨(dú)的表。
比如之前講到的案例,購(gòu)買量指標(biāo)有課程維度,課程維度又可以將課程分類進(jìn)行層次化擴(kuò)展為新的維度表。
層次化的影響
層次化的過(guò)程是將維度表中重復(fù)度比較高的字段組成一個(gè)新表,所以層次化不可避免增加了表的數(shù)量,減少了數(shù)據(jù)的存儲(chǔ)空間,提高了數(shù)據(jù)更新的效率。但是查詢時(shí)就需要連接更多的表。
總結(jié),雪花模型中,一個(gè)維度被規(guī)范化成多個(gè)關(guān)聯(lián)的表,星型模型中,每個(gè)維度由一個(gè)單一的維度表所表示。
5.5 ?漸變維(SCD)
5.5.1 ?什么是漸變維
維度可以根據(jù)變化劇烈程度主要分為無(wú)變化維度和變化維度。例如一個(gè)人的相關(guān)信息,身份證號(hào)、姓名和性別等信息數(shù)據(jù)屬于不變的部分;而婚姻狀態(tài)、工作經(jīng)歷、工作單位和培訓(xùn)經(jīng)歷等屬于可能會(huì)變化的字段。
大多數(shù)維度數(shù)據(jù)隨時(shí)間的遷移是緩慢變化的。比如增加了新的產(chǎn)品,或者產(chǎn)品的ID號(hào)碼修改了,或者產(chǎn)品增加了一個(gè)新的屬性,此時(shí),維度表就會(huì)被修改或者增加新的記錄行。這樣,在設(shè)計(jì)維度和使用維度的過(guò)程中,就要考慮到緩慢變化維度數(shù)據(jù)的處理。
緩慢漸變維,即維度中的屬性可能會(huì)隨著時(shí)間發(fā)生改變,比如包含用戶住址Address的DimCustomer維度,用戶的住址可能會(huì)發(fā)生改變,進(jìn)而影響業(yè)務(wù)統(tǒng)計(jì)精度,DimCustomer維度就是緩慢漸變維(SCD)。
SCD有三種分類,我們這里以顧客表為例來(lái)進(jìn)行說(shuō)明:
假設(shè)在第一次從業(yè)務(wù)數(shù)據(jù)庫(kù)中加載了一批數(shù)據(jù)到數(shù)據(jù)倉(cāng)庫(kù)中,當(dāng)時(shí)業(yè)務(wù)數(shù)據(jù)庫(kù)有這樣的一條顧客的信息。
?
顧客 BIWORK ,居住在北京,目前是一名 BI 的開發(fā)工程師。假設(shè) BIWORK 因?yàn)楸本┛諝赓|(zhì)量 PM2.5 等原因從北京搬到了三亞。那么這條信息在業(yè)務(wù)數(shù)據(jù)庫(kù)中應(yīng)該被更新了。
?
那么當(dāng)下次從業(yè)務(wù)數(shù)據(jù)庫(kù)中抽取這類信息的時(shí)候,數(shù)據(jù)倉(cāng)庫(kù)又應(yīng)該如何處理呢?
我們假設(shè)在數(shù)據(jù)倉(cāng)庫(kù)中實(shí)現(xiàn)了與業(yè)務(wù)數(shù)據(jù)庫(kù)之間的同步,數(shù)據(jù)倉(cāng)庫(kù)中也直接將詞條數(shù)據(jù)修改更新。后來(lái)我們創(chuàng)建報(bào)表做一些簡(jiǎn)單的數(shù)據(jù)統(tǒng)計(jì)分析,這時(shí)在數(shù)據(jù)倉(cāng)庫(kù)中所有對(duì)顧客 BIWORK 的銷售都指向了 BIWORK 新的所在地 - 城市三亞,但是實(shí)際上 BIWORK 在之前所有的購(gòu)買都發(fā)生在 BIWORK 居住在北京的時(shí)候。
通過(guò)這個(gè)簡(jiǎn)單的例子,描述了因一些基本信息的更改可能會(huì)引起數(shù)據(jù)歸納和分析出現(xiàn)的問(wèn)題。
5.5.2 ?SCD1(緩慢漸變類型1)
通過(guò)更新維度記錄直接覆蓋已存在的值。不維護(hù)記錄的歷史。一般用于修改錯(cuò)誤的數(shù)據(jù),即歷史數(shù)據(jù)就是錯(cuò)誤數(shù)據(jù),除此沒有他用。
?
在數(shù)據(jù)倉(cāng)庫(kù)中,我們可以保持業(yè)務(wù)數(shù)據(jù)和數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)始終處于一致。可以在 Customer 維度中使用來(lái)自業(yè)務(wù)數(shù)據(jù)庫(kù)中的 Business Key - CustomerID 來(lái)追蹤業(yè)務(wù)數(shù)據(jù)的變化,一旦發(fā)生變化那么就將舊的業(yè)務(wù)數(shù)據(jù)覆蓋重寫。
?
DW 中的記錄根據(jù)業(yè)務(wù)數(shù)據(jù)庫(kù)中的 CustomerID 獲取了最新的 City 信息,直接更新到 DW 中。
?
?
5.5.3 ?SCD2(緩慢漸變類型2)
在源數(shù)據(jù)發(fā)生變化時(shí),給維度記錄建立一個(gè)新的“版本”記錄,從而維護(hù)維度歷史。SCD2不刪除、不修改已存在的數(shù)據(jù)。SCD2也叫拉鏈表。
在數(shù)據(jù)倉(cāng)庫(kù)中有很多需求場(chǎng)景會(huì)對(duì)歷史數(shù)據(jù)進(jìn)行匯總和分析,因此會(huì)盡可能的維護(hù)來(lái)自業(yè)務(wù)系統(tǒng)中的歷史數(shù)據(jù),使系統(tǒng)能夠真正捕獲到這種歷史數(shù)據(jù)的變化。
以上面的例子來(lái)說(shuō),可能需要分析的結(jié)果是 BIWORK 在 2012年的時(shí)候購(gòu)買額度整體平穩(wěn),但是從2013年開始購(gòu)買額度減少了。出現(xiàn)的原因可能與所在的城市有關(guān)系,在北京的門店可能比在三亞的門店相對(duì)要多一些。
像這種情況,就不能很簡(jiǎn)單在數(shù)據(jù)倉(cāng)庫(kù)中將 BIWORK 當(dāng)前所在城市直接更新,否則此用戶所有的購(gòu)買額度都會(huì)歸于三亞。
通過(guò)起始時(shí)間來(lái)標(biāo)識(shí),Valid To(封鏈時(shí)間)為 NULL 的標(biāo)識(shí)當(dāng)前數(shù)據(jù),也可以用2999,3000,9999等等比較大的年份。數(shù)倉(cāng)內(nèi)部需要保持統(tǒng)一。每個(gè)版本都會(huì)產(chǎn)生一行新的數(shù)據(jù)。
?
?
5.5.4 ?SCD3(緩慢漸變類型3)
實(shí)際上SCD1 and 2 可以滿足大多數(shù)需求了,但是仍然有其它的解決方案,比如說(shuō) SCD3。 SCD3希望只維護(hù)更少的歷史記錄。
比如說(shuō)把要維護(hù)的歷史字段新增一列,然后每次只更新 Current Column 和 Previous Column。這樣,只保存了最近兩次的歷史記錄,歷史數(shù)據(jù)都在同一行數(shù)據(jù)中。但是如果要維護(hù)的字段比較多,就比較麻煩,因?yàn)橐嗟?Current 和 Previous 字段。所以 SCD3 用的還是沒有 SCD1 和 SCD2 那么普遍。它只適用于數(shù)據(jù)的存儲(chǔ)空間不足并且用戶接受有限歷史數(shù)據(jù)的情況。
?
?
?
6. ?數(shù)據(jù)倉(cāng)庫(kù)分層
6.1 ?為什么要分層?
作為一名數(shù)據(jù)的規(guī)劃者,我們肯定希望自己的數(shù)據(jù)能夠有秩序地流轉(zhuǎn),數(shù)據(jù)的整個(gè)生命周期能夠清晰明確被設(shè)計(jì)者和使用者感知到。直觀來(lái)講就是如圖這般層次清晰、依賴關(guān)系直觀。
?
但是,大多數(shù)情況下,我們完成的數(shù)據(jù)體系卻是依賴復(fù)雜、層級(jí)混亂的。如下的右圖,在不知不覺的情況下,我們可能會(huì)做出一套表依賴結(jié)構(gòu)混亂,甚至出現(xiàn)循環(huán)依賴的數(shù)據(jù)體系。
?
?
因此,我們需要一套行之有效的數(shù)據(jù)組織和管理方法來(lái)讓我們的數(shù)據(jù)體系更有序,這就是談到的數(shù)據(jù)分層。數(shù)據(jù)分層并不能解決所有的數(shù)據(jù)問(wèn)題,但是,數(shù)據(jù)分層卻可以給我們帶來(lái)如下的好處:
1.?清晰數(shù)據(jù)結(jié)構(gòu):每一個(gè)數(shù)據(jù)分層都有它的作用域和職責(zé),在使用表的時(shí)候能更方便地定位和理解。
2.?復(fù)雜問(wèn)題簡(jiǎn)單化:將一個(gè)復(fù)雜的任務(wù)分解成多個(gè)步驟來(lái)完成,每一層解決特定的問(wèn)題。
3.?便于維護(hù):當(dāng)數(shù)據(jù)出現(xiàn)問(wèn)題之后,可以不用修復(fù)所有的數(shù)據(jù),只需要從有問(wèn)題的步驟開始修復(fù)。
4.?減少重復(fù)開發(fā):規(guī)范數(shù)據(jù)分層,開發(fā)一些通用的中間層數(shù)據(jù),能夠減少重復(fù)開發(fā)的工作量。
5.?高性能:數(shù)據(jù)倉(cāng)庫(kù)的構(gòu)建將大大縮短獲取信息的時(shí)間,數(shù)據(jù)倉(cāng)庫(kù)作為數(shù)據(jù)的集合,所有的信息都可以從數(shù)據(jù)倉(cāng)庫(kù)直接獲取,尤其對(duì)于海量數(shù)據(jù)的關(guān)聯(lián)查詢和復(fù)雜查詢,所以數(shù)據(jù)倉(cāng)庫(kù)分層有利于實(shí)現(xiàn)復(fù)雜的統(tǒng)計(jì)需求,提高數(shù)據(jù)統(tǒng)計(jì)的效率。
?
通常將數(shù)據(jù)模型分為三層:數(shù)據(jù)運(yùn)營(yíng)層( ODS )、數(shù)據(jù)倉(cāng)庫(kù)層(DW)和數(shù)據(jù)應(yīng)用層(APP)。簡(jiǎn)單來(lái)講,我們可以理解為:ODS層存放的是接入的原始數(shù)據(jù),DW層是存放我們要重點(diǎn)設(shè)計(jì)的數(shù)據(jù)倉(cāng)庫(kù)中間層數(shù)據(jù),APP是面向業(yè)務(wù)定制的應(yīng)用數(shù)據(jù)。下面詳細(xì)介紹這三層的設(shè)計(jì)。
6.2 ?分層方法
6.2.1 ?源數(shù)據(jù)層(ODS)
此層數(shù)據(jù)無(wú)任何更改,直接沿用外圍系統(tǒng)數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù),不對(duì)外開放;為臨時(shí)存儲(chǔ)層,是接口數(shù)據(jù)的臨時(shí)存儲(chǔ)區(qū)域,為后一步的數(shù)據(jù)處理做準(zhǔn)備。
6.2.2 ?數(shù)據(jù)倉(cāng)庫(kù)層(DW)
DW 層的數(shù)據(jù)應(yīng)該是一致的、準(zhǔn)確的、干凈的數(shù)據(jù),即對(duì)源系統(tǒng)數(shù)據(jù)進(jìn)行了清洗(去除了雜質(zhì))后的數(shù)據(jù)。
此層可以細(xì)分為三層:
明細(xì)層DWD(Data Warehouse Detail):存儲(chǔ)明細(xì)數(shù)據(jù),此數(shù)據(jù)是最細(xì)粒度的事實(shí)數(shù)據(jù)。該層一般保持和ODS層一樣的數(shù)據(jù)粒度,并且提供一定的數(shù)據(jù)質(zhì)量保證。同時(shí),為了提高數(shù)據(jù)明細(xì)層的易用性,該層會(huì)采用一些維度退化手法,將維度退化至事實(shí)表中,減少事實(shí)表和維表的關(guān)聯(lián)。
中間層DWM(Data WareHouse Middle):存儲(chǔ)中間數(shù)據(jù),為數(shù)據(jù)統(tǒng)計(jì)需要?jiǎng)?chuàng)建的中間表數(shù)據(jù),此數(shù)據(jù)一般是對(duì)多個(gè)維度的聚合數(shù)據(jù),此層數(shù)據(jù)通常來(lái)源于DWD層的數(shù)據(jù)。
業(yè)務(wù)層DWS(Data WareHouse Service):存儲(chǔ)寬表數(shù)據(jù),此層數(shù)據(jù)是針對(duì)某個(gè)業(yè)務(wù)領(lǐng)域的聚合數(shù)據(jù),應(yīng)用層的數(shù)據(jù)通常來(lái)源與此層,為什么叫寬表,主要是為了應(yīng)用層的需要在這一層將業(yè)務(wù)相關(guān)的所有數(shù)據(jù)統(tǒng)一匯集起來(lái)進(jìn)行存儲(chǔ),方便業(yè)務(wù)層獲取。此層數(shù)據(jù)通常來(lái)源與DWD和DWM層的數(shù)據(jù)。
在實(shí)際計(jì)算中,如果直接從DWD或者ODS計(jì)算出寬表的統(tǒng)計(jì)指標(biāo),會(huì)存在計(jì)算量太大并且維度太少的問(wèn)題,因此一般的做法是,在DWM層先計(jì)算出多個(gè)小的中間表,然后再拼接成一張DWS的寬表。由于寬和窄的界限不易界定,也可以去掉DWM這一層,只留DWS層,將所有的數(shù)據(jù)在放在DWS亦可。
?
6.2.3 ?數(shù)據(jù)應(yīng)用層(DA 或 APP)
前端應(yīng)用直接讀取的數(shù)據(jù)源;根據(jù)報(bào)表、專題分析的需求而計(jì)算生成的數(shù)據(jù)。
6.2.4 ?維表層(Dimension)
最后補(bǔ)充一個(gè)維表層,維表層主要包含兩部分?jǐn)?shù)據(jù):
1.高基數(shù)維度數(shù)據(jù):一般是用戶資料表、商品資料表類似的資料表。數(shù)據(jù)量可能是千萬(wàn)級(jí)或者上億級(jí)別。
2.低基數(shù)維度數(shù)據(jù):一般是配置表,比如枚舉值對(duì)應(yīng)的中文含義,或者日期維表。數(shù)據(jù)量可能是個(gè)位數(shù)或者幾千幾萬(wàn)。
?
?
7. ?數(shù)據(jù)倉(cāng)庫(kù)設(shè)計(jì)案例
這里我們以電商網(wǎng)站的數(shù)據(jù)倉(cāng)庫(kù)為例,針對(duì)用戶訪問(wèn)日志這一部分?jǐn)?shù)據(jù)進(jìn)行舉例說(shuō)明。
在ODS層中,由于各端的開發(fā)團(tuán)隊(duì)不同或者各種其它問(wèn)題,用戶的訪問(wèn)日志被分成了好幾張表上報(bào)到了我們的ODS層。
為了方便大家的使用,我們?cè)贒WD層做了一張用戶訪問(wèn)行為天表,在這里,我們將PC網(wǎng)頁(yè)、H5、小程序和原生APP訪問(wèn)日志匯聚到一張表里面,統(tǒng)一字段名,提升數(shù)據(jù)質(zhì)量,這樣就有了一張可供大家方便使用的明細(xì)表了。
在DWM層,我們會(huì)從DWD層中選取業(yè)務(wù)關(guān)注的核心維度來(lái)做聚合操作,比如只保留人、商品、設(shè)備和頁(yè)面區(qū)域維度。類似的,我們這樣做了很多個(gè)DWM的中間表。
然后在DWS層,我們將一個(gè)人在整個(gè)網(wǎng)站中的行為數(shù)據(jù)放到一張表中,這就是我們的寬表了,有了這張表,就可以快速滿足大部分的通用型業(yè)務(wù)需求了。
最后,在APP應(yīng)用層,根據(jù)需求從DWS層的一張或者多張表取出數(shù)據(jù)拼接成一張應(yīng)用表即可。
?
?
?