python實現數據倉庫ETL


通常講的數據倉庫ETL, 可以分為ETL和ELT兩種實現方式.  ELT是在加載到倉庫后, 再做數據轉換.  ETL 是在加載之前完成轉換, 落地的數據就是轉換后的樣子了.

 

ELT多使用在MPP架構的數據倉庫平台上, 比如Teradata, greenplum, 主要考慮點是, MPP數據倉庫數據處理能力強, 在加載后再做轉換, 可以充分利用這一優勢.  另外, Extract和Load過程很簡單, 且數據倉庫廠商提供unloading/loading的命令行工具一般具有並行處理能力, 所以直接用這些命令行工具滿足. 至於轉換部分過程, 多為通過sql查詢出stage區新加的記錄, 然后做一些運算, 最后再拼sql將計算后的數據放在另一個區.

 

如果數據倉庫是建在Oracle/SQL Server這類架構數據庫上, 多采用ETL方式, 將轉換放在數據倉庫外運行, 以減輕數據倉庫的壓力. ETL過程也多選購商業軟件, 比如Datastage, SSIS.

 

在ELT方案中, python也可大有作為. 即使是使用數據倉庫廠商提供的命令行工具做Extracting和Loading, python仍可以作為膠水. 拼sql, python的三引號字符串以及字符串操作都超強, 很適合. 

 

在ETL方案中, 使用python完成流程控制自然是很輕松的, 所以關鍵點是,  提供一個高效的基於記錄行的pipeline執行機制,  以及如何提供較高的執行效率.  下面有幾個開源項目還不錯, 值得在項目中一試.  其實甚至不用什么額外的開源項目, 用標准庫也很容易做transform的, 因為python內建支持sqlite, 接下來無需多講了.  

 

基於pipeline的開源項目:

(推薦度*****) petl, http://petl.readthedocs.org/en/latest/

  http://pypi.python.org/pypi/petl

  http://pypi.python.org/pypi/petlx

  特點是: 項目活躍度較高; 文檔很不錯; 支持多種數據源; 支持iterator(具有lazy加載機制); 很容易學習.

 

(推薦度****) pygrametl,  http://pygrametl.org/  http://people.cs.aau.dk/~chr/pygrametl/ ,

  特點是: 文檔全, 有用戶實例. 我看了寫代碼, 代碼質量很高; 作者實現了基於維度建模思想的幾個轉換組件, 支持cpython/jpython, 很容易學習.

 

(推薦度***) pyf,  http://pyfproject.org

 特點是: 具有web 頁面, 功能很眩. 大量使用python generator機制, 其本身也是基於flow based programming. 學習難度較大.

 

ETL往往也要關注執行效率, 關於python並行處理, 單機上, CPython當然要選擇multiprocessing方式, 一來可充分利用多核, 同時編程難度也不大.  要是將多個任務分配在幾個機器執行, 我認為選用久經考驗的gearman最合適, 不僅能提供負載均衡, 而且可以改善可用性.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM