個人博客:https://renwula.github.io/,本系列基于互聯(lián)網(wǎng)公司數(shù)倉,使用hive搭建數(shù)倉
? ? ? 從業(yè)中,數(shù)倉建模是一個數(shù)倉工程師需要的必備的能力,優(yōu)秀的分層設(shè)計能夠讓整個數(shù)據(jù)體系更易理解和使用。所以想入行數(shù)倉數(shù)倉分層是需要補一補的,才能知道分層的意義。
很多人都不理解為什么分層,分層的意義是什么,分層有這么重要嗎?是的就是這么重要,說一下我的理解:
>1.理清業(yè)務數(shù)據(jù):隨著數(shù)據(jù)量和業(yè)務數(shù)據(jù)表的不斷擴張,需要我們理清數(shù)據(jù)作用域,就是做什么的,可以清晰的找到數(shù)據(jù)來源。
>2.避免重復計算:為了避免多次計算,多次關(guān)聯(lián)多張表,分層可以保存中間結(jié)果,減小開發(fā)成本。
>3.增加數(shù)據(jù)使用便捷性:倉庫層的設(shè)計,讓數(shù)據(jù)能分析,好分析,能支持大部分的數(shù)據(jù)需求。
>4.避免數(shù)據(jù)分歧:統(tǒng)一數(shù)據(jù)口徑,保證數(shù)據(jù)質(zhì)量,避免出現(xiàn)統(tǒng)一指標多種概念。
比較通用的簡單的維度建模分層,分為三層:

?一、ODS層,操作數(shù)據(jù)層
把操作系統(tǒng)的數(shù)據(jù)幾乎無處理的存放在數(shù)倉中,主要有以下工作:
1.將業(yè)務結(jié)構(gòu)化數(shù)據(jù)增量或全量的同步進來;
2.將日志等非結(jié)構(gòu)化的數(shù)據(jù)結(jié)構(gòu)化處理后落地到數(shù)倉中;
3.累計歷史數(shù)據(jù),根據(jù)數(shù)據(jù)業(yè)務需求、審計等要求保存歷史數(shù)據(jù)、清洗數(shù)據(jù),保留的數(shù)據(jù)快照也便于回溯問題。
二、CDM層,公共維度模型層
存放明細事實數(shù)據(jù)、維度數(shù)據(jù)及公共指標匯總數(shù)據(jù),統(tǒng)一口徑,保持數(shù)據(jù)一致性,減少數(shù)據(jù)重復計算,CDM層分為DWD層和DWS層。
1.DWD層,明細數(shù)據(jù)層
dwd層對業(yè)務數(shù)據(jù)進行清洗、規(guī)范化,例如去除作弊數(shù)據(jù),對數(shù)據(jù)字段進行規(guī)范命名從而避免歧義化等,另外可采用維度退化手段,將維度退化到事實表中,減少事實表與維度表的關(guān)聯(lián),提高明細表的易用性。
2.DWS層,匯總數(shù)據(jù)層
dws層,加強指標的維度退化,采用更多的寬表化的手段構(gòu)建公共指標數(shù)據(jù)層,提升公共指標的復用性,減少重復加工。
三、ADS層,應用數(shù)據(jù)層
ads層存放數(shù)據(jù)進行個性化的指標計算,不共用性、復雜性(指數(shù)型、比值型、排名型)等,會基于應用數(shù)據(jù)組裝,像大寬表集市、橫標轉(zhuǎn)縱表、趨勢指標串等,另外由于ADS某些指標具有個性化的特點,盡量不對外提供服務。
舉個例子

1.ods層會將各種日志數(shù)據(jù)及業(yè)務庫中數(shù)據(jù)或者其他一些數(shù)據(jù),進行數(shù)據(jù)落地。
2.dwd層,像用戶登錄表,會做以下一些操作
>2.1去除爬蟲等異常數(shù)據(jù),保持數(shù)據(jù)質(zhì)量
>2.2規(guī)范統(tǒng)一數(shù)據(jù)字段
>2.3拆解需拆解的字段
>2.4融合各端數(shù)據(jù)
3.dws層,像用戶主題表,會做以下一些操作
>3.1統(tǒng)計操作軌跡用戶數(shù)數(shù)據(jù)
>3.2統(tǒng)計用戶購買商品數(shù),登錄次數(shù),訂單數(shù),退貨數(shù),
>3.3增加用戶維度,時間維度
4.ads層,像用戶轉(zhuǎn)化漏斗,可以利用dws層數(shù)據(jù)進行維度分析,分析漏斗,為產(chǎn)品做決策
建模的基本原則
? ? 簡單講建模的一些原則,在建模的考慮中需要加以考慮,避免后續(xù)遇到大坑措手不及,而不要簡單的為了建模而建模。
1.高內(nèi)聚&&低耦合
主要從數(shù)據(jù)業(yè)務特性和訪問特性兩個角度來考慮:
將業(yè)務相近或者相關(guān)、粒度相同的數(shù)據(jù)設(shè)計為一個邏輯或者物理模型;
將高概率同時訪問的數(shù)據(jù)放一起 ,將低概率同時訪問的數(shù)據(jù)分開存儲。
2.核心模型與擴展模型分離
核心模型包括的宇段支持常用的核心業(yè)務,擴展模型包括的字段支持個性化或少量應用的需要,不要讓擴展模型包括的字段過多的入侵核心模型,破壞核心模型的性能及簡潔等
?3.存儲成本與計算性能均衡
在很多時候,設(shè)計可能清晰,但存儲成本很高,或存儲成本很小但計算邏輯復雜,性能差,都需要做一個比較,做到均衡,而非執(zhí)意孤行。
4.公共邏輯下沉及統(tǒng)一
避免重復計算,需將公共邏輯在底層實現(xiàn)并統(tǒng)一口徑
5.冪等性
處理邏輯不變,多次執(zhí)行結(jié)果需保持一致。
6.規(guī)范性
相同含義字段需在多表中命名一致,表命名需清晰規(guī)范,便于查詢及使用,后續(xù)將統(tǒng)一講數(shù)倉規(guī)范。
