ETL流程介紹及經常使用實現方法

ETL是英文Extract-Transform-Load 的縮寫,用來描述將數據歷來源端通過抽取(extract)、轉換(transform)、加載(load)至目的端的過程。常見於數據倉庫開發中將數據由業務系統歸集到數據倉庫(DW)或者數據集市的過程。在ETL三個部分中,花費時間最長的是「T」(Transform,清洗、轉換)的部分,通常狀況下這部分工做量是整個ETL的2/3。算法

1抽取做業

將從源數據庫(一般爲業務系統)得到數據的過程。數據庫

在作這一步的以前,每每要預先分析本身須要什麼數據,劃分好範圍,確認具體的技術部門和業務部門。服務器

1.1手工開發抽取做業時候的經常使用方法:

1.1.1當數據源和DW爲同一類數據庫時
通常狀況下,DBMS(SQLServer、Oracle)都會提供數據庫連接功能,能夠在數據源(業務系統)和DW內創建數據庫連接(如DB2的聯邦數據庫NICKNAME),而後在DW內直接SELECT訪問。網絡

優勢是實現使用簡單,邏輯簡單;缺點是容易被濫用對源數據庫形成較大的負載壓力。框架

1.1.2當數據源和ODS爲不一樣類型數據庫時
o   將源數據庫的數據導出爲文本文件,利用FTP協議進行傳輸導入ODS區域。工具

優勢是實現簡單,對源系統壓力較小。缺點是傳輸步驟增長了,處理須要的時間增長。性能

o   將部分數據庫間能經過ODBC創建源數據庫和目標數據庫連接,此時也能直接使用SELECT獲取數據。測試

優勢是實現使用簡單,邏輯簡單;缺點是容易被濫用對源數據庫形成較大的負載壓力,且創建時較爲複雜。大數據

1.2更新數據的時間和數量的問題

1.2.1實時抽取數據
這類抽取方式在數據倉庫中不多見到,由於通常來講數據倉庫對數據的實時性要求並不高。實時抽取常見於BI中的CRM系統,好比在實時營銷中,客戶一旦進行了某類操做就實時觸發對應的營銷行爲。優化

o   時間戳方式

要求源表中存在一個或多個字段(時間戳),其值隨着新紀錄的增長而不斷增長,執行數據抽取時,程序定時循環檢查經過時間戳對數據進行過濾,抽取結束後,程序記錄時間戳信息。

這種方式的優勢是對源系統的侵入較小,缺點是抽取程序須要不斷掃描源系統的表,對其 有必定壓力。

o   觸發器方式

要求用戶在源數據庫中有建立觸發器和臨時表的權限,觸發器捕獲新增的數據到臨時表中,執行抽取時,程序自動從臨時表中讀取數據。

這種方式的優勢是實時性極高,缺點是對源系統的侵入性較大,同時會對源數據庫形成很大的壓力(行級觸發器),極可能影響源系統的正常業務。

o   程序接口方式

改造源系統,在修改數據時經過程序接口同步發送數據至目標庫,發送數據的動做能夠跟業務修改數據動做脫耦,獨立發送。

這種方法的優勢是對源系統的形成壓力較小,實時性較強;缺點是須要對源系統的侵入性較強,須要源系統作較大的改造。

1.2.2批量抽取數據
爲了保證數據抽取時數據的準確性、完整性和惟一性,同時下降抽取做業對源數據庫形成的壓力,抽取做業的加載必須避開源數據的生成時間。這種方法通常用於實時性要求不高的數據。好比T+1或者每個月1日進行抽取。

1.2.2.1經常使用實現
o   日誌檢查

須要源數據庫生成數據完畢以後,在外部生成日誌。抽取程序定時檢查源系統的執行日誌,發現完成標誌後發起抽取做業。

這種方式優勢是可靠性高,對源數據庫形成的壓力較小。缺點是須要源數據庫配合生成可供檢查的外部日誌。

o   約定時間抽取

能夠直接約定一個加載完畢同時對源數據庫壓力較小的時間(如每日凌晨2點),抽取程序創建定時任務,時間一到自動發起抽取做業。

這種方式優勢是對源數據庫的侵入性和形成的壓力較小;缺點是可靠性不高,可能會發生數據未生成完畢也直接進行抽取的狀況。

1.2.2.2根據下載時候對數據的篩選方式能夠分爲
o   全量下載

用於:

·源數據量較小,如維表。

·數據變化較大,好比90%的數據都產生了變化的表。

·變化的數據不能預期,沒法標示,如帳戶表。

的時候。

優勢在於下載較爲簡單且能容納任何狀況的數據變化;缺點是若是數據量較大,須要抽取至關長的時間,同時會佔用大量的IO和網絡資源。

o   增量下載

經常使用於數據只增不減的表,如交易明細表等。

·時間戳

源系統在修改或添加數據時更新對應的時間戳字段(如交易表的日期字段),抽取程序根據時間戳選擇須要更新的數據進行抽取。

·觸發器方式

要求用戶在源數據庫中有建立觸發器和臨時表的權限,觸發器捕獲新增的數據到臨時表中,到執行抽取的時間時,程序自動從臨時表中讀取數據。佔用資源較多,不建議使用。

優勢是下載的數據較小,速度較快,佔用資源少;缺點是使用限制較大,有時候須要源系統進行改造支持。

2轉換做業

這一步包含了數據的清洗和轉換。

2.1數據清洗

任務是過濾不符合條件或者錯誤的數據。

這一步經常出如今剛剛開始創建數據倉庫或者源業務系統仍未成熟的時候,此時發現錯誤數據須要聯繫源業務系統進行更正,部分可預期的空值或者測試用數據能夠過濾掉。

2.2數據轉換

這一步是整個ETL流程中最爲佔用時間和資源的一步。

數據轉換包含了簡單的數據不一致轉換,數據粒度轉換和耗時的數據關聯整合或拆分動做。這裏可能存在各類各樣千奇百怪的需求。對於核心數據倉庫來講,裏面每每是對數據進行按照主題劃分合併的動做。同時,也會添加一些爲了提高執行效率而進行反範式化添加的冗餘字段。

根據實現方式的不一樣,能夠區分爲使用數據庫存儲過程轉換和使用高級語言轉換

o   使用數據庫存儲過程轉換

使用SQL開發存儲過程完成轉換做業是不少銀行經常使用的方法。

它的優勢是開發簡單、能支持絕大部分轉換場景;缺點在於佔用資源多且受制於單一數據庫性能,沒法作到橫向擴展。

所以,除了業務的理解能力外,對SQL海量數據處理的優化能力在此也很是重要。好比:

·        利用數據庫的分區性,選擇良好的分區鍵。

·        建表時合理選擇主鍵和索引,關聯時候必須使用主鍵或索引進行關聯。

·        關注數據庫對SQL的流程優化邏輯,儘可能選擇拆分複雜SQL,引導數據庫根據你選擇流程進行數據處理

·        合理反範式化設計表,留出適當的冗餘字段,減小關聯動做。

具體的優化根據不一樣的數據庫有着不一樣的處理方式,根據所選用的數據庫不一樣而定。

o   使用高級語言轉換

使用高級語言包含了經常使用的開發C/C++/JAVA等程序對抽取的數據進行預處理。

自行使用高級語言開發的優勢是運行效率較高,能夠經過橫向擴展服務器數量來提升系統的轉換做業處理能力;缺點是開發較爲複雜,同時雖然能進行較爲複雜的邏輯的開發,可是對於大數據量的關聯的支持能力較弱,特別是有複數的服務器並行處理的時候。

3加載做業

轉換做業生成的數據有可能直接插入目標數據庫,通常來講,這種狀況常見於使用數據庫存儲過程進行轉換做業的方案。此時,ETL做業位於目標數據庫上,加載做業只須要使用INSERT或者LOAD的方式導入目標表便可。此時轉換做業和加載做業每每是在同一加工中完成的。

當使用高級語言開發時,ETL做業有着專門的ETL服務器,此時,轉換做業生成的每每是文本文件,在轉換做業完成後須要使用目標庫特有的工具導入或者經過INSERT入目標庫。

同時,根據抽取做業的數據抽取方式的不一樣(全量、增量),對目標表進行替換或者插入動做。

4流程控制

抽取加載和轉換做業須要一個集中的調度平臺控制他們的運行,決定執行順序,進行錯誤捕捉和處理。

較爲原始的ETL系統就是使用CRON作定時控制,定時調起相應的程序或者存儲過程。可是這種方式過於原始,只能進行簡單的調起動做,沒法實現流程依賴行爲,同時按步執行的流程控制能力也弱,錯誤處理能力幾乎沒有。只適合於極其簡單的狀況。

對於自行開發的較爲完善的ETL系統,每每須要具備如下幾個能力:

·        流程步驟控制能力

調度平臺必須可以控制整個ETL流程(抽取加載和轉換做業),進行集中化管理,不能有流程遊離於系統外部。

·        系統的劃分和先後流程的依賴

因爲整個ETL系統裏面可能跨越數十個業務系統,開發人員有數十撥人,必須支持按照業務系統對ETL流程進行劃分管理的能力。

同時必須具備根據流程依賴進行調度的能力,使得適當的流程能在適當的時間調起。

·        合理的調度算法

同一時間調起過多流程可能形成對源數據庫和ETL服務器還有目標數據庫造成較大負載壓力,故必須有較爲合理的調度算法。

·        日誌和警告系統

必須對每一步的流程記錄日誌,起始時間,完成時間,錯誤緣由等,方便ETL流程開發人員檢查錯誤。對於發生錯誤的流程,能及時通知錯誤人員進行錯誤檢查和修復。

·        較高可靠性

5經常使用商業ETL工具

經常使用的ETL工具備Ascential公司的Datastage、Informatica公司的Powercenter、 NCR Teradata公司的ETL Automation等。

·        Datastage

是使用高級語言進行開發ETL服務器的表明。使用JAVA進行開發E/T/L的整個流程,同時支持平行添加服務器提高處理效率的方法。

·        Automation

基於Teradata的TD數據庫的ETL調度框架。其ETL流程是使用DSQL的存儲過程進行開發,利用TD數據庫的海量數據處理能力,也具備必定的平行擴展能力。

相關文章
相關標籤/搜索