祁國輝:一學就會一用卻廢!到底用ETL還是ELT?
寫在前面:
數倉概念出現於上世紀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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 學完就忘一用就懵,怎麼解決
- ETL、ELT區別以及如何正確運用
- ETL到底是什麼?
- 資料整合的兩種架構:ELT和ETL架構
- “一學就會,一做就廢”微服務的架構模式:一個服務一個資料庫模式微服務架構模式資料庫
- StreamPark 是否值得一用(上)?
- iOS:一用就上癮的BottomSheetViewiOSView
- 學習Python到底是培訓還是自學合適呢?Python
- 爭論不休的一個話題:金額到底是用Long還是BigDecimal?Decimal
- 用 vuetifyjs 擼了個前端介面,感覺對前端不是很精通的後端還是可以用一用,元件基本夠用VueJS前端後端元件
- 曾經輝煌卻陷入絕境 HTC還能怎麼拯救自己?
- 一看就會(廢)的最小二乘法的推導
- 新手學程式設計,到底是PHP好還是python好呢程式設計PHPPython
- spring-ioc一學就會Spring
- 一學就會的git命令Git
- git與github一學就會Github
- 資料庫連線池長時間不用,乍一用還用不了,結果是防火牆的鍋資料庫防火牆
- 到底是Java好還是Python好?JavaPython
- 宣告 NSString 型別的屬性,到底用 strong 還是 copy ?型別
- 中國遊戲私家史(1):第一位情人到底是FC還是小霸王?遊戲
- 有答案了!一張圖告訴你到底學Python還是Java!你咋看?PythonJava
- 我們怎樣荒廢今天,就會如何虛度明日
- 北大研三,為何會這般焦慮?是讀博還是就業?就業
- 國產ETL工具 etl-engine
- iOS:一用就上癮的跑馬燈檢視iOS
- iOS:一用就上癮的刮刮樂檢視iOS
- ETL 是什麼 ETL 工具有哪些 ETL 工具對比 engine
- 機器學習用java還是python?機器學習JavaPython
- “機器學習還是很難用!機器學習
- 面向場景,HTAP到底是剛需還是炒作?
- 到底是倉庫模式好,還是MVC模式好?模式MVC
- 個人雲沒有公網IP,用聯想T2PRO還是群輝好?
- 精益管理:是門技術,還是門社會科學?
- oracle之優化一用group by或exists優化distinctOracle優化
- 試用完幾十款ETL工具後的經驗總結,ETL工具用這三款就足夠了
- 到底是誰還在給4399充錢?
- 支援國產ETL etl-engine 用go寫的輕量級etl引擎 方便整合到各企業中Go
- 學習Python用Linux、MAC還是Windows呢?PythonLinuxMacWindows