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