Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

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

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

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

ETL 是什麼?資料倉儲、OLTP 與 OLAP 一次搞懂

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

你可能聽過「ETL」「資料倉儲」「OLTP」「OLAP」這些名詞,覺得很複雜。

但其實它們的概念非常簡單。

這篇文章會用像遠傳、台哥大這種電信門市當例子,帶你一步步理解這些概念。

電信門市的資料從哪來?以遠傳、台灣大哥大為例

想像你經營的是像遠傳或台灣大哥大這樣的電信品牌,在全台各地都有門市。

你走進任何一家門市,會看到店員在櫃檯幫客人辦門號、賣手機。

客人挑好手機、選好資費方案,店員就會在 POS 系統(銷售點系統) 上完成這筆交易。

這個系統會記錄下「誰在哪家店、什麼時間、買了哪支手機、花了多少錢」。

買手機的時候,店員通常會問:「要不要加購手機保險?螢幕摔破可以免費換。」

大部分的人都會買,而這些保單和後續的理賠紀錄,就會存在另一套保險軟體裡。

這兩套系統通常是完全獨立的,背後用的資料庫也不一樣。

例如 POS 用的是 MySQL,保險系統用的是 Oracle。

除了這些存在資料庫裡的結構化資料,你的公司還會有一些非結構化資料。

例如客人在門市辦門號或續約時,會簽署電子合約,這些合約會以 PDF 的形式存放在 Amazon S3 雲端儲存上。

所以整體來看,一家電信公司的資料是散落在各處的——POS 資料庫、保險資料庫、雲端上的 PDF,格式不同、系統不同、存放位置也不同。

為什麼企業需要整合不同系統的資料?

現在資料都有了,但它們分散在不同的地方。

身為老闆,你一定會想問:「台北信義店和高雄左營店,到底哪家表現比較好?」

要回答這個問題,你需要看手機賣了多少、保險賣了多少。

但問題來了——手機銷售的數字在 POS 系統的 MySQL 裡,保險業績卻在另一套保險軟體的 Oracle 裡。

你沒辦法打開一個畫面就看到完整的答案,因為資料根本不在同一個地方。

不只如此,你可能還想更進一步知道:「哪位業務員的簽約量最多?合約續約率怎麼樣?」

但這些電子合約是一份一份的 PDF,存在 S3 雲端上。

PDF 不像資料庫可以直接下指令查詢,你得先想辦法把合約裡的資訊「抓出來」,才有辦法做統計。

再往更長遠的角度想,農曆新年或雙十一快到了,你想預測哪個門市會最忙、該多派幾個人。

這就需要綜合過去幾年的銷售紀錄來分析,但這些歷史資料同樣分散在好幾個系統裡,要一個一個撈非常費時。

這些問題看起來各不相同,但背後卡住的原因都是一樣的:資料散落在 MySQL、Oracle、S3 三個不同的地方,格式不同、系統不同,沒有人能一次看到全貌。

而這些問題的答案,會直接影響你的商業決策——要不要多開一家店、該把資源集中在哪個地區、哪位業務員值得升遷。

所以,你需要一個方法,把這些散落各處的資料整合在一起。

為什麼不能直接在原始資料庫上做分析?

最直覺的做法是:直接去 POS 的 MySQL 資料庫撈銷售數字,再去保險的 Oracle 資料庫撈保險數字,然後加起來比較。

聽起來很合理,但這樣做其實有很大的風險。

問題:分析查詢會拖慢系統

想像一下,現在是週六下午,門市擠滿了客人。

店員正在用 POS 系統幫客人結帳、辦門號,每一筆操作都需要即時讀寫 MySQL 資料庫。

就在這個時候,總部的資料分析師對同一個 MySQL 資料庫跑了一個很複雜的查詢——例如「幫我算出過去三年每家門市每個月的銷售趨勢」。

這種查詢需要掃描大量的歷史資料,會吃掉很多資料庫的運算資源。

結果就是:資料庫變慢了,門市店員的 POS 系統開始轉圈圈,客人站在櫃檯前面等,結帳排隊越排越長。

這就是所謂的任務關鍵系統(Mission Critical System)——這些系統正在服務你的真實顧客,一旦變慢或掛掉,生意就直接受影響。

所以你不能為了做分析,去拖慢正在服務客人的系統。

解法:複製到另一個資料庫

企業通常的做法是:把資料複製到另一個獨立的資料庫,所有的分析查詢都在那個資料庫上跑。

這樣一來,就算分析師跑了再複雜的查詢,讓這個資料庫變慢,也完全不會影響到前線門市的運作。

資料搬移前為什麼需要轉換?

不過,你不會想把原始資料原封不動地搬過去。

為了讓後續分析更方便,你需要先做一些轉換。

讓我們用一個具體的例子來看。

步驟一:看看原始資料長什麼樣

假設你的電信品牌不只在台灣有門市,在日本也有據點。

你的 POS 資料庫裡有這些紀錄:

門市手機銷售額幣別
台北信義店35,900TWD
台北信義店24,990TWD
台北信義店28,800TWD
東京澀谷店150,000JPY
手機銷售額35,900
幣別TWD
手機銷售額24,990
幣別TWD
手機銷售額28,800
幣別TWD
手機銷售額150,000
幣別JPY

你會發現,台北信義店有三筆紀錄,東京澀谷店有一筆。

而且幣別不同——一個是新台幣,一個是日圓。

步驟二:做「彙總」

第一個轉換動作是彙總(Aggregation),把同一家門市的數字加起來。

門市手機銷售額幣別
台北信義店89,690TWD
東京澀谷店150,000JPY
手機銷售額89,690
幣別TWD
手機銷售額150,000
幣別JPY

現在每家門市只剩一筆彙總數字,比較容易看了。

步驟三:做「標準化」

但你還是不能直接比較,因為幣別不同。

所以第二個轉換動作是標準化(Standardization)——把不同單位統一成同一個基準,這裡就是把日圓換算成新台幣。

門市手機銷售額(TWD)
台北信義店89,690
東京澀谷店33,000
手機銷售額(TWD)89,690
手機銷售額(TWD)33,000

現在你可以在同一個基準下比較了。

台北信義店的手機銷售額是 89,690 元,東京澀谷店換算後是 33,000 元。

加上保險的數字之後,就能清楚知道哪家門市整體表現最好。

什麼是資料倉儲(Data Warehouse)?

轉換完的資料要放到哪裡?你需要一個專門的地方來集中存放,這個地方就叫做資料倉儲(Data Warehouse)。

為什麼叫「倉儲」?因為它儲存的不只是某一個系統的資料,而是整個組織的資料。

以我們的電信公司為例,資料倉儲裡可能同時存放了:

  • POS 系統的手機銷售紀錄
  • 保險軟體的保費和理賠資料
  • ERP 系統裡的員工資料
  • 雲端上電子合約的關鍵欄位

所有散落在不同系統的資料,經過轉換後,都集中放進這一個資料倉儲裡。

之後,資料分析師和資料科學家就可以在這個倉儲上執行各種查詢、製作儀表板和報表,來回答我們前面提到的那些商業問題。

什麼是 ETL?

回顧剛才的過程,我們其實做了三件事,而這三件事剛好對應到一個標準流程的三個步驟。

擷取(Extract):把資料從各個來源拉出來

第一步是「擷取」——去各個系統把你需要的資料拉出來。

以我們的電信公司為例,你需要:

  • 連線到 POS 系統的 MySQL 資料庫,把手機銷售紀錄撈出來。
  • 連線到保險軟體的 Oracle 資料庫,把保費和理賠紀錄撈出來。
  • 連到 Amazon S3,把電子合約的 PDF 下載下來,再從裡面擷取出需要的欄位(例如簽約日期、資費方案、綁約期間)。

這些來源的格式可能完全不同——有的是資料庫表格,可以直接用 SQL 查詢;有的是 PDF 檔案,需要額外的工具去解析內容。

但不管來源的格式是什麼,擷取這一步的目標就是:把散落在各處的原始資料,全部收集到手上。

轉換(Transform):清理和加工資料

第二步是「轉換」——把拉出來的原始資料做清理和加工,讓它變成可以分析的格式。

原始資料通常是「髒」的,不能直接拿來分析。

回想一下我們前面做的事情:台北信義店有三筆交易紀錄,我們做了彙總把它加總成一筆;台北和東京的銷售額幣別不同,我們做了標準化把日圓換算成新台幣。

除了這兩種操作,實務上常見的轉換還有很多,例如:

  • 去除空值(Null):有些紀錄的某些欄位是空的,例如客人沒填電話號碼,你需要決定是補上預設值還是直接排除。
  • 去除異常值(Outlier):例如某筆交易金額顯示 0 元或負數,很可能是系統錯誤,留著會影響分析結果。
  • 格式轉換:MySQL 裡的日期格式是 2024-01-20,Oracle 裡可能是 20-JAN-2024,你需要統一成同一種格式。
  • 合併欄位:POS 裡的門市地址和保險系統裡的門市名稱,可能用不同的寫法指向同一家店,你需要建立對應關係把它們合在一起。

轉換的目的就是讓資料變得乾淨、一致、可比較,這樣後續分析才有意義。

載入(Load):把處理好的資料存進資料倉儲

第三步是「載入」——把轉換完成的資料,寫入我們前面提到的資料倉儲裡。

載入不只是「把資料丟進去」這麼簡單。

你需要考慮的事情包括:這批資料要覆蓋掉舊的,還是追加在後面?載入的頻率是每天一次、每小時一次,還是即時同步?如果載入到一半失敗了,要怎麼處理?

不過對初學者來說,先記住核心概念就好:載入就是把清理好的資料,放進一個專門用來分析的資料庫裡。

三個步驟合起來,就是 ETL

擷取(Extract)、轉換(Transform)、載入(Load)——這三個步驟合起來,就叫做 ETL。

簡單一句話總結:ETL 就是「把散落在各處的資料,經過清理和轉換,集中存放到一個地方」的標準流程。

OLTP 和 OLAP 的差異

現在我們把整個架構分成左右兩邊來看。

左邊:OLTP(線上交易處理系統)

OLTP 的全名是 Online Transaction Processing。

它指的就是左邊那些正在服務顧客的資料庫,例如 POS 的 MySQL 和保險的 Oracle。

OLTP 的特色:

  • 服務的是真實顧客
  • 是任務關鍵系統,不能當機、不能變慢
  • 資料操作以「新增、修改、刪除」為主(例如每一筆交易)

右邊:OLAP(線上分析處理系統)

OLAP 的全名是 Online Analytical Processing。

它指的就是右邊的資料倉儲。

OLAP 的特色:

  • 服務的是公司內部的分析需求
  • 不直接面對顧客
  • 資料操作以「大量讀取和分析」為主(例如跑報表、做趨勢分析)

簡單來說:OLTP 是做生意用的,OLAP 是分析生意用的。

常見的 ETL 工具和資料倉儲方案

知道了 ETL 和資料倉儲的概念之後,你可能會好奇:實務上要用什麼工具來做?

ETL 工具

如果你的資料量不大、來源也只有兩三個,最簡單的做法是自己寫程式。

例如用 Python 連線到 MySQL 撈資料、做轉換、再寫入資料倉儲,整個流程幾十行程式碼就能搞定。

但隨著公司規模成長,ETL 會越來越複雜——資料來源變多、轉換邏輯變繁瑣、還需要排程(例如每天凌晨自動跑一次)、錯誤時要通知、失敗時要重跑。

這時候就需要專門的 ETL 工具來管理整個流程:

工具類型說明
Apache NiFi開源免費用圖形化介面拖拉設定資料流程,適合不想寫太多程式的團隊
Apache Airflow開源免費用 Python 定義工作流程,適合工程師團隊,目前業界非常主流
Informatica付費商用老牌 ETL 工具,功能全面,很多大型企業在用
Talend付費商用同時有開源和付費版本,介面直覺,上手門檻較低
類型開源免費
說明用圖形化介面拖拉設定資料流程,適合不想寫太多程式的團隊
類型開源免費
說明用 Python 定義工作流程,適合工程師團隊,目前業界非常主流
類型付費商用
說明老牌 ETL 工具,功能全面,很多大型企業在用
類型付費商用
說明同時有開源和付費版本,介面直覺,上手門檻較低

如果你是剛入門的初學者,建議先從 Python 手寫 ETL 開始理解整個流程,等掌握概念之後再學習 Airflow 這類工具。

資料倉儲方案

理論上,你可以用 MySQL 或 PostgreSQL 這些一般的資料庫來當資料倉儲。

但當資料量大到幾百萬、幾千萬筆以上,一般資料庫跑分析查詢就會越來越慢。

這時候就需要專門為分析設計的資料倉儲方案。

這些方案通常有一個共同特色:大規模平行處理(MPP, Massively Parallel Processing)——把一個大查詢拆成很多小任務,同時丟給多台機器去跑,速度快非常多。

方案特色適合場景
Snowflake雲端原生,運算和儲存分離,用多少付多少中小型到大型企業,想要彈性擴展
Amazon Redshift深度整合 AWS 生態系(S3、Glue、QuickSight)已經在用 AWS 的團隊
Google BigQuery無伺服器架構,不用管機器,直接寫 SQL 查詢已經在用 GCP 的團隊
Teradata老牌企業方案,穩定性高大型傳統企業、金融業
Greenplum開源,支援 MPP預算有限但資料量大的團隊
特色雲端原生,運算和儲存分離,用多少付多少
適合場景中小型到大型企業,想要彈性擴展
特色深度整合 AWS 生態系(S3、Glue、QuickSight)
適合場景已經在用 AWS 的團隊
特色無伺服器架構,不用管機器,直接寫 SQL 查詢
適合場景已經在用 GCP 的團隊
特色老牌企業方案,穩定性高
適合場景大型傳統企業、金融業
特色開源,支援 MPP
適合場景預算有限但資料量大的團隊

目前業界的趨勢是往雲端方案走,像 Snowflake、Redshift、BigQuery 這三個是最常被討論的選擇。

選哪一個通常取決於你的公司已經在用哪家雲端服務——如果用 AWS 就選 Redshift,用 GCP 就選 BigQuery,如果不想被特定雲端綁住就選 Snowflake。

小結:ETL、資料倉儲、OLTP 與 OLAP 的關係

這篇文章用電信門市的例子,解釋了幾個重要的資料工程概念:

  • OLTP 是服務顧客的交易系統,強調即時處理和穩定性。
  • OLAP 是支援內部分析的系統,強調大量資料的查詢和洞察。
  • ETL 是把資料從來源「擷取」出來、做「轉換」、再「載入」到資料倉儲的標準流程。
  • 資料倉儲 是集中存放整個組織資料的地方,分析師在這裡跑報表、做分析。

理解這些概念之後,你就掌握了資料工程領域最基礎也最重要的架構觀念。

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

發表留言

留言將在審核後顯示。

資料庫

目錄

  • 電信門市的資料從哪來?以遠傳、台灣大哥大為例
  • 為什麼企業需要整合不同系統的資料?
  • 為什麼不能直接在原始資料庫上做分析?
  • 問題:分析查詢會拖慢系統
  • 解法:複製到另一個資料庫
  • 資料搬移前為什麼需要轉換?
  • 步驟一:看看原始資料長什麼樣
  • 步驟二:做「彙總」
  • 步驟三:做「標準化」
  • 什麼是資料倉儲(Data Warehouse)?
  • 什麼是 ETL?
  • 擷取(Extract):把資料從各個來源拉出來
  • 轉換(Transform):清理和加工資料
  • 載入(Load):把處理好的資料存進資料倉儲
  • 三個步驟合起來,就是 ETL
  • OLTP 和 OLAP 的差異
  • 左邊:OLTP(線上交易處理系統)
  • 右邊:OLAP(線上分析處理系統)
  • 常見的 ETL 工具和資料倉儲方案
  • ETL 工具
  • 資料倉儲方案
  • 小結:ETL、資料倉儲、OLTP 與 OLAP 的關係