数据仓库中的ETL,到底是什么
?
?
“?ETL是建立數據倉庫最重要的處理過程,是Extract、Transform、Load三個英文單詞首字母的簡寫,中文意為抽取、轉換、裝載。”
?
數據的ETL過程
?
????在日常的開發或交流中,會多次提到了ETL一詞,它是Extract、Transform、Load三個英文單詞首字母的簡寫,中文意為抽取、轉換、裝載。ETL是建立數據倉庫最重要的處理過程,也是最體現工作量的環節,一般會占到整個數據倉庫項目工作量的一半以上。
其中:
-  抽取:從操作型數據源獲取數據。 
-  轉換:轉換數據,使之轉變為適用于查詢和分析的形式和結構。 
-  裝載:將轉換后的數據導入到最終的目標數據倉庫。 
?
????建立一個數據倉庫,就是要把來自于多個異構的源系統的數據集成在一起,放置于一個集中的位置用于數據分析。如果一開始這些源系統數據就是兼容的當然最好,但情況往往不是這樣。ETL系統的工作就是要把異構的數據轉換成同構的。如果沒有ETL,不可能對異構的數據進行程序化的分析。
?
?
ETL-E:抽取
?
????抽取操作從源系統獲取數據給后續的數據倉庫環境使用。這是ETL處理的第一步,也是最重要的一步。數據被成功抽取后,才可以進行轉換并裝載到數據倉庫中。能否正確地獲取數據直接關系到后面步驟的成敗。設計和建立數據抽取過程,在ETL處理乃至整個數據倉庫處理過程中,一般是較為耗時的任務。源系統很可能非常復雜并且缺少相應的文檔,因此只是決定需要抽取哪些數據可能就已經非常困難了。通常數據都不是只抽取一次,而是需要以一定的時間間隔反復抽取,通過這樣的方式把數據的所有變化提供給數據倉庫,并保持數據的及時性。除此之外,源系統一般不允許外部系統對它進行修改,也不允許外部系統對它的性能和可用性產生影響,數據倉庫的抽取過程要能適應這樣的需求。
????如果已經明確了需要抽取的數據,下一步就該考慮從源系統抽取數據的方法了。對抽取方法的選擇高度依賴于源系統和目標數據倉庫環境的業務需要。一般情況下,不可能因為需要提升數據抽取的性能,而在源系統中添加額外的邏輯,也不能增加這些源系統的工作負載。有時,用戶甚至都不允許增加任何“開箱即用”的外部應用系統,這叫做對源系統具有侵入性。對于數據抽取,一般會有兩塊方式:邏輯抽取和物理抽取。
?
?
邏輯抽取
邏輯抽取又包含兩種抽取類型:全量抽取和增量抽取。
(1)全量抽取
源系統的數據全部被抽取。因為這種抽取類型影響源系統上當前所有有效的數據,所以不需要跟蹤自上次成功抽取以來的數據變化。源系統只需要原樣提供現有的數據而不需要附加的邏輯信息(比如時間戳等)。
(2)增量抽取
只抽取某個事件發生的特定時間點之后的數據。通過該事件發生的時間順序能夠反映數據的歷史變化,它可能是最后一次成功抽取,也可能是一個復雜的業務事件,但必須能夠標識出特定時間點之后所有的數據變化。
?
物理抽取
依賴于選擇的邏輯抽取方法和能夠對源系統所做的操作和所受的限制,存在兩種物理數據抽取機制:直接從源系統聯機抽取或者間接從一個脫機結構抽取數據。這個脫機結構有可能已經存在,也可能需要由抽取程序生成。
(1)聯機抽取
數據直接從源系統抽取。抽取進程或者直連源系統數據庫,訪問它們的數據表,或者連接到一個存儲快照日志或變更記錄表的中間層系統。注意這個中間層系統并不需要必須和源系統物理分離。
(2)脫機抽取
數據不從源系統直接抽取,而是從一個源系統以外的過渡區抽取。過渡區可能已經存在(例如數據庫備份文件、關系數據庫系統的重做日志、歸檔日志等),或者抽取程序自己建立。
應該考慮以下的存儲結構:
-  數據庫備份文件。一般需要數據還原操作才能使用。 
-  備用數據庫。 
-  平面文件。數據定義成普通格式,關于源對象的附加信息(列名、數據類型等)需要另外處理。 
-  導出文件。關系數據庫大都自帶數據導出功能,如Oracle的exp/expdp程序和MySQL的mysqldump程序,都可以用于生成導出數據文件。 
-  重做日志和歸檔日志。每種數據庫系統都有自己的日志格式和解析工具。 
?
?
ETL-T:轉換
?
???? 數據從操作型源系統獲取后,需要進行多種轉換操作。如統一數據類型、處理拼寫錯誤、消除數據歧義、解析為標準格式等。數據轉換通常是最復雜的部分,也是ETL開發中用時最長的一步。數據轉換的范圍極廣,從單純的數據類型轉化到極為復雜的數據清洗技術。
在數據轉換階段,為了能夠最終將數據裝載到數據倉庫中,需要在已經抽取來的數據上應用一系列的規則和函數。有些數據可能不需要轉換就能直接導入到數據倉庫。
數據轉換一個最重要的功能是清洗數據,目的是只有“合規”的數據才能進入目標數據倉庫。這步操作在不同系統間交互和通信時尤其必要。
?
ETL-L:裝載
?
?????? ETL的最后步驟是把轉換后的數據裝載進目標數據倉庫。這步操作需要重點考慮兩個問題,一是數據裝載的效率問題,二是一旦裝載過程中途失敗了,如何再次重復執行裝載過程。要提高裝載的效率,加快裝載速度,可以從以下幾方面入手。首先保證足夠的系統資源。數據倉庫存儲的都是海量數據,所以要配置高性能的服務器,并且要獨占資源,不要與別的系統共用。在進行數據裝載時,要禁用數據庫約束(唯一性、非空性,檢查約束等)和索引,當裝載過程完全結束后,再啟用這些約束,重建索引,這種方法會很大的提高裝載速度。
?
???? 在數據倉庫環境中,一般不使用數據庫來保證數據的參考完整性,即不使用數據庫的外鍵約束,它應該由ETL工具或程序來維護。數據裝載過程可能由于多種原因而失敗,比如裝載過程中某些源表和目標表的結構不一致而導致失敗,而這時已經有部分表裝載成功了。在數據量很大的情況下,如何能在重新執行裝載過程時只裝載失敗的部分是一個不小的挑戰。對于這種情況,實現可重復裝載的關鍵是要記錄下失敗點,并在裝載程序中處理相關的邏輯。還有一種情況,就是裝載成功后,數據又發生了改變,這時需要重新再執行一遍裝載過程,已經正確裝載的數據可以被覆蓋,但相同數據不能重復新增。簡單的實現方式是先刪除再插入,或者用replaceinto、mergeinto等類似功能的操作。裝載到數據倉庫里的數據,經過匯總、聚合等處理后交付給多維立方體或數據可視化、儀表盤等報表工具、BI工具做進一步的數據分析。
總結
以上是生活随笔為你收集整理的数据仓库中的ETL,到底是什么的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: strtok介绍
- 下一篇: ddr2代内存最大升级到多少_升级内存需
