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數據庫的海量數據處理能力,也具有一定的平行擴展能力。


免責聲明!

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



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