大家安安,今天我們一起來聊聊 ELT 和 ETL 這兩個常見的資料處理方式。
前幾天在 Day 15 : 多系統整合 Part4 - 擷取、轉換、載入 (ETL) 有介紹過什麼是 ETL,今天要來介紹 ELT 以及兩者的比較。
你可能會問,ELT 和 ETL 是什麼?它們有什麼不同?為什麼我們要關心它們?不要害怕,今天我們會好好的解釋他們的不同,學累了就直接睡覺,沒問題的。
ETL 是 Extract, Transform, and Load,意思是先把資料從不同的來源抽取出來,然後在抽取的過程中就對資料進行轉換和清理,最後再載入到一個統一的資料庫或資料倉儲中。
ELT 是 Extract, Load, and Transform,意思是先把資料從不同的來源抽取出來,然後載入到一個統一的資料庫或資料倉儲中,最後再根據需要對資料進行轉換和分析。
其實,它們最大的差異就在於轉換的時機和地點。
在 ETL 中,轉換是在載入前進行的,而且是在抽取端進行的。
這樣做的好處是可以節省目標資料庫或資料倉儲的空間和成本,因為你只需要儲存你真正需要的資料。而且,如果你對資料的需求比較穩定和固定,你也可以提前定義好轉換規則和邏輯,減少後續的工作量。
在 ELT 中,轉換是在載入後進行的,而且是在目標資料庫或資料倉儲中進行的。
這樣做的好處是可以保留原始資料的完整性和靈活性,因為你可以隨時根據不同的需求對資料進行不同的轉換和分析。而且,如果你使用的是雲端服務,你也可以利用雲端平台提供的強大的計算能力和儲存空間來處理大量的資料。
其實,沒有一個絕對的答案,因為它們各有各的優缺點,適合不同的場景和需求。
一般來說,如果你處理的是非結構化或半結構化的資料,或者你需要對資料進行多元和動態的分析,或者你使用的是雲端服務,那麼 ELT 可能會比較適合你。
如果你處理的是結構化或半結構化的資料,或者你對資料的需求比較穩定和固定,或者你使用的是自建或傳統的服務器,那麼 ETL 可能會比較適合你。
一起來舉個例子,有些時候某些資料只會看那麼一次,看完之後就非常非常少被拿出來再看一次。
例如 在五年前的某篇貼文上,你的朋友 A 對這篇貼文按讚
,這種資料通常只會出現一次,因為要往回翻觀看文章,又要點開來看有哪些人按讚,並不會很常見。這時候就很適合使用 ELT,先把這些資料 Load 到特定的資料庫,再整理一些常用的資料到最末端的資料庫進行分析與使用。當真的有人往回翻時,再回來這個資料庫撈就好。
所以在 ELT 流程中的中間層資料庫,會被稱為 Data Lake (資料湖),用來存放這些結構化或非結構化的資料,有些人也會存放到價格比較便宜的儲存服務上 (例如 AWS S3),因為這些資料並不要求讀取的效能。
你可以嘗試看看,在 Facebook 中往回翻貼文的讀取速度,其實還蠻差的,就是因為這些資料並不被當成常讀取的資料來對待,被儲存在比較便宜的儲存服務中了,畢竟真的比較少人在翻貼文啦。
而如果你是想處理一些結構化的資料,例如網頁上的行為模式、訂單的地區與消費者的分類,那就很適合使用 ETL,因為這些制定好的資料流只要建構好流程後,就不太會變動了。
AWS - What is a Data Lake
AWS - The Difference Between ETL and ELT