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