寫給小白的“數(shù)據(jù)倉庫”科普
數(shù)據(jù)倉庫,英文全稱Data Warehouse,簡(jiǎn)稱DW或DWH。
數(shù)據(jù)倉庫和數(shù)據(jù)庫的名字非常接近,但兩者是完全不同的東西。
我們先從數(shù)據(jù)倉庫的歷史開始說起吧。
數(shù)據(jù)倉庫的誕生
數(shù)據(jù)倉庫并不是一個(gè)新概念。事實(shí)上,它誕生至今,已經(jīng)有幾十年的歷史。
上世紀(jì)70年代,關(guān)系數(shù)據(jù)庫(也就是傳統(tǒng)數(shù)據(jù)庫的主要類型)剛剛崛起的時(shí)候,美國康奈爾大學(xué)博士比爾·恩門(Bill Innmon,也有譯為比爾·因蒙)就開始定義和討論數(shù)據(jù)倉庫這一術(shù)語。
1988年,IBM研究人員巴里·德夫林(Barry Devlin)和鮑爾·穆爾菲(Paul Murphy),聯(lián)合發(fā)表了文章《商業(yè)和信息系統(tǒng)的架構(gòu)》,其中引入了“商業(yè)數(shù)據(jù)倉庫”一詞。他們還開發(fā)了一種叫做“業(yè)務(wù)數(shù)據(jù)倉庫”的系統(tǒng)。
幾年后,1990年,美國科學(xué)家拉爾夫·金博爾(Ralph Kimball)創(chuàng)立了Red Brick Systems公司,推出專門用于數(shù)據(jù)倉庫的數(shù)據(jù)庫管理系統(tǒng)Red Brick Warehouse。
1991年,又是前面那個(gè)比爾·恩門,創(chuàng)立了Prism Solutions公司,推出用于開發(fā)數(shù)據(jù)倉庫的軟件Prism Warehouse Manager。
同年,比爾·恩門正式出版了數(shù)據(jù)倉庫的經(jīng)典著作——《構(gòu)建數(shù)據(jù)庫倉庫》,標(biāo)志著數(shù)據(jù)倉庫概念的正式確立。
后來,比爾·恩門也被世人譽(yù)為“數(shù)據(jù)倉庫之父”。
比爾·恩門
數(shù)據(jù)倉庫的定義和特征
那么,到底什么是數(shù)據(jù)倉庫呢?
比爾·恩門在《構(gòu)建數(shù)據(jù)庫倉庫》書中給出了一個(gè)定義——
數(shù)據(jù)倉庫,是一個(gè)面向主題的(Subject Oriented)、集成的(Integrated)、相對(duì)穩(wěn)定的(Non-Volatile)、反映歷史變化(Time Variant)的數(shù)據(jù)集合,用于支持管理決策(Decision Making Support)。
這個(gè)定義非常抽象、燒腦,但準(zhǔn)確概括了數(shù)據(jù)倉庫的幾個(gè)關(guān)鍵特征,值得剖析一下。
- 支持管理決策
先說“支持管理決策”,這是數(shù)據(jù)倉庫的作用,也是創(chuàng)造它的主要目的。
簡(jiǎn)單來說,傳統(tǒng)數(shù)據(jù)庫主要是員工使用,支撐某項(xiàng)具體的工作。例如收銀系統(tǒng)等。
而數(shù)據(jù)倉庫,主要是管理層使用,用于掌握宏觀情況,以便做出更合理的決策。
以前小棗君給大家介紹數(shù)據(jù)庫入門的時(shí)候,提到過OLTP和OLAP。
OLTP是聯(lián)機(jī)事務(wù)處理(Online Transaction Processing)數(shù)據(jù)庫,出現(xiàn)較早,也是早期關(guān)系型數(shù)據(jù)庫的主要用途,用于支持日常業(yè)務(wù)操作,如訂單處理、庫存管理和銀行交易等。它們通常處理大量簡(jiǎn)單的讀寫操作,需要系統(tǒng)能夠快速響應(yīng),且非??煽?。
OLAP是聯(lián)機(jī)分析處理(Online Analytical Processing)數(shù)據(jù)庫,出現(xiàn)較晚,用于支持復(fù)雜的分析查詢,如數(shù)據(jù)挖掘、趨勢(shì)分析和財(cái)務(wù)報(bào)告等。它們通常處理大量復(fù)雜的只讀查詢,對(duì)算力要求高,也需要支持很大的數(shù)據(jù)吞吐量。
數(shù)據(jù)倉庫,很顯然就是OLAP型?;蛘咭部梢哉f,數(shù)據(jù)倉庫是OLAP數(shù)據(jù)庫場(chǎng)景的延伸和發(fā)展。OLAP類應(yīng)用,催生了數(shù)據(jù)倉庫。
概括來說,數(shù)據(jù)倉庫是一個(gè)戰(zhàn)略級(jí)的工具。它通常用于商業(yè)智能(Business Intelligence,簡(jiǎn)稱BI,咨詢機(jī)構(gòu)Gartner造出來的流行詞)和決策支持,可以幫助企業(yè)從大量數(shù)據(jù)中獲得有價(jià)值的信息,增加洞察能力。
終極目的,當(dāng)然是增加收入、提升效率、降低成本。
- 面向主題
傳統(tǒng)數(shù)據(jù)庫,圍繞具體的工作(應(yīng)用)來組織數(shù)據(jù),用于一個(gè)明確的事務(wù)。例如進(jìn)銷存數(shù)據(jù)庫、考勤數(shù)據(jù)庫、財(cái)務(wù)數(shù)據(jù)庫等。
而數(shù)據(jù)倉庫,是按照主題來組織數(shù)據(jù)的。所謂主題,是一個(gè)特定的業(yè)務(wù)領(lǐng)域,或者一個(gè)明確的分析目標(biāo),例如銷售分析主題、員工敬業(yè)度主題,學(xué)生在校表現(xiàn)主題等等。主題的范圍更大,level(層級(jí))更高。
簡(jiǎn)單來說,數(shù)據(jù)倉庫的數(shù)據(jù),是多個(gè)傳統(tǒng)數(shù)據(jù)庫的集合和“拉通”。它把不同數(shù)據(jù)庫表單的信息挑選整合在一起,提供了一個(gè)更全面的數(shù)據(jù)呈現(xiàn)。
主題性的設(shè)計(jì),顯然更適合支持管理者做決策和分析。
- 集成
集成,是指數(shù)據(jù)倉庫可以整合來自多個(gè)不同數(shù)據(jù)源(企業(yè)內(nèi)部數(shù)據(jù)庫、供應(yīng)商數(shù)據(jù)庫、渠道商數(shù)據(jù)庫等)的數(shù)據(jù)。
多方面的數(shù)據(jù)源,也是為了提供一個(gè)更全面的視角,以便服務(wù)于分析和決策。
這些數(shù)據(jù),可以包括結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)等。但數(shù)據(jù)倉庫,主要還是結(jié)構(gòu)化數(shù)據(jù)為主。
- 相對(duì)穩(wěn)定
相對(duì)穩(wěn)定,指的是數(shù)據(jù)一旦被加載到數(shù)據(jù)倉庫中,通常不會(huì)更新或修改,確保了數(shù)據(jù)的穩(wěn)定性和用于長(zhǎng)期分析的可靠性。
換言之,數(shù)據(jù)倉庫所涉及的操作,主要是數(shù)據(jù)查詢,而不是修改。
除了數(shù)據(jù)之外,數(shù)據(jù)倉庫的架構(gòu)一般也不會(huì)頻繁變化。
- 反映歷史變化
傳統(tǒng)數(shù)據(jù)庫,一般都是數(shù)據(jù)更新。寫入新數(shù)據(jù),替換舊數(shù)據(jù)。
數(shù)據(jù)倉庫不一樣。它保存了大量的歷史數(shù)據(jù),有利于企業(yè)從時(shí)間的維度,分析業(yè)務(wù)的發(fā)展趨勢(shì)。
面向主題、集成、相對(duì)穩(wěn)定、反映歷史變化,這就是數(shù)據(jù)倉庫的四大特征。
我們還是以超市為例,總結(jié)一下數(shù)據(jù)倉庫和傳統(tǒng)數(shù)據(jù)庫的區(qū)別。
假如你有一個(gè)大超市。
超市有基于傳統(tǒng)數(shù)據(jù)庫的很多個(gè)收銀臺(tái),記錄了每天的每一筆交易(賣出了什么商品,金額是多少)。超市還有庫存系統(tǒng),記錄了商品的信息(一共有多少個(gè)庫存)。還有會(huì)員系統(tǒng)、購物卡系統(tǒng),等等。
所有這些數(shù)據(jù),分散在不同的系統(tǒng)里,雜亂無章。
你把所有系統(tǒng)的數(shù)據(jù)(銷售數(shù)據(jù)、顧客信息、供應(yīng)商記錄等),統(tǒng)一做了整理(比如去掉無效數(shù)據(jù)、統(tǒng)一“日期”格式),按主題分類(比如“銷售分析”、“客戶畫像”),集中存到一個(gè)龐大的數(shù)據(jù)系統(tǒng)里。這就是數(shù)據(jù)倉庫。
然后,你開發(fā)了一些工具,可以分析這些數(shù)據(jù),回答你的一些疑問:
“過去5年哪些商品在春節(jié)賣得最好?”
“上海和北京的顧客購物習(xí)慣有什么差異?”
“如何預(yù)測(cè)明年的商品庫存需求?”
……
也可以以大屏的形式,觀看這些數(shù)據(jù)(掌控全局、運(yùn)籌帷幄的老板既視感):
圖片
當(dāng)然了,這些數(shù)據(jù)也可以開放給各個(gè)部門的主管,幫助部門改善業(yè)績(jī)。
這個(gè)數(shù)據(jù)倉庫,是不是輔助了你的決策,創(chuàng)造了價(jià)值?
數(shù)據(jù)倉庫的架構(gòu)和工作流
接下來,我們看看數(shù)據(jù)倉庫的整體架構(gòu),以及如何搭建。
每個(gè)公司的數(shù)據(jù)倉庫架構(gòu)都不太一樣。但基本上都包括以下幾層:
數(shù)據(jù)倉庫的整體架構(gòu)
原始數(shù)據(jù)層(ODS,Operation Data Store):也叫數(shù)據(jù)引入層、操作數(shù)據(jù)層、數(shù)據(jù)準(zhǔn)備層或貼源層,用于采集和存儲(chǔ)原始數(shù)據(jù)。
數(shù)據(jù)公共層(CDM,Common Data Model):數(shù)據(jù)倉庫的主要部分。有時(shí)候又分為基礎(chǔ)層/明細(xì)層(DWD,DW Detail)、匯總層/服務(wù)層(DWS,DW Service)、公共維度層(DIM)。DWD對(duì)源數(shù)據(jù)進(jìn)行清洗以便將其加載到數(shù)據(jù)倉庫中。DWS將經(jīng)過清洗和轉(zhuǎn)換后的數(shù)據(jù)并輕度匯總。DIW用于保存維度信息,用于建模。
數(shù)據(jù)應(yīng)用層(ADS,Application Data Service):主要功能是保存結(jié)果數(shù)據(jù),為外部系統(tǒng)提供查詢接口,用于滿足特定的商業(yè)智能、數(shù)據(jù)挖掘和報(bào)表應(yīng)用。
數(shù)據(jù)倉庫的架構(gòu)和它的工作流有密切的關(guān)系。
一般來說,數(shù)據(jù)倉庫的工作流分為以下幾步:
1、數(shù)據(jù)抽取
前面說了,數(shù)據(jù)倉庫有很多的數(shù)據(jù)源。所以,第一步,是從不同的數(shù)據(jù)源系統(tǒng)中抽取數(shù)據(jù)。
數(shù)據(jù)抽取是定期進(jìn)行的,比如每天或每周,以確保數(shù)據(jù)是最新的。
2、數(shù)據(jù)清洗和轉(zhuǎn)換
抽取出的數(shù)據(jù),通常需要經(jīng)過清洗和轉(zhuǎn)換,以提高數(shù)據(jù)質(zhì)量和一致性。
清洗包括修正錯(cuò)誤、去除重復(fù)項(xiàng)、處理缺失值等。轉(zhuǎn)換則是將數(shù)據(jù)轉(zhuǎn)化為統(tǒng)一的格式,以便在數(shù)據(jù)倉庫中進(jìn)行有效存儲(chǔ)和查詢。
3、數(shù)據(jù)建模
數(shù)據(jù)倉庫采用特定的數(shù)據(jù)模型,對(duì)數(shù)據(jù)進(jìn)行組織和存儲(chǔ),設(shè)計(jì)數(shù)據(jù)表。選擇合適的模型,可以簡(jiǎn)化數(shù)據(jù)查詢和分析過程,提高查詢性能。
數(shù)據(jù)倉庫建模中,比較有代表性的兩類方法論是Ralph Kimball的建模方法論和Bill Inmon建模方法論(沒錯(cuò),就是前面提到的那兩個(gè)大佬)。
Ralph Kimball的維度建模方法論,是一種常用的數(shù)據(jù)倉庫建模方法,它強(qiáng)調(diào)使用星型模型、雪花模型、星座模型來設(shè)計(jì)數(shù)據(jù)倉庫。
圖片
Bill Inmon則認(rèn)為企業(yè)數(shù)據(jù)倉庫應(yīng)為原子數(shù)據(jù)的集成倉庫,應(yīng)用第三范式和ER模型而非維度建模的事實(shí)表、維度表來建模。
這里要提到一個(gè)元數(shù)據(jù)的概念。
元數(shù)據(jù)是描述數(shù)據(jù)的數(shù)據(jù)。它用以描述數(shù)據(jù)倉庫內(nèi)數(shù)據(jù)的結(jié)構(gòu)、位置和建立方法,便于數(shù)據(jù)倉庫的管理和使用。
4、數(shù)據(jù)存儲(chǔ)
數(shù)據(jù)倉庫通常采用大容量、高性能的存儲(chǔ)系統(tǒng),以滿足大量數(shù)據(jù)的存儲(chǔ)和查詢需求。數(shù)據(jù)倉庫的存儲(chǔ)結(jié)構(gòu)通常針對(duì)查詢性能進(jìn)行了優(yōu)化,如列式存儲(chǔ)、索引等。
5、數(shù)據(jù)加載
抽取(Extract)、轉(zhuǎn)換(Transform)和加載(Load),就是著名的ETL三板斧。
ETL后的數(shù)據(jù),會(huì)被加載到數(shù)據(jù)倉庫中。
根據(jù)需要,還可能會(huì)進(jìn)一步加工,例如聚合、摘要和索引創(chuàng)建,以優(yōu)化查詢性能。
另外,數(shù)據(jù)加載可以分為全量加載和增量加載兩種方式,也是根據(jù)需求選擇。
6、數(shù)據(jù)訪問與分析
數(shù)據(jù)倉庫完成數(shù)據(jù)存儲(chǔ)后,就可以開始用了。
數(shù)據(jù)倉庫支持各種數(shù)據(jù)分析和報(bào)表工具,如商業(yè)智能(BI)、SQL查詢、OLAP、數(shù)據(jù)挖掘等。用戶可以通過這些工具,對(duì)數(shù)據(jù)進(jìn)行深入分析,找到其中的規(guī)律和趨勢(shì)。
值得一提的是,數(shù)據(jù)倉庫不僅支持宏觀趨勢(shì)分析,也支持微觀細(xì)節(jié)探究,能夠滿足各個(gè)層級(jí)的需求。
7、數(shù)據(jù)安全和訪問控制
在數(shù)據(jù)倉庫的使用過程中,當(dāng)然還要注意數(shù)據(jù)安全和訪問控制。確保數(shù)據(jù)的安全性和合規(guī)性,防止數(shù)據(jù)泄露和濫用。
圖片
數(shù)據(jù)集市(Data Mart)
數(shù)據(jù)集市可以認(rèn)為是數(shù)據(jù)倉庫的子集,是專用于特定業(yè)務(wù)部門或功能的數(shù)據(jù)系統(tǒng)。它的數(shù)據(jù)是從數(shù)據(jù)倉庫中提取并進(jìn)一步加工得到的。
例如,一個(gè)銷售數(shù)據(jù)集市,可以提供詳細(xì)的銷售報(bào)告和分析,輔助銷售部門進(jìn)行決策。
圖片
數(shù)據(jù)集市的優(yōu)點(diǎn)包括:
1.規(guī)模?。河捎谥话c特定主題相關(guān)的數(shù)據(jù),因此數(shù)據(jù)集市的規(guī)模相對(duì)較小,易于構(gòu)建和維護(hù)。
2.數(shù)據(jù)深:數(shù)據(jù)集市可以滿足特定部門或用戶的需求,提供更加詳細(xì)和深入的數(shù)據(jù)支持。
3.響應(yīng)快:因?yàn)樗臄?shù)據(jù)量相對(duì)較小且針對(duì)特定需求進(jìn)行了優(yōu)化,所以能夠提供更快的查詢響應(yīng)時(shí)間。
4.建設(shè)周期短:由于規(guī)模較小且面向特定需求,數(shù)據(jù)集市的建設(shè)周期通常較短,可以快速實(shí)現(xiàn)并投入使用。(數(shù)據(jù)倉庫的建設(shè)周期一般需要數(shù)個(gè)月甚至一年以上。)
5.靈活性高:數(shù)據(jù)集市的數(shù)據(jù)模型和結(jié)構(gòu)可以根據(jù)特定需求進(jìn)行調(diào)整,具有較高的靈活性。
6.成本低:數(shù)據(jù)集市的實(shí)現(xiàn)成本相對(duì)較低,因?yàn)槠鋽?shù)據(jù)量和復(fù)雜度較數(shù)據(jù)倉庫低。
數(shù)據(jù)倉庫的發(fā)展趨勢(shì)
數(shù)據(jù)倉庫誕生了幾十年,技術(shù)也一直在發(fā)展。為了實(shí)現(xiàn)處理能力的升級(jí),經(jīng)歷了多個(gè)發(fā)展階段。
早期的時(shí)候,基本上就是基于傳統(tǒng)數(shù)據(jù)庫產(chǎn)品(例如Oracle),構(gòu)建的數(shù)據(jù)倉庫。數(shù)據(jù)倉庫最早也是離線的,數(shù)據(jù)源通過離線方式導(dǎo)入到離線數(shù)據(jù)倉庫中。
后來,進(jìn)入21世紀(jì),有了大數(shù)據(jù)技術(shù)(Hadoop、Spark等)。就開始將這些技術(shù)引入到數(shù)據(jù)倉庫,通過MapReduce、Hive、SparkSQL等離線計(jì)算引擎進(jìn)行數(shù)據(jù)處理,處理效率有了明顯提升。
再后來,分別發(fā)展出了Lambda架構(gòu)(離線+實(shí)時(shí)結(jié)合)和Kappa架構(gòu)(批流一體)。
圖片
再再后來,到了近幾年,就是基于MPP數(shù)據(jù)庫和數(shù)據(jù)湖的實(shí)時(shí)數(shù)倉架構(gòu)。
這些架構(gòu)支持高性能并行處理,支持復(fù)雜查詢。在處理能力和效率上已經(jīng)今非昔比,能夠幫助企業(yè)更及時(shí)、更準(zhǔn)確地進(jìn)行決策。
從部署方面來看,數(shù)據(jù)倉庫也有變化。以前是本地單機(jī)部署,后來是分布式部署,再后來,云計(jì)算崛起,就是云部署。
這兩年,AI很火。所以,很多企業(yè)開始研究AI與數(shù)據(jù)系統(tǒng)的深度結(jié)合。
說白了,就是看AI怎么讓數(shù)據(jù)倉庫能夠更智能地處理和分析數(shù)據(jù),提高數(shù)據(jù)的準(zhǔn)確性和可靠性。反過來,AI也是“吃”數(shù)據(jù)的,還要研究如何讓數(shù)據(jù)倉庫這樣的數(shù)據(jù)平臺(tái),更好地服務(wù)于AI的訓(xùn)練和推理。
這里面的發(fā)展前景,還是非常廣闊的。