帶你輕松理解數(shù)倉為啥分層?
本文介紹了數(shù)倉的分層結(jié)構(gòu)和分層的原因。通過分層,可以使數(shù)據(jù)處理更加規(guī)范、高效,提供可靠的數(shù)據(jù)支持。讓我們一起學(xué)習(xí)一下~
一、數(shù)倉一般分哪些層?
操作數(shù)據(jù)層:ODS(Operational Data Store)
把操作系統(tǒng)數(shù)據(jù)幾乎無處理地存放在數(shù)據(jù)倉庫系統(tǒng)中。
事實(shí)明細(xì)層:DWD(Data Warehouse Detail)
DWD 層是在ODS層基礎(chǔ)上,根據(jù)業(yè)務(wù)過程建模出來的事實(shí)明細(xì)層。
公共匯總層:DWS(Data Warehouse Summary)
一般根據(jù)維表數(shù)據(jù)和明細(xì)事實(shí)數(shù)據(jù)加工生成,作為通用的數(shù)據(jù)模型使用。
應(yīng)用數(shù)據(jù)層:ADS(Application Data Store)
存放數(shù)據(jù)產(chǎn)品個(gè)性化的統(tǒng)計(jì)指標(biāo),根據(jù)明細(xì)層、匯總層及維表數(shù)據(jù)加工生成。
關(guān)于啥是數(shù)倉分層這里就不多介紹了。
首先我們先了解數(shù)倉分層現(xiàn)狀:
各大企業(yè)數(shù)倉都是咋分的?有啥區(qū)別?
經(jīng)過整理各大企業(yè)的數(shù)倉分層情況,經(jīng)過對比可以發(fā)現(xiàn):
不同點(diǎn):
- 命名有些不同,有的叫“a”,有的叫“A”。所以當(dāng)我們遇到看不懂聽不懂的命名時(shí),就可以輕松識破啦。
- 分層數(shù)不同,有些4層,有些5層,每層對數(shù)據(jù)處理有些許差異,比如在貼源層會進(jìn)行3NF建模,猜測是接入業(yè)務(wù)系統(tǒng)太多,有些系統(tǒng)的表設(shè)計(jì)不符合規(guī)范,難以理解,在這層進(jìn)行統(tǒng)一梳理。
相同點(diǎn):
都包括貼源層、明細(xì)層、匯總層、應(yīng)用層。都遵循維度建模理論,數(shù)據(jù)處理的流程本質(zhì)上一樣的,先拆分梳理再聚合匯總。
3NF建模可參考上篇文章的描述:http://www.codemsi.com/data-analysis/5885754.html
二、數(shù)倉為什么分層?
回答這個(gè)問題前,我們可以先思考如果不分層會怎么樣?不分那么多層會怎么樣?
1. 如果不分層會怎么樣?
假設(shè)我們把數(shù)倉里的表都拍平,沒有分層概念,業(yè)務(wù)源數(shù)據(jù)經(jīng)過簡單的數(shù)據(jù)清洗,加載到數(shù)據(jù)倉庫中,直接應(yīng)用于數(shù)據(jù)分析。
好處:數(shù)倉與業(yè)務(wù)系統(tǒng)隔離,數(shù)據(jù)分析不會直接影響到業(yè)務(wù)系統(tǒng)。
壞處:
- 分析難:集成系統(tǒng)的開發(fā)規(guī)則,規(guī)范程度、統(tǒng)計(jì)口徑都不一致。你還要去做數(shù)據(jù)關(guān)系映射,了解原業(yè)務(wù)系統(tǒng)的數(shù)據(jù)邏輯。無法對數(shù)理邏輯進(jìn)行沉淀,每次分析都要重頭準(zhǔn)備數(shù)據(jù)。
- 分析慢:由于業(yè)務(wù)系統(tǒng)是遵循范式建模的,發(fā)現(xiàn)關(guān)聯(lián)了一堆表才能完成分析需求,分析效率極低。
2. 不分那么多層會怎么樣?
看情況,當(dāng)數(shù)據(jù)少,分析需求少,可以不去分dw層,ods直接加工到ads層,我們剛開始就是這樣干的。
發(fā)現(xiàn)好像也不是不行啊,數(shù)據(jù)直接加工到ads層,上層應(yīng)用查詢效率也夠用哈。
此時(shí)的好處:省事,成本很低,效率很高,數(shù)據(jù)出錯(cuò)改的也很快。
此時(shí)的壞處:
- 沒有公共邏輯沉淀,口徑不統(tǒng)一,維度不統(tǒng)一,單個(gè)需求處理起來依然很麻煩。
- 會造成重復(fù)開發(fā),當(dāng)有口徑變動(dòng)時(shí),需要改動(dòng)多處。
- 無法滿足更多的分析需求,拓展性極差,隨時(shí)面臨重構(gòu)的風(fēng)險(xiǎn)。
由此我們可以推演出為啥要進(jìn)行數(shù)倉分層?
- 隔離原始數(shù)據(jù):將業(yè)務(wù)數(shù)據(jù)與統(tǒng)計(jì)分析數(shù)據(jù)解耦,屏蔽相互之間的影響。
- 清晰數(shù)據(jù)職能(把數(shù)據(jù)條理化):讓每個(gè)數(shù)據(jù)層都有自己的作用和職責(zé),將一個(gè)復(fù)雜的任務(wù)拆解成多個(gè)步驟來分步驟完成,每個(gè)層只解決特定的問題,在使用和維護(hù)的時(shí)候能夠更方便和理解。(ODS層與業(yè)務(wù)數(shù)據(jù)保持一致即可,方便溯源數(shù)據(jù)問題,不影響業(yè)務(wù)數(shù)據(jù)庫;DWD基于業(yè)務(wù)過程拆分?jǐn)?shù)據(jù),清洗數(shù)據(jù),適當(dāng)冗余維度;DWS層為了減少重復(fù)開發(fā),沉淀可復(fù)用型指標(biāo);ADS面向應(yīng)用提供數(shù)據(jù))
- 提高數(shù)據(jù)獲取的效率:將海量數(shù)據(jù)的復(fù)雜關(guān)聯(lián)查詢結(jié)果提前計(jì)算好,提高計(jì)算效率。
- 減少重復(fù)開發(fā):規(guī)范數(shù)據(jù)分層,開發(fā)通用的中間層,可以極大地減少重復(fù)計(jì)算的工作。
既然有好處,那肯定也會有壞處,魚和熊掌不可兼得!
- 它需要更多的人力成本和時(shí)間成本來設(shè)計(jì)和實(shí)現(xiàn)。
- 它對模型的維護(hù)提出了更高的要求。比如層級越多,溯源就越麻煩。
- 數(shù)據(jù)的重復(fù)存儲,數(shù)據(jù)需要在各個(gè)層級進(jìn)行計(jì)算存儲。
?三、我們怎么去更好的理解數(shù)倉分層?
以賣早餐為例:
如果你在一個(gè)小巷子里,客戶就是周邊的鄰居,你從選購食材,清洗食材,烹飪食材,然后擺出各種類型的早餐去售賣。
數(shù)據(jù)產(chǎn)品經(jīng)理在這個(gè)過程中,就扮演著廚師的角色,如果我么要做一個(gè)韭菜盒子,就需要去了解哪些食材是我們需要的,“韭菜+粉絲+豆腐+面粉”對吧,韭菜別買成芹菜了,豆腐要買老豆腐,韭菜買回來得洗一下,粉絲得先泡一泡,豆腐要切成豆腐碎,還得和面。準(zhǔn)備工作完成,就開始剁菜餡,切得碎碎,然后在包起來,下鍋炸,最后擺盤售賣。
按部就班的將原材料加工成客戶需求的產(chǎn)品。
【拓展思考】
分層也是一種分工協(xié)作,把一件復(fù)雜的事情模塊化,簡單化,提高可管理性,可維護(hù)性。
還是以賣早餐為例:
如果你是在陸家嘴地鐵口售賣早餐,那么你最多就是賣包子,賣豆?jié){,其他環(huán)節(jié)可能都交給中央廚房去統(tǒng)一處理了。你只需要賣好包子就行。
本文由 @清小墨 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自 Unsplash,基于 CC0 協(xié)議
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)。
- 目前還沒評論,等你發(fā)揮!