祁國輝:一學就會一用卻廢!到底用ETL還是ELT?

韓楠發表於2022-07-18



寫在前面:


數倉概念出現於上世紀90年代, 國內最早開始的資料倉儲也都在90年代末了, 剛開始大家都是按照國外大廠的指導, 照貓畫虎,逐步開始建立自己的資料倉儲技術體系。

這個時候大家都關注怎麼建立分析模型, 怎麼進行資料分析來支援決策。但是隨著系統越來越龐大, 資料量越來越多, 資料處理的效率,就越來越成為大家不得不關注的熱點問題了。

到底應該ETL 還是ELT,看上去只是簡單地調換了一下字母的順序,是個簡單的問題,但是大多數的問題都是一學就會, 一用就廢。而事實上,順序一換,這是對資料處理流程和方法論上進一步深化的過程。




責編 | 韓楠

約 2355 字 | 5 分鐘閱讀





 以下,Enjoy~ 




作為資料倉儲從業者, 資料的抽取轉換載入是永遠繞不開的, 雖然現在大家一談到資料分析, 更多的人喜歡談資料探勘、深度學習、資料視覺化。但是隨著企業資料碎片化越來越嚴重, 另外更多的社交資料引入到資料倉儲中之後, 資料的清洗, 預處理變得更加重要。

先來看看 ETL,全稱為Extract - Transformation - Load,是三個單詞首字母的縮寫, 它生動地描述了資料倉儲資料預處理當中的三個關鍵階段。

首先是抽取(Extract), 顧名思義,是從生產系統或者其他資料來源中提取想要用到的欄位, 然後用來支援後期的資料分析,  這個時候需要考慮最多的是這兩個關鍵點:

•  哪些資料需要抽取出來?

•  利用什麼手段來抽取?

哪些資料需要被抽取出來, 其實取決於幾個因素:


01   ETL 還是 ELT?

數倉概念出現於上世紀90年代, 國內最早開始的資料倉儲也都在90年代末了, 剛開始大家都是按照國外大廠的指導, 照貓畫虎,逐步開始建立自己的資料倉儲技術體系。

這個時候大家都關注怎麼建立分析模型, 怎麼進行資料分析來支援決策。但是隨著系統越來越龐大, 資料量越來越多, 資料處理的效率,就越來越成為大家不得不關注的熱點問題了。

當時有人提出一個理論,到底應該ETL 還是ELT,看上去只是簡單地調換了一下字母的順序,但是事實上,這是對資料處理流程和方法論上進一步深化的過程。 

ETL 和ELT, 簡單地區別就是先轉換再裝載, 還是先裝載再轉換,  前者的主要支持者自然是傳統的工具廠商 Data stage 和 Informatica ,因為在這種體系架構中, 需要有一個專門的Transformation Server, 資料的複雜處理和對映,主要在轉換伺服器上進行處理。

而ELT的主要支持者就是資料庫廠商, 因為它們希望所有的資料處理工作都在資料庫內部完成, 最大化地發揮資料庫海量資料並行處理的能力。

兩種方式各有優劣, ETL 重轉換, 可以在轉換伺服器上直接進行復雜的處理, 但是受制於轉換伺服器的處理和吞吐能力, 海量資料的處理效率堪憂。

但是ELT的缺點在於:如果大量的資料轉換都由儲存過程實現的話, 那麼整個資料處理過程中的後設資料管理就變得非常困難。隨著資料倉儲的技術發展, 最終ELT 還是略佔上風, 因為, 如果把資料倉儲各層之間的彙總也看作是Transformation的話, 那自然是Load 在先, Transformation在後。


02   帶來的問題


ELT大行其道的同時, 也給資料倉儲的技術帶來了幾個問題, 下面我跟你簡單說說。

第一個問題,就是大量的儲存過程怎麼排程的問題。  我見到過一家國內大型科技企業的資料倉儲, 有超過一萬個資料處理指令碼。隨著業務發展, 這些指令碼的數量還是繼續增加。

那麼如此多的指令碼,我們不得不去思考這樣的幾個問題:

•  怎麼進行排程?

•  怎麼實現斷點續跑?

•  怎麼進行小範圍回退後重新啟動而不需要所有一萬多指令碼重新跑?

•  一旦中間資料處理異常之後,如何清理錯誤的髒資料?


這麼多的指令碼進行排程,還有先後依賴關係,怎麼確定ETL 指令碼的分層管理, 如何實現整個排程過程的圖形化展現和監控,就變成了一個新的問題。

第二個問題, 後設資料管理的問題。 我記得我最初寫ETL 指令碼的時候, 只考慮了資料怎麼從源取出來, 然後再怎麼經過mapping ,生成最終結果, 中間的過程完全不需要對外輸出過程資訊。

但是這樣一來, 我們就很容易陷入另外一種僵局, 就如同前面提到的那家企業, 一萬多指令碼, 鼎盛時期有400多開發人員在做開發, 但是一旦人員流失, 換新人怎麼維護這個程式碼?難度自然就直線上升了。

同時, 如果在結果展示的時候 想知道某個資料,是經過什麼口徑統計過來的?那就完全不知道了, 因為整個指令碼就是個黑盒子, 大家都不知道資料之間的繼承沿革關係。所以怎麼利用儲存過程,自動生成ETL 後設資料, 就是第二個問題。

第三個問題, 儲存過程效率問題。 所有資料轉換都利用資料庫的特性, 那麼這個時候的資料處理效率就會全面依賴資料庫的特性,這種處理難以避免的就是多個大表Join, 排序。那麼您選擇的資料庫在大表連線的時候怎樣效率最高,怎麼利用資料庫提供的函式或者特性,加速資料處理效率,就變成了程式設計師必須要了解的一個知識點。

曾經碰到一個專案, 程式設計師對資料庫特徵不太瞭解, 同時為了程式易讀, 就透過臨時表來簡化過程, 看上去是個很好的習慣。

但是極端情況下, 原來只需要一個複雜SQL 就能解決的問題, 資料反覆寫臨時表20多次,系統上線之後,還在納悶, 資料邏輯完全沒變, 怎麼就跑不動了呢?



03   寫在最後


ETL 還是ELT , 看上去是個簡單的問題, 但是大多數的問題都是一學就會, 一用就廢。就像在駕校學了怎麼起步?怎麼停車, 怎麼換擋, 但是真正上路才發現還是會各種手忙腳亂。

就今天探討的問題, 關鍵還是需要在設計ETL 和交付ETL 專案的時候, 要有大局觀。多想想執行效率, 維護難度,多多輸出後設資料, 這樣一來,我相信你就已經踏上了正確道路, 邁開了第一步。  

歡迎在評論區與我分享你的想法。如果覺得這篇文章對你有幫助,或者有共鳴之處,也歡迎分享給你的朋友、同事,一起交流討論。


THE END 

轉載請聯絡ITPUB官方公眾號獲得授權

—————————————————————————————————

歡迎各領域技術人員投稿

投稿郵箱 |    hannan@it168.com



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70016482/viewspace-2905991/,如需轉載,請註明出處,否則將追究法律責任。

相關文章