Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

Data Lake 是什麼?和 Data Warehouse 差在哪?Data Lakehouse 又是什麼?

最後更新:2026年3月24日資料庫

上一篇文章我們用電信門市的例子,學會了 ETL、資料倉儲、OLTP 和 OLAP 的概念。

但實務上,光有資料倉儲還不夠。

你會遇到一個問題:原始資料要存在哪裡?

這篇文章會延續同樣的電信門市情境,帶你理解 Data Lake(資料湖)、它和 Data Warehouse(資料倉儲)的差異,以及結合兩者的 Data Lakehouse(資料湖倉)。

上一篇學到的 ETL 和資料倉儲概念

在上一篇文章中,我們知道了:

  • 電信門市有多個資料來源:POS 系統(MySQL)、保險軟體(Oracle)、Amazon S3 上的電子合約 PDF。
  • 這些 OLTP 系統是服務顧客的,不能直接在上面跑分析查詢。
  • 所以我們透過 ETL 流程,把資料擷取出來、轉換清理、載入到資料倉儲。
  • 資料分析師在資料倉儲上跑報表、做分析。

看起來很完美,但實際運作一段時間後,你會發現幾個問題。

為什麼光有資料倉儲還不夠?

OLTP 系統不會永遠保留資料

回到我們的電信門市。

POS 系統的 MySQL 資料庫會一直長大——每天都有新的交易紀錄寫進來。

但門市的資料庫不可能無限儲存,通常會有清除機制(Purging)。

例如只保留最近兩年的交易紀錄,超過兩年的就自動刪除,騰出空間給新的資料。

保險軟體的 Oracle 也是一樣,可能只保留最近三年的保單紀錄。

至於門市的應用程式伺服器上的 Log 檔案(系統日誌),保留時間更短——可能只存最近七天。

所以,如果有一天老闆問你:「幫我調五年前台北信義店的銷售資料」,你去 POS 系統一看——資料已經被清掉了。

資料倉儲的儲存成本很高

你可能會想:「那就把所有歷史資料都存到資料倉儲裡不就好了?」

問題是,資料倉儲通常跑在雲端服務上(像 Snowflake、Amazon Redshift、Google BigQuery),而且它的儲存成本不便宜。

因為資料倉儲不只是「存」資料,它還需要為每筆資料建立索引、做查詢優化,讓你跑 SQL 的時候很快。

這些運算資源和優化機制都要花錢。

如果把二十年、三十年的所有原始資料都塞進資料倉儲,帳單會非常驚人。

資料倉儲主要存的是結構化資料

還有一個限制:資料倉儲擅長存放的是結構化資料——也就是像表格一樣、有固定欄位的資料。

但你的電信公司還有很多非結構化資料:電子合約的 PDF、客服錄音檔、門市監視器畫面、App 的使用者行為 Log。

這些東西很難直接塞進資料倉儲的表格裡。

所以你需要另一個地方,專門用來存放這些原始、未經處理的資料。

什麼是 Data Lake(資料湖)?

Data Lake 的核心概念

Data Lake 說白了,就是一個很大、很便宜的雲端儲存空間,你把公司所有的原始資料通通丟進去,不管格式、不管有沒有清理過。

不管是結構化的(資料庫表格)、半結構化的(JSON、CSV)、還是非結構化的(PDF、圖片、Log 檔案),全部都可以存。

跟資料倉儲比起來,兩者的定位完全不同:資料倉儲是「整理好、隨時可以查」的地方,空間貴、只能放結構化資料;Data Lake 剛好相反——什麼都能丟、空間便宜、但資料是原始的,沒有經過整理。

簡單來說:資料倉儲是給分析師查資料用的,Data Lake 是給整間公司備份所有原始資料用的。

以我們的電信公司為例,Data Lake 裡可能有:

  • POS 系統每天匯出的銷售紀錄原始檔
  • 保險系統的完整保單歷史資料
  • 電子合約的 PDF 原始檔
  • App 的使用者行為 Log(JSON 格式)
  • 客服通話錄音檔
  • 門市監視器的影像資料

這些資料不需要事先清理或轉換,就是原封不動地丟進去。

為什麼需要保留原始資料?

你可能會問:「資料都已經經過 ETL 轉換放進資料倉儲了,為什麼還要保留原始版本?」

有幾個很實際的原因:

回溯和稽核需求。 假設金管會來查,要求你提供三年前某筆交易的完整原始紀錄。

資料倉儲裡存的是轉換後的彙總資料,原始的逐筆明細可能已經被合併了。

但 Data Lake 裡有完整的原始資料,你可以隨時回去調。

轉換邏輯可能會改。 也許一年前你的 ETL 轉換邏輯有個 bug,某些資料被錯誤地計算了。

如果你只有資料倉儲裡轉換後的結果,那這些錯誤就回不去了。

但如果 Data Lake 裡還保留著原始資料,你可以修正邏輯後重新跑一次 ETL。

未來可能有新的分析需求。 也許現在你只分析銷售數據,但三年後公司決定要做 AI 預測模型。

這時候你可能需要當初沒有放進資料倉儲的欄位或資料格式。

Data Lake 裡有完整的原始資料,讓你隨時可以回去挖。

完整的資料架構長什麼樣?

上一篇文章裡,我們的資料流向是:OLTP 系統 → ETL → 資料倉儲 → 分析。

加入 Data Lake 之後,中間多了一個步驟,整個流程變成五步:

第一步:擷取(Extract)

跟之前一樣,先從各個 OLTP 系統把資料拉出來。

POS 系統的 MySQL、保險軟體的 Oracle、S3 上的電子合約 PDF、App 的行為 Log——全部都要擷取。

第二步:存入 Data Lake

但這次拉出來的資料,不是直接送去做轉換,而是先原封不動地丟進 Data Lake。

這一步非常關鍵。

因為一旦你做了轉換(彙總、清理、格式統一),原始的細節就回不去了。

先存一份原始版本在 Data Lake 裡,等於幫自己買了一份保險——未來不管要稽核、修正 bug、還是做新的分析,你都有完整的原始資料可以用。

第三步:轉換(Transform)

接下來,從 Data Lake 裡讀取需要的資料,做清理和加工。

跟上一篇講的一樣:彙總、標準化、去除空值、格式統一。

注意,這裡的資料來源不再是直接連到 OLTP 系統了,而是從 Data Lake 讀取。

這樣做還有一個好處:你不需要每次做轉換都去打擾 OLTP 系統,減少對前線門市的影響。

第四步:載入(Load)

把轉換好的乾淨資料,載入到資料倉儲裡。

這時候資料倉儲裡存的就是「分析就緒」的結構化資料,分析師可以直接用 SQL 查詢。

第五步:分析

資料分析師和資料科學家在資料倉儲上跑報表、做儀表板、訓練 AI 模型,回答那些商業問題。

這個流程跟上一篇的差異在哪?

你會發現,跟上一篇的 ETL 流程相比,中間多了一個「Data Lake」。

原本是:OLTP → 轉換 → 資料倉儲。

現在是:OLTP → Data Lake → 轉換 → 資料倉儲。

Data Lake 扮演的是一個暫存區的角色,在業界有時也被稱為 Staging Area。

它不做任何轉換,就是單純地把原始資料存好,確保你隨時都能回去找到最原始的版本。

Data Lake 和 Data Warehouse 有什麼不同?

這兩個名字聽起來很像,但它們的定位完全不同。

存放的資料不一樣

Data Lake 存的是原始資料(Raw Data)——沒有經過清理、沒有統一格式,就是資料最原始的樣子。

Data Warehouse 存的是清理過、轉換過、可以直接分析的資料(Analytics-Ready Data)。

用買菜來比喻:你從市場買了一袋菜回來,連泥巴都還沒洗,直接丟進冰箱旁邊的紙箱裡——那就是 Data Lake。

你把菜洗乾淨、切好、分裝進保鮮盒、放進冰箱——那就是 Data Warehouse。

支援的資料格式不一樣

Data Lake 什麼都能存:表格資料、JSON、CSV、PDF、圖片、影片、Log 檔案,結構化和非結構化通通可以。

Data Warehouse 主要存結構化資料——有固定欄位的表格,這樣才能用 SQL 查詢、做 BI 報表。

儲存成本差很多

Data Lake 通常用的是像 Amazon S3、Azure Data Lake Storage(ADLS)、Google Cloud Storage 這類物件儲存(Object Storage)。

這種儲存方式非常便宜,因為它不需要做查詢優化,就是單純地把檔案存起來。

Data Warehouse(像 Snowflake、Redshift、BigQuery)的儲存成本就高得多,因為它背後有索引、有查詢引擎、有平行處理的基礎架構。

查詢效能差很多

Data Lake 上也可以做查詢——例如用 Amazon Athena 直接對 S3 上的 JSON 檔案跑 SQL。

但因為資料沒有做過索引和優化,查詢速度會比較慢。

Data Warehouse 就是專門為查詢設計的,SQL 跑起來快很多,而且支援 ACID 交易特性。

什麼是 ACID?

ACID 是資料庫交易的四個保證,簡單來說:

A(Atomicity,原子性):一個交易裡的所有操作,要嘛全部成功,要嘛全部不做。

舉個例子:一位客人在門市買了手機,同時加購了保險和保護貼,系統需要同時寫入三筆訂單紀錄。

如果第三筆寫入失敗了,ACID 保證前兩筆也會一起撤回,不會出現「手機買了但保險沒記錄到」的狀況。

Data Warehouse 支援 ACID,Data Lake 通常不支援(因為它只是單純的檔案儲存)。

一張表看懂差異

比較項目Data Lake(資料湖)Data Warehouse(資料倉儲)
存放的資料原始、未清理的資料清理過、轉換過、可直接分析的資料
資料格式結構化 + 非結構化都可以主要是結構化資料(表格)
儲存成本便宜(物件儲存)較貴(含索引和查詢優化)
查詢效能較慢(可用 Athena 等工具)快(專為 SQL 查詢優化)
ACID 支援通常不支援支援
常見方案Amazon S3、ADLS、GCSSnowflake、Redshift、BigQuery
比喻市場買回來的菜,連泥巴都還沒洗洗好切好放進冰箱的保鮮盒
Data Lake(資料湖)原始、未清理的資料
Data Warehouse(資料倉儲)清理過、轉換過、可直接分析的資料
Data Lake(資料湖)結構化 + 非結構化都可以
Data Warehouse(資料倉儲)主要是結構化資料(表格)
Data Lake(資料湖)便宜(物件儲存)
Data Warehouse(資料倉儲)較貴(含索引和查詢優化)
Data Lake(資料湖)較慢(可用 Athena 等工具)
Data Warehouse(資料倉儲)快(專為 SQL 查詢優化)
Data Lake(資料湖)通常不支援
Data Warehouse(資料倉儲)支援
Data Lake(資料湖)Amazon S3、ADLS、GCS
Data Warehouse(資料倉儲)Snowflake、Redshift、BigQuery
Data Lake(資料湖)市場買回來的菜,連泥巴都還沒洗
Data Warehouse(資料倉儲)洗好切好放進冰箱的保鮮盒

什麼是 Data Lakehouse(資料湖倉)?

看到這裡,你可能會想:「Data Lake 便宜但查詢慢,Data Warehouse 查詢快但貴。有沒有辦法兩個都要?」

有,這就是 Data Lakehouse 的概念。

Data Lakehouse 結合了兩者的優點

Data Lakehouse 是一種新的架構,它把 Data Lake 和 Data Warehouse 的優點結合在一起。

簡單來說,它的底層儲存還是用便宜的物件儲存(像 S3),但在上面加了一層管理機制,讓你可以像使用資料倉儲一樣做 SQL 查詢、支援 ACID、做 BI 分析。

等於你不用再維護兩套系統(一個 Data Lake + 一個 Data Warehouse),只要一套就能搞定。

常見的 Data Lakehouse 方案

目前業界最主流的兩個 Data Lakehouse 方案:

方案背後公司說明
Delta LakeDatabricks在 S3/ADLS 上加入 ACID 支援和版本控制,是目前最多人使用的方案
Apache IcebergApache 基金會(Netflix 發起)開源方案,支援多種查詢引擎,生態系快速成長中
背後公司Databricks
說明在 S3/ADLS 上加入 ACID 支援和版本控制,是目前最多人使用的方案
背後公司Apache 基金會(Netflix 發起)
說明開源方案,支援多種查詢引擎,生態系快速成長中

這兩個方案的核心思路是一樣的:不改變底層便宜的儲存方式,但在上面加一層「表格格式(Table Format)」的管理機制,讓原本只是一堆檔案的 Data Lake,變得像資料倉儲一樣好查詢。

小結:Data Lake、Data Warehouse、Data Lakehouse 的關係

這篇文章延續電信門市的情境,解釋了三個重要概念:

  • Data Lake(資料湖):便宜的雲端儲存空間,存放公司所有的原始資料,不限格式,什麼都能丟進去。
  • Data Warehouse(資料倉儲):專為分析設計的資料庫,存放清理過、轉換過的結構化資料,查詢速度快,但成本較高。
  • Data Lakehouse(資料湖倉):結合兩者優點的新架構,底層用便宜的物件儲存,上層加入查詢優化和 ACID 支援,一套系統搞定儲存和分析。

它們之間的演進邏輯是:企業一開始只有資料倉儲,後來發現需要保留原始資料所以加了 Data Lake,最後覺得維護兩套系統太麻煩,就出現了 Data Lakehouse 這種整合方案。

理解了這些概念,你就掌握了現代資料架構的核心全貌。

目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

資料庫

目錄

  • 上一篇學到的 ETL 和資料倉儲概念
  • 為什麼光有資料倉儲還不夠?
  • OLTP 系統不會永遠保留資料
  • 資料倉儲的儲存成本很高
  • 資料倉儲主要存的是結構化資料
  • 什麼是 Data Lake(資料湖)?
  • Data Lake 的核心概念
  • 為什麼需要保留原始資料?
  • 完整的資料架構長什麼樣?
  • 第一步:擷取(Extract)
  • 第二步:存入 Data Lake
  • 第三步:轉換(Transform)
  • 第四步:載入(Load)
  • 第五步:分析
  • 這個流程跟上一篇的差異在哪?
  • Data Lake 和 Data Warehouse 有什麼不同?
  • 存放的資料不一樣
  • 支援的資料格式不一樣
  • 儲存成本差很多
  • 查詢效能差很多
  • 什麼是 ACID?
  • 一張表看懂差異
  • 什麼是 Data Lakehouse(資料湖倉)?
  • Data Lakehouse 結合了兩者的優點
  • 常見的 Data Lakehouse 方案
  • 小結:Data Lake、Data Warehouse、Data Lakehouse 的關係