最詳細(xì)!深入淺出理解「3層6類」數(shù)據(jù)分層

7 評(píng)論 25064 瀏覽 44 收藏 15 分鐘

編輯導(dǎo)語:本篇作者是給我們講述了數(shù)據(jù)組成及其表現(xiàn)形式,重點(diǎn)講解了“數(shù)據(jù)分層”這個(gè)概念的意義、背景、邏輯和其應(yīng)用等,一起來看一下。

上一節(jié)講述了數(shù)據(jù)的基本定義,按正常流程應(yīng)該來為大家介紹數(shù)據(jù)的采集和處理,但是這一節(jié)主要來說明數(shù)據(jù)組成以及表現(xiàn)形式。因?yàn)檫@對一個(gè)數(shù)據(jù)產(chǎn)品而言是至關(guān)重要的一部分,好比必須要學(xué)好數(shù)學(xué),你掌握了阿拉伯?dāng)?shù)字之后必須要掌握四則運(yùn)算一樣。現(xiàn)在咱們來講一下數(shù)據(jù)的“四則運(yùn)算”。

講到這里,咱們就要引入一個(gè)概念“數(shù)據(jù)分層”。講數(shù)據(jù)分層之前,咱們先來說一個(gè)貼近現(xiàn)實(shí)生活的例子,幫助大家更好地理解數(shù)據(jù)分層:

如果把數(shù)據(jù)看作圖書館里的書,我們希望看到它們在書架上分門別類地放置;如果把數(shù)據(jù)看作城市的建筑,我們希望城市規(guī)劃布局合理;如果把數(shù)據(jù)看作電腦文件和文件夾,我們希望按照自己的習(xí)慣有很好的文件夾組織方式,而不是糟糕混亂的桌面,經(jīng)常為找一個(gè)文件而不知所措。

簡單來說,數(shù)據(jù)分層是把現(xiàn)實(shí)世界中收集到的有效信息用更加合理的方式表現(xiàn)出來,從而可以更快速的去解決問題。

一、數(shù)據(jù)分層的意義

還記得上篇文章中,我們?nèi)绾味x數(shù)據(jù)的嗎?

數(shù)據(jù):是通過觀測得到的數(shù)字性的特征或信息。

所以,數(shù)據(jù)只是我們對客觀世界的記錄,而數(shù)據(jù)建模是我們對數(shù)據(jù)的抽象,為什么要對數(shù)據(jù)進(jìn)行抽象呢?

設(shè)想一下這樣的場景,數(shù)據(jù)爆炸的時(shí)代,數(shù)據(jù)的體量每天、每小時(shí)、甚至每秒都在激增。當(dāng)這樣的數(shù)據(jù)不斷的出現(xiàn),沒有一套科學(xué)的方法去對這些數(shù)據(jù)進(jìn)行整理和歸檔,我們永遠(yuǎn)無法從海量數(shù)據(jù)中獲取到有價(jià)值的數(shù)據(jù)。

所以數(shù)據(jù)分層的意義在于:

  1. 降低存儲(chǔ)成本:減少不必要的數(shù)據(jù)冗余,從而極大地降低存儲(chǔ)和計(jì)算成本,更好且有效的利用數(shù)據(jù)。
  2. 提高使用效率:當(dāng)業(yè)務(wù)發(fā)生變化時(shí),可以更加方便的進(jìn)行擴(kuò)展,提高數(shù)據(jù)穩(wěn)定性和連續(xù)性。
  3. 保障數(shù)據(jù)質(zhì)量:良好的數(shù)據(jù)模型能改善數(shù)據(jù)統(tǒng)計(jì)口徑的不一致性,減少數(shù)據(jù)計(jì)算錯(cuò)誤的可能性。

數(shù)據(jù)模型能夠促進(jìn)業(yè)務(wù)與技術(shù)進(jìn)行有效溝通,形成對主要業(yè)務(wù)定義和術(shù)語的統(tǒng)一認(rèn)識(shí),具有跨部門、中性的特征,可以表達(dá)和涵蓋所有的業(yè)務(wù)。

二、數(shù)據(jù)分層的背景

當(dāng)企業(yè)發(fā)展到一定階段,傳統(tǒng)的數(shù)據(jù)庫無法承載大量的數(shù)據(jù)承載,尤其在數(shù)據(jù)多而繁雜的情況下,對于使用者,需要數(shù)可以更加清晰且有邏輯的適用;對于維護(hù)者可以高效有序的進(jìn)行維護(hù),分層數(shù)據(jù)設(shè)計(jì),即數(shù)據(jù)倉庫dw應(yīng)運(yùn)而生。

說起數(shù)據(jù)倉庫,不得不提到創(chuàng)造他的人,比爾.恩門(Bill Inmon)。他在自己的著作《建立數(shù)據(jù)倉庫》一書中所提出的數(shù)據(jù)倉庫的定義:“數(shù)據(jù)倉庫是一個(gè)面向主題的(Subject Oriented)、集成的(Integrated)、相對穩(wěn)定的(Non-Volatile)、反映歷史變化(Time Variant)的數(shù)據(jù)集合,用于支持管理決策(Decision Making Support)?!?/p>

簡單來解釋,就是把大量數(shù)據(jù)更有邏輯的組合在一起,并且同時(shí)方便使用者和創(chuàng)建者進(jìn)行操作與應(yīng)用。

三、數(shù)據(jù)分層的邏輯

上面兩個(gè)圖可以很清晰的看出分層后的好處,把一團(tuán)亂麻的數(shù)據(jù)表進(jìn)行分層和整理。數(shù)倉分層的價(jià)值在于:

  • 方便使用:將多而繁雜的數(shù)據(jù)表通過一定的結(jié)構(gòu)進(jìn)行規(guī)范,便于使用方進(jìn)行使用。
  • 追溯源頭:分層后的數(shù)據(jù)血緣非常明確,可以快速獲取上游數(shù)據(jù)的來源。
  • 易于維護(hù):規(guī)范后數(shù)據(jù)可以減少數(shù)據(jù)開發(fā),節(jié)約各類計(jì)算存儲(chǔ)資源,方便維護(hù)人員進(jìn)行維護(hù)。
  • 簡化工作:當(dāng)發(fā)生變化時(shí),可以針對單點(diǎn)進(jìn)行針對處理,大大簡化工作量。

那我們?nèi)绾芜M(jìn)行數(shù)據(jù)分層呢?大概需要分幾層呢?

其實(shí)這個(gè)問題需要根據(jù)實(shí)際的業(yè)務(wù)狀況以及需要處理的數(shù)據(jù)體量來進(jìn)行劃分,介紹分層之前,咱們先來了解下會(huì)有哪些分層,每層的作用和目的是啥。

1.第一層:操作數(shù)據(jù)存儲(chǔ)層 ODS

ODS層中的數(shù)據(jù)是從各類業(yè)務(wù)系統(tǒng)中(銷售系統(tǒng)、客戶關(guān)系管理系統(tǒng)等等)直接匯入本層。本層數(shù)據(jù)本身的特點(diǎn)是基本上最大程度還原業(yè)務(wù)系統(tǒng)中的數(shù)據(jù)。接入之前需要進(jìn)行清洗等操作,保證接入本層的數(shù)據(jù)盡可能是潔凈可用的。

ODS層的表通常包括兩類,一個(gè)用于存儲(chǔ)當(dāng)前需要加載的數(shù)據(jù),一個(gè)用于存儲(chǔ)處理完后的歷史數(shù)據(jù)。

特點(diǎn):分層中最細(xì)粒度的數(shù)據(jù),整體數(shù)倉中最底層的數(shù)據(jù),進(jìn)行簡單加工后直接從業(yè)務(wù)系統(tǒng)接入。

數(shù)據(jù)來源:

1)業(yè)務(wù)庫

  • 經(jīng)常會(huì)使用sqoop來抽取,例如每天定時(shí)抽取一次。
  • 實(shí)時(shí)方面,可以考慮用canal監(jiān)聽mysql的binlog,實(shí)時(shí)接入即可。

2)埋點(diǎn)日志

  • 日志一般以文件的形式保存,可以選擇用flume定時(shí)同步。
  • 可以用spark streaming或者Flink來實(shí)時(shí)接入。
  • kafka。

消息隊(duì)列:即來自ActiveMQ、Kafka的數(shù)據(jù)等。

2. 第二層:數(shù)據(jù)倉庫層 DW

1)第一類:公共維度匯總層 DIM(Dimension)

主要由維度表(維表)構(gòu)成。維度是邏輯概念,是衡量和觀察業(yè)務(wù)的角度。維表是根據(jù)維度及其屬性將數(shù)據(jù)平臺(tái)上構(gòu)建的物理化的表,采用寬表設(shè)計(jì)的原則。

2)第二類:數(shù)據(jù)倉庫層DW(Data Warehouse)

這一層是基于ODS和DIM層的數(shù)據(jù)做輕度匯總。所謂輕度匯總就是按照一定的主題去組合這些數(shù)據(jù),例如:作者信息表、用戶信息表、稿件信息表。

數(shù)據(jù)倉庫層從上到下,又可以分為3個(gè)層:數(shù)據(jù)細(xì)節(jié)層DWD、數(shù)據(jù)中間層DWM、數(shù)據(jù)服務(wù)層DWS。

  1. 數(shù)據(jù)細(xì)節(jié)層:data warehouse details,DWD:這層目的在于將ODS層進(jìn)行和DW層進(jìn)行隔離。進(jìn)入DW層之前同樣需要把數(shù)據(jù)進(jìn)行處理和清洗,例如:除去空數(shù)據(jù)和臟數(shù)據(jù)等等。
  2. 數(shù)據(jù)中間層:Data Warehouse Middle,DWM;該層是在DWD層的數(shù)據(jù)基礎(chǔ)上,對數(shù)據(jù)做一些輕微的聚合操作,生成一些列的中間結(jié)果表,提升公共指標(biāo)的復(fù)用性,減少重復(fù)加工的工作。
  3. 數(shù)據(jù)服務(wù)層:Data Warehouse Service,DWS;該層是基于DWM上的基礎(chǔ)數(shù)據(jù),整合匯總成分析某一個(gè)主題域的數(shù)據(jù)服務(wù)層,一般是寬表,用于提供后續(xù)的業(yè)務(wù)查詢,OLAP分析,數(shù)據(jù)分發(fā)等。一般來說,該層的數(shù)據(jù)表會(huì)相對較少;一張表會(huì)涵蓋比較多的業(yè)務(wù)內(nèi)容,由于其字段較多,因此一般也會(huì)稱該層的表為寬表。

3. 第三類:應(yīng)用數(shù)據(jù)服務(wù)層 ADS

Application Data Service。該層主要是提供數(shù)據(jù)產(chǎn)品和數(shù)據(jù)分析使用的數(shù)據(jù),一般會(huì)存放在ES、MySQL等系統(tǒng)中供線上系統(tǒng)使用,也可能會(huì)存在Hive或者Druid中供數(shù)據(jù)分析和數(shù)據(jù)挖掘使用。

ADS層數(shù)據(jù)是數(shù)據(jù)倉庫的最后一層數(shù)據(jù),以DWS層數(shù)據(jù)為基礎(chǔ)進(jìn)行數(shù)據(jù)處理。

那常見的分層結(jié)構(gòu)有哪些呢?如何去應(yīng)用這些分層呢?

四、常見的數(shù)據(jù)分層應(yīng)用

這3大類5層的數(shù)據(jù)層,是層層遞進(jìn),并非每一層都是必不可少的,想要建設(shè)一套較為標(biāo)準(zhǔn)的數(shù)倉,現(xiàn)在市面上都是如何進(jìn)行構(gòu)建呢?

1. 三級(jí)數(shù)倉分層

我們先來看下簡單的三級(jí)分層,三級(jí)分層氛圍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ù)量大小、抽取方式等方面的問題。

下面是兩個(gè)例子,分別適用于傳統(tǒng)行業(yè)和互聯(lián)網(wǎng)行業(yè):

  • 傳統(tǒng)行業(yè)ODS層:各業(yè)務(wù)系統(tǒng)對接來的數(shù)據(jù)。拿交易源數(shù)據(jù)來說(每次訂單的記錄,一個(gè)訂單有多個(gè)記錄)。例如:交易源數(shù)據(jù)、用戶源數(shù)據(jù)、貨物源數(shù)據(jù)
  • 互聯(lián)網(wǎng)行業(yè)ODS層:除業(yè)務(wù)系統(tǒng)外,還會(huì)對接日志采集系統(tǒng)。拿app日志埋點(diǎn)來說,本層會(huì)記錄用戶每次登陸、app內(nèi)的行為數(shù)據(jù),一個(gè)用戶會(huì)有多條記錄)。例如:APP日志數(shù)據(jù)、小程序日志數(shù)據(jù)、用戶登錄數(shù)據(jù)等等

2)第二層:DWD層

主要存檔從ODS層匯總上來的數(shù)據(jù),以業(yè)務(wù)過程作為建模驅(qū)動(dòng),基于每個(gè)具體的業(yè)務(wù)過程特點(diǎn),構(gòu)建最細(xì)粒度的明細(xì)事實(shí)表??蓪⒛承┲匾獙傩宰侄巫鲞m當(dāng)冗余,也即寬表化處理。從ODS層匯總上來的數(shù)據(jù)。最大限度保證與ODS層數(shù)據(jù)一致。

下面是兩個(gè)例子,分別適用于傳統(tǒng)行業(yè)和互聯(lián)網(wǎng)行業(yè):

  • 傳統(tǒng)行業(yè)DWD層:拿訂單數(shù)據(jù)來說,本層會(huì)記錄訂單粒度的支付情況,一個(gè)訂單僅有一條記錄。例如:訂單交易表、用戶表、活動(dòng)表、貨物表。
  • 互聯(lián)網(wǎng)行業(yè)DWD層:拿用戶登錄表來說,本層記錄用戶在。

3)第三層:DWM層

是對DWD層的生產(chǎn)數(shù)據(jù)進(jìn)行輕度綜合和匯總統(tǒng)計(jì)(可以把復(fù)雜的清洗,處理包含,如根據(jù)PV日志生成的會(huì)話數(shù)據(jù))。輕度綜合層與DWD的主要區(qū)別在于二者的應(yīng)用領(lǐng)域不同,DWD的數(shù)據(jù)來源于生產(chǎn)型系統(tǒng),并未滿意一些不可預(yù)見的需求而進(jìn)行沉淀;輕度綜合層則面向分析型應(yīng)用進(jìn)行細(xì)粒度的統(tǒng)計(jì)和沉淀。例如:按照天粒度去匯總某一主題的數(shù)據(jù)情況。

  • 傳統(tǒng)行業(yè)DWM層:從DWD層交易表(天粒度)、用戶表(天粒度)、貨物表(天粒度)。
  • 互聯(lián)網(wǎng)行業(yè)DWM層:用戶登錄行為表(天粒度)、訂單表(天粒度)。

2. 四級(jí)數(shù)據(jù)分層

在上述三層的基礎(chǔ)之上,增加第四層DWS層。

1)第四層:DWS層

DWS=DWD+DWM

通過由輕度匯總層和明細(xì)層數(shù)據(jù)計(jì)算生成。又稱數(shù)據(jù)集市或大寬表。按照業(yè)務(wù)劃分,如流量、訂單、用戶等,生成字段比較多的寬表,?用于提供后續(xù)的業(yè)務(wù)查詢,OLAP分析,數(shù)據(jù)分發(fā)等。

  • 傳統(tǒng)行業(yè)DWS層:用戶主題寬表、貨物主題寬表、店鋪主題寬表。
  • 互聯(lián)網(wǎng)行業(yè)DWS層:用戶主題寬表、店長主題寬表。

3. 五級(jí)數(shù)據(jù)分層

在上述四層的基礎(chǔ)上,增加第五層ADS層。

1)第五層:ADS層

ADS層可以理解為對業(yè)務(wù)的“專屬定制表”。ADS ≈ DWD+DWS,而且和DWD、DWS的表名側(cè)重于object或用戶行為不同的是,ADS的表名可以看出有特定的業(yè)務(wù)特征。

  • 傳統(tǒng)行業(yè)ADS層:爆款商品排行表、高價(jià)值用戶表、用戶近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é)議

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請登錄
  1. 四級(jí)數(shù)據(jù)分層,第四層:DWS層,在這里的配圖中,沒有出現(xiàn)dws層。四層數(shù)據(jù)分層提及的分層指的是圖中的DWM,還是ADS,還是?

    來自江蘇 回復(fù)
  2. 辛苦了

    回復(fù)
  3. 很細(xì)致,不過小白可能部分內(nèi)容看不懂,可以加一些專業(yè)術(shù)語的注釋

    來自浙江 回復(fù)
    1. 好主意!可以舉些例子嗎?比如說哪些名詞看起來比較困惑呢

      來自上海 回復(fù)
    2. 比如OLAP分析、天粒度,這些名詞說實(shí)話不是業(yè)內(nèi)人士,即使是開了百度/Google也看不懂,可以適當(dāng)解釋一下,有助于提升閱讀體驗(yàn)。

      來自浙江 回復(fù)
    3. 感謝建議,我再完善一下哈

      來自上海 回復(fù)
    4. http://theventurebank.com/data-analysis/5182829.html
      關(guān)于粒度的解釋可以看下這篇文章,下篇會(huì)專門介紹下olap

      來自上海 回復(fù)