老梗但必要

ETL 不管是以前還是在過去都是一件不太被重視也不討喜的工作。但這的確是 Data Pipeline 的核心。

資料在使用之前都必須被處理過。

https://docs.microsoft.com/zh-tw/azure/architecture/data-guide/images/etl.png

ETL 真的沒啥好介紹的,概念真的太簡單好懂。

  • Extract: 把資料從某個地方拿出來。
  • Transform: 將資料作轉換。
  • Load: 湊數的一步,把轉換完的資料丟到某個地方。

ETL 之所以必要在於,原始資料通常不適合拿來直接使用的。原因在於:

  • 原始資料量太大:通常前端在收資料的時候,都會使用比較鬆散的事件格式,像是 JSON,也通常不會做壓縮。這樣在計算時需要消耗較多的資源,也會影響計算速度。所以通常在使用之前會做最基本的壓縮和格式最佳化。
  • 資料不乾淨:通常資料前端收進來的時候,如果沒有處理好,會遇到很多奇怪的狀況,「Garbage in、garbase out」所以確保資料的品質非常重要。比較基本的像是格式、數值範圍,更複雜的一點包括欄位統計值甚至邏輯等等。
  • 比較複雜的 Aggregation:資料是隨著事件進來,但是使用上可能會以每小時、每天為單位來進行分析或計算。如果每次畫報表都必須從最原始的資料開始算,會消耗大量計算資源,而且 SQL 或計算也會非常複雜,所以一般來說都會先將原始資料聚合成一些時間粒度稍微「粗」一點的資料,才會來做後續應用。

以下從網路上找幾個應用範例:

標準的清理資料流程

https://www.red-gate.com/simple-talk/sql/database-delivery/database-lifecycle-management-for-etl-systems/

一般來說,資料在進入 Data Warehouse 前,都必須經過這幾個階段,才能供後續業務報表或是視覺化使用。算是基本起手式吧。

在不同層(Layer)的資料之間作轉換

http://letstalkhadoop.blogspot.com/

資料傳送到後端後,會經過 ETL 放到 Staging 環境、再透過 ETL 放到 DW、再透過 ETL 整理到了 Data Mart 給 End User 使用。當原始資料越複雜、資料量越多,中間就更需要多層次的處理來確保資料品質以及使用上的效能。

Streaming ETL

https://www.slideshare.net/JulienSIMON5/serverless-architecture-with-aws-lambda-june-2016

當然除了 Batch ETL 外,Streaming ETL 也是有的。可以根據事件、或是 mini batch 的方式來處理原始資料,配合 Batch Process 來處理累積的資料。

總之 ETL 是個很廣泛的領域,不僅僅是「資料處理」四個字而已。還需要考量到軟硬體架構、商務邏輯、後續的使用才能設計最適合的 ETL 流程。

--

--

Bryan Yang
A multi hyphen life

Data Engineer, Data Producer Manager, Data Solution Architect