資料湖與資料倉儲的根本區別,在於前者是“市場經濟”,而後者是“計劃經濟”

qing_yun發表於2022-08-02

正文開始

很多同學跟我一樣,對於資料湖充滿好奇,也許還讀了不少資料湖文章,有不覺明歷的,也有認為是概念炒作的,但無論別人怎麼說,你還是會覺得難以把握資料湖的本質。

有些人會望文生義說,資料湖嘛,就是什麼東西都可以往裡面扔,特別是對非結構資料的處理比較方便。

是這樣嗎?

有案例才有鑑別,有的人找了資料湖的始作俑者AWS來說明資料湖是什麼東西,比如下圖:

但光看產品的介紹,不懂資料的人也許會覺得資料湖很厲害,而懂資料的人也許會覺得僅是一堆資料倉儲技術的堆砌包裝而已,你看上面那張框架圖,哪個專業詞彙資料人士會不懂?憑什麼資料湖被炒作成了一個新概念?

有比較才有鑑別,因此很多文章對資料湖與資料倉儲做了比較,下面是網上流傳的一些說法:

這種比較似乎能找到點區別,又會覺得隔靴搔癢,難道結構化與非結構化就成了資料倉儲和資料湖的一個主要區別?BI和機器學習成為了主要區別?

事實上,這種比較有較大邏輯漏洞:即是從結果出發來看差異,然後又用這個差異來說明區別,顛倒了因果,因此受到了不少專業人士的鄙視。比如AWS的資料湖能夠處理非結構化資料,而資料倉儲無法處理非結構化資料,就認為這是資料湖與資料倉儲的本質區別之一。

筆者這次較了一下真,來跟大家聊聊我所理解的資料湖的本質,對於一種新事物不瞭解本質,你就很難駕馭它,更別說實踐它了,下面這張圖道盡了一切。

下面我用一篇文章來具體說明資料湖與資料倉儲的區別,更多的是給出why,知其所以然是我理解事物的一個原則。

資料倉儲和資料湖的處理流程可以用下圖來示意,其中用紅圈標出了5個對標的流程節點。

可以看到,資料湖並不比資料倉儲在處理流程上多出了什麼內容,更多的在於結構性的變化,下面就從資料儲存、模型設計、加工工具、開發人員和消費人員五個方面來進行比較。

(1)資料儲存

資料倉儲採集、處理過程中儲存下來的資料一般是以結構化的形式存在的,即使原始資料是非結構化的,但這些非結構化資料也只是在源頭暫存一下,它透過結構化資料的形式進入資料倉儲,成了資料倉儲的基本儲存格式,這個跟資料倉儲的模型(維度或關係建模)都是建立在關係型資料基礎上的特點有關。

事實上,是傳統的資料建模負擔讓資料倉儲只處理結構化資料,其實誰都沒規定過資料倉儲只處理和儲存結構化資料。

資料湖包羅永珍,輕裝上陣,結構化與非結構化資料都成為了資料湖本身的一部分,這體現了資料湖中“湖”這個概念。因為沒有資料倉儲建模的限制,當然什麼東西都可以往裡面扔,但這為其變成資料沼澤埋下了伏筆。

看了這段肯定無法讓人信服,不要急,接著往下看。

(2)模型設計

資料倉儲中所有的Schema(比如表結構)都是預先設計並生成好的,資料倉儲建設最重要的工作就是建模,其透過封裝好的、穩定的模型對外提供有限的、標準化的資料服務,模型能否設計的高內聚、松耦合成了評估資料倉儲好壞的一個標準,就好比資料中臺非常強調資料服務的複用性一樣。

你會發現,資料倉儲很像資料領域的計劃經濟,所有的產品(模型)都是預先生成好的,模型可以變更,但相當緩慢。

資料湖的模型不是預先生成的,而是隨著每個應用的需要即時設計生成的,其更像是市場經濟的產物,犧牲了複用性卻帶來了靈活性,這也是為什麼資料湖的應用更多強調探索分析的原因。

(3)加工工具

資料倉儲的採集、處理工具一般是比較封閉的,很多采取硬編碼(程式碼)的方式暴力實現,大多隻向集中的專業開發人員開放,主要的目的是實現資料的統一採集和建模,它不為消費者(應用方)服務,也沒這個必要。

資料湖的採集和處理工具是完全開放的,因為第(2)點提到過:資料湖的模型是由應用即席設計生成的,意味著應用必須具備針對資料湖資料的直接ETL能力和加工能力才能完成定製化模型的建設,否則就沒有落地的可能,更無靈活性可言。

工具能否開放、體驗是否足夠好是資料湖能夠成功的一個前提,顯然傳統資料倉儲的一些採集和開發工具是不行的,它們往往非常醜陋,不可能向普通大眾開放。

(4)開發人員

資料倉儲集中開發人員處理資料涵蓋了資料採集、儲存、加工等各個階段,其不僅要管理資料流,也要打造工具流。由於資料流最終要為應用服務,因此其特別關注資料模型的質量,而工具流只要具備基本的功能、滿足效能要求就可以了,反正是資料倉儲團隊人員自己用,導致的後果是害苦了運營人員。

資料湖完全不一樣,集中開發人員在資料流階段只負責把原始資料扔到資料湖,更多的精力花在對工具流的改造上,因為這些工具是直接面向最終使用者的,假如不好用,資料湖就死了,據說AWS資料湖的ETL工具GLue很強大。

(5)應用人員

資料倉儲對於應用人員暴露的所有東西就是建好的資料模型,應用方的所有角色只能在資料倉儲限定好的資料模型範圍內倒騰,這在一定程度上限制了應用方的創新能力。比如原始資料有個欄位很有價值,但資料倉儲集中開發人員卻把它過濾了。

這種問題在資料倉儲中很常見,很多取數人員只會取寬表,對於源端資料完全不清楚,成了井底之蛙,這是資料倉儲集中開發人員造的“孽”,所謂成也資料倉儲,敗也資料倉儲。

資料湖的應用方則可以利用資料湖提供的工具流接觸到最生鮮的原始資料,涵蓋了從資料採集、抽取、儲存、加工的各個階段,其可以基於對業務的理解,壓榨出原始資料的最大價值。

當然由於缺乏資料標準規範的約束,資料湖的資料管理能力不會高,而由於每個應用方都在建設豎井,因此資源的壓力會越來越大。

可以看到,資料倉儲和資料湖,代表著兩種資料處理模式和服務模式,是資料技術領域的一次輪迴。

早在ORACLE的DBLINK時代,我們就有了第一代的資料湖,因為那個時候ORACLE一統天下,ORALCE的DBLINK讓直接探索原始資料有了可能。

隨著資料量的增長和資料型別的不斷豐富,我們不得不搞出一種新的“資料庫”來整合各種資料。

但那個時候搞出的為什麼是資料倉儲而不是資料湖呢?

主要還是應用驅動力的問題。

因為那個時候大家關注的是報表,而報表最核心的要求就是準確性和一致性,標準化、規範化的維度和關係建模正好適應了這一點,集中化的資料倉儲支撐模式就是一種變相的計劃經濟。

隨著大資料時代到來和數字化的發展,很多企業發現,原始資料的非結構化比例越來越高,前端應用響應的要求越來越高,海量資料探勘的要求越來越對,報表取數已經滿足不了資料驅動業務的要求了.

一方面企業需要深挖各種資料,從展示資料為主(報表)逐步向挖掘資料(探索預測)轉變,另一方面企業也需要從按部就班的支撐模式向快速靈活的方向轉變,要求資料倉儲能夠開放更多的靈活性給應用方,這個時候資料倉儲就有點撐不住了。

資料湖就是在這種背景下誕生的。

其實早在資料湖出來之前,很多企業就在做類似資料湖的工作了,比如我們5年前重構hadoop大資料平臺的時候,就已經要求源端能將各種格式的資料直接扔過來,然後用不同的引擎處理,結構化的就採用商業的ETL產品,非結構化的就自己做一個定製化的ETL工具(比如爬蟲),只是沒有統一進行整合而已。

ETL之所以不開放,主要是驅動力不夠,其實我們沒有那麼多型別的資料要定製化抽取,也許後續會需要吧。

而視覺化開發平臺使用比較廣泛,只是因為市場覺得IT做的太慢了,需要一個視覺化平臺來直接操作。

很多企業不搞視覺化開發平臺也是容易理解的,報表就能活得很好,幹嘛業務人員要自己開發和挖掘。現在資料湖叫的歡的,大多是網際網路公司,比如亞馬遜,這是很正常的。

資料湖和資料倉儲有點像市場經濟和計劃經濟,不能說誰更好誰更差,大家都有可取之處,阿里最近一篇文章提到的數湖一體是很好的概念,可以實現雙方的優勢互補,我這裡畫一張圖,方便你的理解:

何謂數湖一體?

(1)湖和倉的資料/後設資料無縫打通,互相補充,資料倉儲的模型反哺到資料湖(成為原始資料一部分),湖的結構化應用知識沉澱到資料倉儲

(2)湖和倉有統一的開發體驗,儲存在不同系統的資料,可以透過一個統一的開發/管理平臺操作

(3)資料湖與資料倉儲的資料,系統可以根據自動的規則決定哪些資料放在數倉,哪些保留在資料湖,進而形成一體化

我們只有看透了資料湖的本質,才能結合企業做出理性的選擇,既不跪舔,也沒必要不屑,請分享給有需要的人,至於理解的對不對,大家自由評說吧!

來自 “ 與資料同行 ”, 原文作者:傅一平;原文連結:https://mp.weixin.qq.com/s/Qw4TLHBklh_K6tE_mMwuIA,如有侵權,請聯絡管理員刪除。

相關文章