最詳細!深入淺出理解「3層6類」數(shù)據(jù)分層
編輯導(dǎo)語:本篇作者是給我們講述了數(shù)據(jù)組成及其表現(xiàn)形式,重點講解了“數(shù)據(jù)分層”這個概念的意義、背景、邏輯和其應(yīng)用等,一起來看一下。
上一節(jié)講述了數(shù)據(jù)的基本定義,按正常流程應(yīng)該來為大家介紹數(shù)據(jù)的采集和處理,但是這一節(jié)主要來說明數(shù)據(jù)組成以及表現(xiàn)形式。因為這對一個數(shù)據(jù)產(chǎn)品而言是至關(guān)重要的一部分,好比必須要學(xué)好數(shù)學(xué),你掌握了阿拉伯?dāng)?shù)字之后必須要掌握四則運算一樣?,F(xiàn)在咱們來講一下數(shù)據(jù)的“四則運算”。
講到這里,咱們就要引入一個概念“數(shù)據(jù)分層”。講數(shù)據(jù)分層之前,咱們先來說一個貼近現(xiàn)實生活的例子,幫助大家更好地理解數(shù)據(jù)分層:
如果把數(shù)據(jù)看作圖書館里的書,我們希望看到它們在書架上分門別類地放置;如果把數(shù)據(jù)看作城市的建筑,我們希望城市規(guī)劃布局合理;如果把數(shù)據(jù)看作電腦文件和文件夾,我們希望按照自己的習(xí)慣有很好的文件夾組織方式,而不是糟糕混亂的桌面,經(jīng)常為找一個文件而不知所措。
簡單來說,數(shù)據(jù)分層是把現(xiàn)實世界中收集到的有效信息用更加合理的方式表現(xiàn)出來,從而可以更快速的去解決問題。
一、數(shù)據(jù)分層的意義
還記得上篇文章中,我們?nèi)绾味x數(shù)據(jù)的嗎?
數(shù)據(jù):是通過觀測得到的數(shù)字性的特征或信息。
所以,數(shù)據(jù)只是我們對客觀世界的記錄,而數(shù)據(jù)建模是我們對數(shù)據(jù)的抽象,為什么要對數(shù)據(jù)進行抽象呢?
設(shè)想一下這樣的場景,數(shù)據(jù)爆炸的時代,數(shù)據(jù)的體量每天、每小時、甚至每秒都在激增。當(dāng)這樣的數(shù)據(jù)不斷的出現(xiàn),沒有一套科學(xué)的方法去對這些數(shù)據(jù)進行整理和歸檔,我們永遠無法從海量數(shù)據(jù)中獲取到有價值的數(shù)據(jù)。
所以數(shù)據(jù)分層的意義在于:
- 降低存儲成本:減少不必要的數(shù)據(jù)冗余,從而極大地降低存儲和計算成本,更好且有效的利用數(shù)據(jù)。
- 提高使用效率:當(dāng)業(yè)務(wù)發(fā)生變化時,可以更加方便的進行擴展,提高數(shù)據(jù)穩(wěn)定性和連續(xù)性。
- 保障數(shù)據(jù)質(zhì)量:良好的數(shù)據(jù)模型能改善數(shù)據(jù)統(tǒng)計口徑的不一致性,減少數(shù)據(jù)計算錯誤的可能性。
數(shù)據(jù)模型能夠促進業(yè)務(wù)與技術(shù)進行有效溝通,形成對主要業(yè)務(wù)定義和術(shù)語的統(tǒng)一認識,具有跨部門、中性的特征,可以表達和涵蓋所有的業(yè)務(wù)。
二、數(shù)據(jù)分層的背景
當(dāng)企業(yè)發(fā)展到一定階段,傳統(tǒng)的數(shù)據(jù)庫無法承載大量的數(shù)據(jù)承載,尤其在數(shù)據(jù)多而繁雜的情況下,對于使用者,需要數(shù)可以更加清晰且有邏輯的適用;對于維護者可以高效有序的進行維護,分層數(shù)據(jù)設(shè)計,即數(shù)據(jù)倉庫dw應(yīng)運而生。
說起數(shù)據(jù)倉庫,不得不提到創(chuàng)造他的人,比爾.恩門(Bill Inmon)。他在自己的著作《建立數(shù)據(jù)倉庫》一書中所提出的數(shù)據(jù)倉庫的定義:“數(shù)據(jù)倉庫是一個面向主題的(Subject Oriented)、集成的(Integrated)、相對穩(wěn)定的(Non-Volatile)、反映歷史變化(Time Variant)的數(shù)據(jù)集合,用于支持管理決策(Decision Making Support)?!?/p>
簡單來解釋,就是把大量數(shù)據(jù)更有邏輯的組合在一起,并且同時方便使用者和創(chuàng)建者進行操作與應(yīng)用。
三、數(shù)據(jù)分層的邏輯
上面兩個圖可以很清晰的看出分層后的好處,把一團亂麻的數(shù)據(jù)表進行分層和整理。數(shù)倉分層的價值在于:
- 方便使用:將多而繁雜的數(shù)據(jù)表通過一定的結(jié)構(gòu)進行規(guī)范,便于使用方進行使用。
- 追溯源頭:分層后的數(shù)據(jù)血緣非常明確,可以快速獲取上游數(shù)據(jù)的來源。
- 易于維護:規(guī)范后數(shù)據(jù)可以減少數(shù)據(jù)開發(fā),節(jié)約各類計算存儲資源,方便維護人員進行維護。
- 簡化工作:當(dāng)發(fā)生變化時,可以針對單點進行針對處理,大大簡化工作量。
那我們?nèi)绾芜M行數(shù)據(jù)分層呢?大概需要分幾層呢?
其實這個問題需要根據(jù)實際的業(yè)務(wù)狀況以及需要處理的數(shù)據(jù)體量來進行劃分,介紹分層之前,咱們先來了解下會有哪些分層,每層的作用和目的是啥。
1.第一層:操作數(shù)據(jù)存儲層 ODS
ODS層中的數(shù)據(jù)是從各類業(yè)務(wù)系統(tǒng)中(銷售系統(tǒng)、客戶關(guān)系管理系統(tǒng)等等)直接匯入本層。本層數(shù)據(jù)本身的特點是基本上最大程度還原業(yè)務(wù)系統(tǒng)中的數(shù)據(jù)。接入之前需要進行清洗等操作,保證接入本層的數(shù)據(jù)盡可能是潔凈可用的。
ODS層的表通常包括兩類,一個用于存儲當(dāng)前需要加載的數(shù)據(jù),一個用于存儲處理完后的歷史數(shù)據(jù)。
特點:分層中最細粒度的數(shù)據(jù),整體數(shù)倉中最底層的數(shù)據(jù),進行簡單加工后直接從業(yè)務(wù)系統(tǒng)接入。
數(shù)據(jù)來源:
1)業(yè)務(wù)庫
- 經(jīng)常會使用sqoop來抽取,例如每天定時抽取一次。
- 實時方面,可以考慮用canal監(jiān)聽mysql的binlog,實時接入即可。
2)埋點日志
- 日志一般以文件的形式保存,可以選擇用flume定時同步。
- 可以用spark streaming或者Flink來實時接入。
- kafka。
消息隊列:即來自ActiveMQ、Kafka的數(shù)據(jù)等。
2. 第二層:數(shù)據(jù)倉庫層 DW
1)第一類:公共維度匯總層 DIM(Dimension)
主要由維度表(維表)構(gòu)成。維度是邏輯概念,是衡量和觀察業(yè)務(wù)的角度。維表是根據(jù)維度及其屬性將數(shù)據(jù)平臺上構(gòu)建的物理化的表,采用寬表設(shè)計的原則。
2)第二類:數(shù)據(jù)倉庫層DW(Data Warehouse)
這一層是基于ODS和DIM層的數(shù)據(jù)做輕度匯總。所謂輕度匯總就是按照一定的主題去組合這些數(shù)據(jù),例如:作者信息表、用戶信息表、稿件信息表。
數(shù)據(jù)倉庫層從上到下,又可以分為3個層:數(shù)據(jù)細節(jié)層DWD、數(shù)據(jù)中間層DWM、數(shù)據(jù)服務(wù)層DWS。
- 數(shù)據(jù)細節(jié)層:data warehouse details,DWD:這層目的在于將ODS層進行和DW層進行隔離。進入DW層之前同樣需要把數(shù)據(jù)進行處理和清洗,例如:除去空數(shù)據(jù)和臟數(shù)據(jù)等等。
- 數(shù)據(jù)中間層:Data Warehouse Middle,DWM;該層是在DWD層的數(shù)據(jù)基礎(chǔ)上,對數(shù)據(jù)做一些輕微的聚合操作,生成一些列的中間結(jié)果表,提升公共指標(biāo)的復(fù)用性,減少重復(fù)加工的工作。
- 數(shù)據(jù)服務(wù)層:Data Warehouse Service,DWS;該層是基于DWM上的基礎(chǔ)數(shù)據(jù),整合匯總成分析某一個主題域的數(shù)據(jù)服務(wù)層,一般是寬表,用于提供后續(xù)的業(yè)務(wù)查詢,OLAP分析,數(shù)據(jù)分發(fā)等。一般來說,該層的數(shù)據(jù)表會相對較少;一張表會涵蓋比較多的業(yè)務(wù)內(nèi)容,由于其字段較多,因此一般也會稱該層的表為寬表。
3. 第三類:應(yīng)用數(shù)據(jù)服務(wù)層 ADS
Application Data Service。該層主要是提供數(shù)據(jù)產(chǎn)品和數(shù)據(jù)分析使用的數(shù)據(jù),一般會存放在ES、MySQL等系統(tǒng)中供線上系統(tǒng)使用,也可能會存在Hive或者Druid中供數(shù)據(jù)分析和數(shù)據(jù)挖掘使用。
ADS層數(shù)據(jù)是數(shù)據(jù)倉庫的最后一層數(shù)據(jù),以DWS層數(shù)據(jù)為基礎(chǔ)進行數(shù)據(jù)處理。
那常見的分層結(jié)構(gòu)有哪些呢?如何去應(yīng)用這些分層呢?
四、常見的數(shù)據(jù)分層應(yīng)用
這3大類5層的數(shù)據(jù)層,是層層遞進,并非每一層都是必不可少的,想要建設(shè)一套較為標(biāo)準(zhǔn)的數(shù)倉,現(xiàn)在市面上都是如何進行構(gòu)建呢?
1. 三級數(shù)倉分層
我們先來看下簡單的三級分層,三級分層氛圍ODS、DWD、DWM層這三層。每一層的目的和作用如下:
1)第一層:ODS層
用于存放從業(yè)務(wù)系統(tǒng)直接抽取出來的數(shù)據(jù),這些數(shù)據(jù)從數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)之間的邏輯關(guān)系上都與業(yè)務(wù)系統(tǒng)基本保持一致,因此在抽取過程中極大降低了數(shù)據(jù)轉(zhuǎn)化的復(fù)雜性,而主要關(guān)注數(shù)據(jù)抽取的接口、數(shù)據(jù)量大小、抽取方式等方面的問題。
下面是兩個例子,分別適用于傳統(tǒng)行業(yè)和互聯(lián)網(wǎng)行業(yè):
- 傳統(tǒng)行業(yè)ODS層:各業(yè)務(wù)系統(tǒng)對接來的數(shù)據(jù)。拿交易源數(shù)據(jù)來說(每次訂單的記錄,一個訂單有多個記錄)。例如:交易源數(shù)據(jù)、用戶源數(shù)據(jù)、貨物源數(shù)據(jù)
- 互聯(lián)網(wǎng)行業(yè)ODS層:除業(yè)務(wù)系統(tǒng)外,還會對接日志采集系統(tǒng)。拿app日志埋點來說,本層會記錄用戶每次登陸、app內(nèi)的行為數(shù)據(jù),一個用戶會有多條記錄)。例如:APP日志數(shù)據(jù)、小程序日志數(shù)據(jù)、用戶登錄數(shù)據(jù)等等
2)第二層:DWD層
主要存檔從ODS層匯總上來的數(shù)據(jù),以業(yè)務(wù)過程作為建模驅(qū)動,基于每個具體的業(yè)務(wù)過程特點,構(gòu)建最細粒度的明細事實表??蓪⒛承┲匾獙傩宰侄巫鲞m當(dāng)冗余,也即寬表化處理。從ODS層匯總上來的數(shù)據(jù)。最大限度保證與ODS層數(shù)據(jù)一致。
下面是兩個例子,分別適用于傳統(tǒng)行業(yè)和互聯(lián)網(wǎng)行業(yè):
- 傳統(tǒng)行業(yè)DWD層:拿訂單數(shù)據(jù)來說,本層會記錄訂單粒度的支付情況,一個訂單僅有一條記錄。例如:訂單交易表、用戶表、活動表、貨物表。
- 互聯(lián)網(wǎng)行業(yè)DWD層:拿用戶登錄表來說,本層記錄用戶在。
3)第三層:DWM層
是對DWD層的生產(chǎn)數(shù)據(jù)進行輕度綜合和匯總統(tǒng)計(可以把復(fù)雜的清洗,處理包含,如根據(jù)PV日志生成的會話數(shù)據(jù))。輕度綜合層與DWD的主要區(qū)別在于二者的應(yīng)用領(lǐng)域不同,DWD的數(shù)據(jù)來源于生產(chǎn)型系統(tǒng),并未滿意一些不可預(yù)見的需求而進行沉淀;輕度綜合層則面向分析型應(yīng)用進行細粒度的統(tǒng)計和沉淀。例如:按照天粒度去匯總某一主題的數(shù)據(jù)情況。
- 傳統(tǒng)行業(yè)DWM層:從DWD層交易表(天粒度)、用戶表(天粒度)、貨物表(天粒度)。
- 互聯(lián)網(wǎng)行業(yè)DWM層:用戶登錄行為表(天粒度)、訂單表(天粒度)。
2. 四級數(shù)據(jù)分層
在上述三層的基礎(chǔ)之上,增加第四層DWS層。
1)第四層:DWS層
DWS=DWD+DWM
通過由輕度匯總層和明細層數(shù)據(jù)計算生成。又稱數(shù)據(jù)集市或大寬表。按照業(yè)務(wù)劃分,如流量、訂單、用戶等,生成字段比較多的寬表,?用于提供后續(xù)的業(yè)務(wù)查詢,OLAP分析,數(shù)據(jù)分發(fā)等。
- 傳統(tǒng)行業(yè)DWS層:用戶主題寬表、貨物主題寬表、店鋪主題寬表。
- 互聯(lián)網(wǎng)行業(yè)DWS層:用戶主題寬表、店長主題寬表。
3. 五級數(shù)據(jù)分層
在上述四層的基礎(chǔ)上,增加第五層ADS層。
1)第五層:ADS層
ADS層可以理解為對業(yè)務(wù)的“專屬定制表”。ADS ≈ DWD+DWS,而且和DWD、DWS的表名側(cè)重于object或用戶行為不同的是,ADS的表名可以看出有特定的業(yè)務(wù)特征。
- 傳統(tǒng)行業(yè)ADS層:爆款商品排行表、高價值用戶表、用戶近30天留存表。
- 互聯(lián)網(wǎng)行業(yè)ADS層:業(yè)務(wù)大盤表、用戶生命周期表、用戶近7天留存表。
本文由 @業(yè)務(wù)數(shù)智化 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自 Unsplash,基于CC0協(xié)議
四級數(shù)據(jù)分層,第四層:DWS層,在這里的配圖中,沒有出現(xiàn)dws層。四層數(shù)據(jù)分層提及的分層指的是圖中的DWM,還是ADS,還是?
辛苦了
很細致,不過小白可能部分內(nèi)容看不懂,可以加一些專業(yè)術(shù)語的注釋
好主意!可以舉些例子嗎?比如說哪些名詞看起來比較困惑呢
比如OLAP分析、天粒度,這些名詞說實話不是業(yè)內(nèi)人士,即使是開了百度/Google也看不懂,可以適當(dāng)解釋一下,有助于提升閱讀體驗。
感謝建議,我再完善一下哈
http://www.aharts.cn/data-analysis/5182829.html
關(guān)于粒度的解釋可以看下這篇文章,下篇會專門介紹下olap