數(shù)倉那點(diǎn)事:從入門到佛系
數(shù)倉那點(diǎn)事從入門到佛系
|0x00 初識數(shù)倉
每個(gè)人對于數(shù)倉的理解,都源自于大數(shù)據(jù),而大數(shù)據(jù)有源自于那個(gè)神奇的故事:從前有一家超市,它有一個(gè)怪現(xiàn)象,尿布和啤酒赫然擺在一起出售。外行人不明所以,但內(nèi)行人卻看到了尿布和啤酒的銷量雙雙增加。為什么呢?正是因?yàn)榇髷?shù)據(jù)發(fā)揮了它最原始的作用:組合分析。婦女們經(jīng)常會囑咐她們的丈夫下班以后要為孩子買尿布,而丈夫在買完尿布之后又要順手買回自己愛喝的啤酒,因此啤酒和尿布在一起購買的機(jī)會還是很多的。這就是大數(shù)據(jù)最初的魔力。
數(shù)據(jù)倉庫已經(jīng)是一個(gè)非常成熟穩(wěn)定的模型了,Inmon在它的書里將數(shù)據(jù)倉庫定義為:一個(gè)面向主題的(Subject Oriented)、集成的(Integrated)、反映歷史變化(Time Variant)、相對穩(wěn)定的(Non-Volatile)的數(shù)據(jù)集合,用于支持管理決策(Decision Making Support)。在2017年,TDWI提出了一個(gè)數(shù)據(jù)分析成熟度模型(Big Data Maturity Model),比較好的解釋了一家公司數(shù)據(jù)倉庫的建設(shè)階段,就像下圖這樣:

這個(gè)模型有六個(gè)階段:孕育期、嬰兒期、兒童期、少年期、成人期、長者期。
孕育期:打印基本的報(bào)表,交給各個(gè)部門的員工來手工填寫;
嬰兒期:用Excel完成基本的數(shù)據(jù)組織與統(tǒng)計(jì);
兒童期:能夠部署獨(dú)立的應(yīng)用程序,來滿足單個(gè)部門的需求;
少年期:形成了基本的數(shù)倉概念,并引入了數(shù)據(jù)的定義、規(guī)則、維度標(biāo)準(zhǔn)化等概念;
成人期:搭建企業(yè)級數(shù)據(jù)倉庫,并通過整合的數(shù)據(jù)來支持一些關(guān)鍵業(yè)務(wù)的驅(qū)動;
長者期:BI的概念形成,數(shù)倉建設(shè)非常規(guī)范。
當(dāng)然,由于中國過早的進(jìn)入了互聯(lián)網(wǎng)和移動互聯(lián)網(wǎng)時(shí)代,并沒有經(jīng)歷過軟件時(shí)代的相關(guān)歷程,因此數(shù)倉的概念從一開始就與大數(shù)據(jù)緊緊的綁定在了一起,成為了每個(gè)互聯(lián)網(wǎng)公司的標(biāo)配部門。
|0x01 大數(shù)據(jù)時(shí)代里的數(shù)倉入門
如果你是一名數(shù)據(jù)開發(fā)的同學(xué),出去面試,基本都會被問到一個(gè)問題:“如果是你來負(fù)責(zé)數(shù)據(jù)倉庫建設(shè),你會考慮如何來建設(shè)好數(shù)據(jù)倉庫?”這個(gè)問題通常是考察候選人的架構(gòu)設(shè)計(jì)水平的,看你對于業(yè)務(wù)有多深入的了解。大部分人的回答都是偏技術(shù)層面的,通常會說出一個(gè)比較完整的數(shù)據(jù)分層模型,但僅僅分層清晰就足夠了嗎?不一定。
我們先看一下通常的數(shù)據(jù)倉庫分層模型:

Data Source Layer:源數(shù)據(jù)層,代表收集到數(shù)據(jù)倉庫中的各類原始日志,包括采集的網(wǎng)頁/客戶端日志、數(shù)據(jù)庫操作數(shù)據(jù)、第三方數(shù)據(jù)等; Data Extraction Layer:數(shù)據(jù)抽取層,主要目的在于將數(shù)據(jù)沉淀到數(shù)倉平臺上,可以用消息隊(duì)列來做緩沖; Staging Area:數(shù)據(jù)公共層:目的在于為后續(xù)進(jìn)一步的數(shù)據(jù)處理和整合提供便利; ETL Layer:ETL層,將數(shù)據(jù)進(jìn)行初始的加工,帶有了一定的處理邏輯,將數(shù)據(jù)轉(zhuǎn)換為結(jié)構(gòu)化或者半結(jié)構(gòu)化這種具備分析屬性的格式; Data Storage Layer:數(shù)據(jù)存儲層,將數(shù)據(jù)存儲到分布式平臺上,并提供容錯(cuò)、均衡等功能; Data Logic Layer:數(shù)據(jù)邏輯層,這部分是數(shù)據(jù)倉庫邏輯概念的核心層; Data Presentation Layer:數(shù)據(jù)展示層,主要目的在于提供報(bào)表數(shù)據(jù); Metadata Layer:元數(shù)據(jù)層,該層用于描述數(shù)據(jù)倉庫存儲的數(shù)據(jù); System Operations Layer:系統(tǒng)操作層,該層包括了數(shù)據(jù)倉庫系統(tǒng)中操作的信息,比如ETL任務(wù)的狀態(tài)、系統(tǒng)的性能,用戶access記錄等。

|0x02 數(shù)倉如何變得有用
數(shù)據(jù)倉庫是不是有用,要看它能做什么。通常而言,數(shù)據(jù)倉庫要解決業(yè)務(wù)的問題,為業(yè)務(wù)的發(fā)展提供決策依據(jù)和運(yùn)營參考,換句話說,數(shù)據(jù)倉庫要與業(yè)務(wù)有強(qiáng)綁定的關(guān)系。如果一個(gè)數(shù)據(jù)倉庫只能把數(shù)據(jù)接入進(jìn)來,做好分層,但不知道給誰用,那么這個(gè)數(shù)據(jù)倉庫通常就是沒有價(jià)值的,在你做部門匯報(bào)的時(shí)候,會被大佬瘋狂diss。那么業(yè)務(wù)會怎么用數(shù)據(jù)?通常而言,還是從數(shù)倉的概念出發(fā),我們給出三個(gè)很具體的用途:
第一個(gè)用途是集成:對于互聯(lián)網(wǎng)公司來說,數(shù)據(jù)通常十分的零散,例如數(shù)據(jù)庫日志在運(yùn)維手里、廣告數(shù)據(jù)在廣告團(tuán)隊(duì)那里、業(yè)務(wù)數(shù)據(jù)在后端那里,產(chǎn)品同學(xué)在全局角度上設(shè)計(jì)了一些好的產(chǎn)品或者功能,需要綜合各方面的情況,來看這個(gè)產(chǎn)品或者功能是否有用,那么數(shù)據(jù)倉庫就是他們唯一的選擇。從技術(shù)層面說,決策支持需求通常是全局的、關(guān)聯(lián)的,必須將數(shù)據(jù)整合到一個(gè)地方才能方便統(tǒng)計(jì)分析和挖掘。從數(shù)據(jù)處理層面說,不同的數(shù)據(jù)格式不一樣,有的是關(guān)系型的數(shù)據(jù)表,有的是本結(jié)構(gòu)化的日志,有的數(shù)據(jù)還以多媒體的形式存在,也需要將數(shù)據(jù)轉(zhuǎn)化成相對統(tǒng)一的格式。
在集成的層面上,我們就需要強(qiáng)調(diào)不同開源框架的作用與相互配合了。自底向上,與OSI類似,通用框架下的大數(shù)據(jù)體系有七層:數(shù)據(jù)源、數(shù)據(jù)收集層、數(shù)據(jù)存儲層、資源管理與服務(wù)協(xié)調(diào)層、計(jì)算引擎層、數(shù)據(jù)分析層及數(shù)據(jù)可視化層。
第二個(gè)用途是面向主題:我們把四面八方的數(shù)據(jù)都拿到了,那怎樣組織這些數(shù)據(jù)呢?換句話說,產(chǎn)品丟了一個(gè)又一個(gè)的需求過來,我們通過怎樣的方式,能夠盡快消滅掉這些需求嗯?通常而言,這里就要引入兩個(gè)很重要的概念:建模、域。
在數(shù)據(jù)倉庫領(lǐng)域,經(jīng)常會聽到兩個(gè)名字,Bill Inmon與Ralph Kimball。Inmon最早提出數(shù)據(jù)倉庫的概念,在構(gòu)建數(shù)據(jù)倉庫過程中,主張自頂向下的設(shè)計(jì),先設(shè)計(jì)好數(shù)倉的整體架構(gòu),然后進(jìn)行局部設(shè)計(jì),而Kimball正好相反,主張自底向上設(shè)計(jì),先根據(jù)各個(gè)業(yè)務(wù)主題進(jìn)行設(shè)計(jì),然后通過維度模型將數(shù)據(jù)倉庫整合起來。目前Kimball的維度建模普遍被大家采用。
下圖為Inmon構(gòu)建過程示例:

域的概念,簡單來說就是主題,是業(yè)務(wù)方向的統(tǒng)稱。為什么要按主題來組織?因?yàn)?strong>數(shù)據(jù)倉庫是分析型的數(shù)據(jù)集合,我們分析的出發(fā)點(diǎn)通常是業(yè)務(wù)實(shí)體,分析的目的就是要了解業(yè)務(wù)實(shí)體的各種行為狀態(tài)、了解每個(gè)業(yè)務(wù)的效果。通過將相對固定的業(yè)務(wù)領(lǐng)域,按照一定的抽象規(guī)則進(jìn)行歸納,便可以形成相對獨(dú)立的信息模型。通常而言,我們會在公共層,也就是DWS層進(jìn)行數(shù)據(jù)域的劃分,在某些已成熟單一主體業(yè)務(wù)按照這樣來做比較好,比如像金融,安全等領(lǐng)域,通過對主體業(yè)務(wù)內(nèi)的數(shù)據(jù)進(jìn)行抽象分類,進(jìn)行精細(xì)化的管理。但是,當(dāng)業(yè)務(wù)領(lǐng)域過多時(shí),會將數(shù)據(jù)管理復(fù)雜化,在當(dāng)前業(yè)務(wù)快速響應(yīng)的時(shí)代,基于業(yè)務(wù)+數(shù)據(jù)域的劃分或許是更好的一種管理方式,它沒有對原有的業(yè)務(wù)重新歸納,基于非直接業(yè)務(wù)數(shù)據(jù)也從橫向整體通盤進(jìn)行考慮。如下圖所說:

第三個(gè)用途是反應(yīng)歷史變化:可能很多業(yè)務(wù)場景并不涉及到歷史變化,但一旦涉及到了,就絕不是一件簡單的事情,尤其是在電商領(lǐng)域??梢哉f,歷史變化是一個(gè)將縱向比對橫向的過程,只有對比歷史才能發(fā)掘目前數(shù)據(jù)的價(jià)值。所以,數(shù)據(jù)倉庫有一個(gè)很重要的使命,就是保存歷史數(shù)據(jù)的狀態(tài),免得產(chǎn)品同學(xué)挖出了一個(gè)坑后,你無從下手排查……
但是,歷史數(shù)據(jù)的保存是有成本的,如果不加區(qū)分全量保存,會對存儲系統(tǒng)產(chǎn)生非常大的壓力,很快Hadoop集群就是各種90%、各種瘋狂報(bào)警了。那么我們?nèi)绾谓M織和整理歷史變化數(shù)據(jù)呢?通常而言,這里就是拉鏈表、快照事實(shí)表等概念了。
下圖是快照事實(shí)表的說明:


下圖是拉鏈表的說明:

|0xFF 有用之后就是佛系
即便我們進(jìn)階了很多,既有技術(shù)支撐,也有方法論鋪墊之后,還是會面對一個(gè)現(xiàn)實(shí)的問題:工作內(nèi)容沒有價(jià)值。大家其實(shí)能說出很多很多的原因,比如下面這些:
1.工作職責(zé)劃分不明確,把數(shù)據(jù)分析當(dāng)作報(bào)表開發(fā),怎么體現(xiàn)價(jià)值?
2.需求一個(gè)接一個(gè)做不完,產(chǎn)品不把分析當(dāng)合作伙伴,就是工具!
3.分析師沒有主動權(quán),只能被動接需求,需求是誰提的,誰的成果和價(jià)值才高!
對于不同的角色,能做的事情是很不同的:
1.對于一名執(zhí)行者,小兵,沒什么可說的,老老實(shí)實(shí)把自己的專業(yè)度提升到自己的巔峰,你的專業(yè)度才是你的立身之本,這都沒有,那你有什么用?老大爭取來了項(xiàng)目,你能完成嗎?
2.對于一名團(tuán)隊(duì)的骨干,要學(xué)會去幫助老大發(fā)掘有價(jià)值的項(xiàng)目和好的切入點(diǎn),去推動,去協(xié)調(diào)。你具備的不只是專業(yè)技能,更多的是一名職業(yè)人的職業(yè)性。
3.對于團(tuán)隊(duì)的老大,要學(xué)會共贏,一定要能夠把大老板的路子打通,有一個(gè)至多個(gè)業(yè)務(wù)方的盟友?;ヂ?lián)網(wǎng)很多Leader都是從技術(shù)轉(zhuǎn)過來的,這時(shí)候要學(xué)會轉(zhuǎn)變思維,不要總感覺自己是一名頂尖的工程師。
當(dāng)然,可能我們一直無法做到團(tuán)隊(duì)老大或者TL的位置,會長期以團(tuán)隊(duì)骨干的身份存在,那么更加的佛系一些,有時(shí)間多讀讀書,像《格魯夫給經(jīng)理人的第一課》,因?yàn)楣ぷ?,或者說職場,不是一次短跑,而是一次長跑,幸運(yùn)不是每天都有,而是階段性的。佛系的意義,在于冬天的時(shí)候,給自己多積累經(jīng)驗(yàn),慢慢跑,等到春暖花開的時(shí)候,再繼續(xù)跟上去,把過去的知識再發(fā)揮出來。

↓ ↓ ↓掃描二維碼,加入陳老師的知識星球 ↓ ↓ ↓
