有了數(shù)據(jù)湖,數(shù)據(jù)倉庫究竟能不能被取代?他們又有什么樣的區(qū)別呢?
數(shù)據(jù)湖是近兩年中比較新的技術(shù)在大數(shù)據(jù)領(lǐng)域中,對于一個真正的數(shù)據(jù)湖應(yīng)該是什么樣子,現(xiàn)在對數(shù)據(jù)湖認知還是處在探索的階段,像現(xiàn)在代表的開源產(chǎn)品有iceberg、hudi、Delta Lake。
那對于數(shù)據(jù)湖應(yīng)該是什么樣子,先來看數(shù)據(jù)湖的作者AWS來說明數(shù)據(jù)湖是什么東西,比如下圖:
不懂數(shù)據(jù)的人也許會覺得數(shù)據(jù)湖很厲害,而懂數(shù)據(jù)的人也許會覺得僅是一堆數(shù)據(jù)倉庫技術(shù)的堆砌包裝而已,你看上面那張框架圖,哪個專業(yè)詞匯數(shù)據(jù)人士會不懂?憑什么數(shù)據(jù)湖被炒作成了一個新概念?
而對于數(shù)據(jù)湖的定義則是:
數(shù)據(jù)湖是一個集中式存儲庫,允許您以任意規(guī)模存儲所有結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)。您可以按原樣存儲數(shù)據(jù)(無需先對數(shù)據(jù)進行結(jié)構(gòu)化處理),并運行不同類型的分析 – 從控制面板和可視化到大數(shù)據(jù)處理、實時分析和機器學(xué)習(xí),以指導(dǎo)做出更好的決策。
那么數(shù)據(jù)湖和我們早先的數(shù)據(jù)倉庫究竟有什么樣的區(qū)別呢:
數(shù)據(jù)倉庫是一個優(yōu)化的數(shù)據(jù)庫,用于分析來自事務(wù)系統(tǒng)和業(yè)務(wù)線應(yīng)用程序的關(guān)系數(shù)據(jù)。事先定義數(shù)據(jù)結(jié)構(gòu)和 Schema 以優(yōu)化快速 SQL 查詢,其中結(jié)果通常用于操作報告和分析。數(shù)據(jù)經(jīng)過了清理、豐富和轉(zhuǎn)換,因此可以充當用戶可信任的“單一信息源”。
數(shù)據(jù)湖有所不同,因為它存儲來自業(yè)務(wù)線應(yīng)用程序的關(guān)系數(shù)據(jù),以及來自移動應(yīng)用程序、IoT 設(shè)備和社交媒體的非關(guān)系數(shù)據(jù)。捕獲數(shù)據(jù)時,未定義數(shù)據(jù)結(jié)構(gòu)或 Schema。這意味著您可以存儲所有數(shù)據(jù),而不需要精心設(shè)計也無需知道將來您可能需要哪些問題的答案。您可以對數(shù)據(jù)使用不同類型的分析(如 SQL 查詢、大數(shù)據(jù)分析、全文搜索、實時分析和機器學(xué)習(xí))來獲得見解。
從介紹來看好像數(shù)據(jù)倉庫和數(shù)據(jù)湖的最主要的區(qū)別就是對結(jié)構(gòu)化的數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)的存儲,但是真的僅僅是這樣嗎?
事實上,這種比較有較大邏輯漏洞:即是從結(jié)果出發(fā)來看差異,然后又用這個差異來說明區(qū)別,顛倒了因果。比如AWS的數(shù)據(jù)湖能夠處理非結(jié)構(gòu)化數(shù)據(jù),而數(shù)據(jù)倉庫無法處理非結(jié)構(gòu)化數(shù)據(jù),就認為這是數(shù)據(jù)湖與數(shù)據(jù)倉庫的本質(zhì)區(qū)別之一。
下面的文章中將來探索數(shù)據(jù)湖和數(shù)據(jù)倉庫究竟有什么樣的區(qū)別,學(xué)習(xí)一個新的事物要一步步的發(fā)現(xiàn)這個事物的本質(zhì)是什么。
數(shù)據(jù)倉庫和數(shù)據(jù)湖的處理流程可以用下圖來示意,其中用紅圈標出了5個對標的流程節(jié)點。
從圖中可以看出來數(shù)據(jù)湖并不比數(shù)據(jù)倉庫在處理流程上多出了什么內(nèi)容,更多的在于結(jié)構(gòu)性的變化,下面就從數(shù)據(jù)存儲、模型設(shè)計、加工工具、開發(fā)人員和消費人員五個方面來進行比較。
(1)數(shù)據(jù)存儲
數(shù)據(jù)倉庫采集、處理過程中存儲下來的數(shù)據(jù)一般是以結(jié)構(gòu)化的形式存在的,即使原始數(shù)據(jù)是非結(jié)構(gòu)化的,但這些非結(jié)構(gòu)化數(shù)據(jù)也只是在源頭暫存一下,它通過結(jié)構(gòu)化數(shù)據(jù)的形式進入數(shù)據(jù)倉庫,成了數(shù)據(jù)倉庫的基本存儲格式,這個跟數(shù)據(jù)倉庫的模型(維度或關(guān)系建模)都是建立在關(guān)系型數(shù)據(jù)基礎(chǔ)上的特點有關(guān)。
事實上,是傳統(tǒng)的數(shù)據(jù)建模負擔讓數(shù)據(jù)倉庫只處理結(jié)構(gòu)化數(shù)據(jù),其實誰都沒規(guī)定過數(shù)據(jù)倉庫只處理和存儲結(jié)構(gòu)化數(shù)據(jù)。
數(shù)據(jù)湖包羅萬象,輕裝上陣,結(jié)構(gòu)化與非結(jié)構(gòu)化數(shù)據(jù)都成為了數(shù)據(jù)湖本身的一部分,這體現(xiàn)了數(shù)據(jù)湖中“湖”這個概念。因為沒有數(shù)據(jù)倉庫建模的限制,當然什么東西都可以往里面扔,但這為其變成數(shù)據(jù)沼澤埋下了伏筆。
(2)模型設(shè)計
數(shù)據(jù)倉庫中所有的Schema(比如表結(jié)構(gòu))都是預(yù)先設(shè)計并生成好的,數(shù)據(jù)倉庫建設(shè)最重要的工作就是建模,其通過封裝好的、穩(wěn)定的模型對外提供有限的、標準化的數(shù)據(jù)服務(wù),模型能否設(shè)計的高內(nèi)聚、松耦合成了評估數(shù)據(jù)倉庫好壞的一個標準,就好比數(shù)據(jù)中臺非常強調(diào)數(shù)據(jù)服務(wù)的復(fù)用性一樣。
你會發(fā)現(xiàn),數(shù)據(jù)倉庫很像數(shù)據(jù)領(lǐng)域的計劃經(jīng)濟,所有的產(chǎn)品(模型)都是預(yù)先生成好的,模型可以變更,但相當緩慢。
數(shù)據(jù)湖的模型不是預(yù)先生成的,而是隨著每個應(yīng)用的需要即時設(shè)計生成的,其更像是市場經(jīng)濟的產(chǎn)物,犧牲了復(fù)用性卻帶來了靈活性,這也是為什么數(shù)據(jù)湖的應(yīng)用更多強調(diào)探索分析的原因。
(3)加工工具
數(shù)據(jù)倉庫的采集、處理工具一般是比較封閉的,很多采取代碼的方式暴力實現(xiàn),大多只向集中的專業(yè)開發(fā)人員開放,主要的目的是實現(xiàn)數(shù)據(jù)的統(tǒng)一采集和建模,它不為消費者(應(yīng)用方)服務(wù),也沒這個必要。
數(shù)據(jù)湖的采集和處理工具是完全開放的,因為第(2)點提到過:數(shù)據(jù)湖的模型是由應(yīng)用即席設(shè)計生成的,意味著應(yīng)用必須具備針對數(shù)據(jù)湖數(shù)據(jù)的直接ETL能力和加工能力才能完成定制化模型的建設(shè),否則就沒有落地的可能,更無靈活性可言。
工具能否開放、體驗是否足夠好是數(shù)據(jù)湖能夠成功的一個前提,顯然傳統(tǒng)數(shù)據(jù)倉庫的一些采集和開發(fā)工具是不行的,它們往往不可能向普通大眾開放。
(4)開發(fā)人員
數(shù)據(jù)倉庫集中開發(fā)人員處理數(shù)據(jù)涵蓋了數(shù)據(jù)采集、存儲、加工等各個階段,其不僅要管理數(shù)據(jù)流,也要打造工具流。
由于數(shù)據(jù)流最終要為應(yīng)用服務(wù),因此其特別關(guān)注數(shù)據(jù)模型的質(zhì)量,而工具流只要具備基本的功能、滿足性能要求就可以了,反正是數(shù)據(jù)倉庫團隊人員自己用,導(dǎo)致的后果是害苦了運營人員。
數(shù)據(jù)湖完全不一樣,集中開發(fā)人員在數(shù)據(jù)流階段只負責(zé)把原始數(shù)據(jù)扔到數(shù)據(jù)湖,更多的精力花在對工具流的改造上,因為這些工具是直接面向最終使用者的,假如不好用,數(shù)據(jù)湖就不能用了。
(5)應(yīng)用人員
數(shù)據(jù)倉庫對于應(yīng)用人員暴露的所有東西就是建好的數(shù)據(jù)模型,應(yīng)用方的所有角色只能在數(shù)據(jù)倉庫限定好的數(shù)據(jù)模型范圍內(nèi)倒騰,這在一定程度上限制了應(yīng)用方的創(chuàng)新能力。比如原始數(shù)據(jù)有個字段很有價值,但數(shù)據(jù)倉庫集中開發(fā)人員卻把它過濾了。
這種問題在數(shù)據(jù)倉庫中很常見,很多取數(shù)人員只會取寬表,對于源端數(shù)據(jù)完全不清楚,所謂成也數(shù)據(jù)倉庫,敗也數(shù)據(jù)倉庫。
數(shù)據(jù)湖的應(yīng)用方則可以利用數(shù)據(jù)湖提供的工具流接觸到最生鮮的原始數(shù)據(jù),涵蓋了從數(shù)據(jù)采集、抽取、存儲、加工的各個階段,其可以基于對業(yè)務(wù)的理解,壓榨出原始數(shù)據(jù)的最大價值。
可以看到,數(shù)據(jù)倉庫和數(shù)據(jù)湖,代表著兩種數(shù)據(jù)處理模式和服務(wù)模式,是數(shù)據(jù)技術(shù)領(lǐng)域的一次輪回。
早在ORACLE的DBLINK時代,我們就有了第一代的數(shù)據(jù)湖,因為那個時候ORACLE一統(tǒng)天下,ORALCE的DBLINK讓直接探索原始數(shù)據(jù)有了可能。
隨著數(shù)據(jù)量的增長和數(shù)據(jù)類型的不斷豐富,我們不得不搞出一種新的“數(shù)據(jù)庫”來集成各種數(shù)據(jù)。
但那個時候搞出的為什么是數(shù)據(jù)倉庫而不是數(shù)據(jù)湖呢?
主要還是應(yīng)用驅(qū)動力的問題。
因為那個時候大家關(guān)注的是報表,而報表最核心的要求就是準確性和一致性,標準化、規(guī)范化的維度和關(guān)系建模正好適應(yīng)了這一點,集中化的數(shù)據(jù)倉庫支撐模式就是一種變相的計劃經(jīng)濟。
隨著大數(shù)據(jù)時代到來和數(shù)字化的發(fā)展,很多企業(yè)發(fā)現(xiàn),原始數(shù)據(jù)的非結(jié)構(gòu)化比例越來越高,前端應(yīng)用響應(yīng)的要求越來越高,海量數(shù)據(jù)挖掘的要求越來越對,報表取數(shù)已經(jīng)滿足不了數(shù)據(jù)驅(qū)動業(yè)務(wù)的要求了。
一方面企業(yè)需要深挖各種數(shù)據(jù),從展示數(shù)據(jù)為主(報表)逐步向挖掘數(shù)據(jù)(探索預(yù)測)轉(zhuǎn)變,另一方面企業(yè)也需要從按部就班的支撐模式向快速靈活的方向轉(zhuǎn)變,要求數(shù)據(jù)倉庫能夠開放更多的靈活性給應(yīng)用方,這個時候數(shù)據(jù)倉庫就有點撐不住了。
數(shù)據(jù)湖就是在這種背景下誕生的。
其實早在數(shù)據(jù)湖出來之前,很多企業(yè)就在做類似數(shù)據(jù)湖的工作了,但是只不過大家更多的集中在數(shù)據(jù)倉庫結(jié)構(gòu)化的數(shù)據(jù)處理中,對于非結(jié)構(gòu)化的數(shù)據(jù)日志等更多的則是將其存儲起來,對于需要的時候再通過應(yīng)用程序進行處理獲取到自己想要的結(jié)果,只不過是沒有系統(tǒng)化的處理而已。
ETL之所以不開放,主要是驅(qū)動力不夠,其實我們沒有那么多類型的數(shù)據(jù)要定制化抽取。
很多企業(yè)不搞可視化開發(fā)平臺也是容易理解的,報表就能活得很好,干嘛業(yè)務(wù)人員要自己開發(fā)和挖掘?,F(xiàn)在數(shù)據(jù)湖叫的歡的,大多是互聯(lián)網(wǎng)公司,比如亞馬遜,這是很正常的。
而最近比較新的概念湖倉一體,阿里提出的概念,下面這張圖來看一下:
何謂湖倉一體?
- 湖倉一體是一種新的數(shù)據(jù)管理模式,將數(shù)據(jù)倉庫和數(shù)據(jù)湖兩者之間的差異進行融合,并將數(shù)據(jù)倉庫構(gòu)建在數(shù)據(jù)湖上,從而有效簡化了企業(yè)數(shù)據(jù)的基礎(chǔ)架構(gòu),提升數(shù)據(jù)存儲彈性和質(zhì)量的同時還能降低成本,減小數(shù)據(jù)冗余。
- 湖和倉的數(shù)據(jù)/元數(shù)據(jù)無縫打通,互相補充,數(shù)據(jù)倉庫的模型反哺到數(shù)據(jù)湖(成為原始數(shù)據(jù)一部分),湖的結(jié)構(gòu)化應(yīng)用知識沉淀到數(shù)據(jù)倉庫。
- 湖倉一體架構(gòu)主要的一點是實現(xiàn)“湖里”和“倉里”的數(shù)據(jù)能夠無縫打通,對數(shù)據(jù)倉庫的彈性和數(shù)據(jù)湖的靈活性進行有效集成,在該架構(gòu)中,主要將數(shù)據(jù)湖作為中央存儲庫,將機器學(xué)習(xí)、數(shù)據(jù)倉庫、日志分析、大數(shù)據(jù)等技術(shù)進行整合,形成一套數(shù)據(jù)服務(wù)環(huán),更好地分析、整合數(shù)據(jù),讓數(shù)據(jù)倉庫和數(shù)據(jù)湖中的數(shù)據(jù)可以自由流動,用戶可以更便捷地調(diào)取其中的數(shù)據(jù),讓數(shù)據(jù)“入湖”、“出湖”更為便捷。
- 湖倉一體化,是將數(shù)據(jù)倉庫和數(shù)據(jù)湖的價值進行疊加,克服數(shù)據(jù)重力,讓數(shù)據(jù)在服務(wù)之間流動起來,減少重復(fù)建設(shè),讓湖中的數(shù)據(jù)可以”流到“數(shù)據(jù)倉中,并能直接進行數(shù)據(jù)調(diào)用;而數(shù)據(jù)倉中的數(shù)據(jù)也可以保存于數(shù)據(jù)湖中,供未來數(shù)據(jù)挖掘使用。借助湖倉一體化,可快速處理數(shù)倉內(nèi)的熱數(shù)據(jù)與數(shù)據(jù)湖中的歷史數(shù)據(jù),并生成豐富的數(shù)據(jù)集,但無需在執(zhí)行中做任何數(shù)據(jù)移動操作。
那數(shù)據(jù)湖究竟應(yīng)該是什么樣子,需要在接下來的發(fā)展中獲取到答案,但是以目前來看,典型的組織都需要數(shù)據(jù)倉庫和數(shù)據(jù)湖,因為它們可滿足不同的需求和使用訴求。所以數(shù)據(jù)湖和數(shù)據(jù)倉庫的存在并不沖突,也并不是取代的關(guān)系,而是相互的融合關(guān)系。