ETL
概述
ETL是將數據進行抽取(Extract)、轉換(Transform)和加載(Load)的過程。
數據從不同的數據源抽取到ODS(操作性數據存儲)進行清洗轉換后,加載到DW(數據倉庫)中。
其中花費時間最長的是清洗轉換的部分。
一、ETL的實現
ETL工具
Oracle的OWB、SQL Server 2000的DTS、SQL Server2005的SSIS服務和Informatic
優點:可以快速建立ETL工程,不需要復雜的編碼,提高效率,降低難度
缺點:缺少靈活性
SQL
優點:靈活,能提高效率
缺點:編碼復雜,技術難度高
ETL工具+SQL
綜合前兩種
二、抽取(Extract)
抽取可以作用在從不同的數據源中,在抽取過程中可以進行一些清洗轉換工作,最后會將數據抽取到ODS中。
同時需要明白數據是存放於什么業務系統,業務系統中的數據庫是使用的什么類型數據庫,是否有手工數據,手工數據量有多大,是否存在非結構化的數據。
還要確定數據抽取的方法:主動抽取或由數據庫推送。增量抽取還是全量。每日抽取還是每月抽取。
1、相同數據庫的數據源處理方法
數據庫(如oracle,SQL Server)會提供同種數據庫相互連接功能,在建立了連接關系后直接使用select語句就可以訪問。
2、不同數據庫的數據源處理方法
可以通過ODBC的方式建立連接,如果相互之間不能建立連接,可以通過數據庫提供的工具將數據導出,再導入到ODS。還可以通過程序的方式來處理。
3、文件類型數據源
直接按照第二種方式,將文件導入到ODS中。
4、增量更新
如果數據量龐大,需要考慮進行增量更新。在進行增量更新時,需要記錄下時間戳,每次進行抽取時判斷ODS中最大的時間,再根據這個時間去數據庫中取大於這個時間的所有記錄。
三、數據清洗轉換(Transform)
數據倉庫分為ODS和DW兩部分。
將數據抽取到ODS中做清洗(即將臟數據、不完整數據以及重復數據給過濾掉),再從ODS到DW的過程中轉換,進行一些業務規則的計算和整合。
1、數據清洗
數據清洗主要是過濾掉不符合要求的數據,過濾后需要將過濾后的結果交給主管部門,來確定最后是進行過濾還是進行修復。
其中,不符合要求的數據包括不完整的數據、錯誤的數據以及重復的數據。
(1)不完整的數據:主要是數據中有信息的缺失,對於這類數據,需要將其提取出來交給專門的人員來進行數據修復,修復完整后才能夠寫入DW。
(2)錯誤的數據:主要是由於代碼沒有對用戶寫入的數據進行判斷,導致將不符合規則的數據寫入到了數據庫,如特殊字符或格式不正確等,對於這類數據,需要通過SQL語句的方式提取出來,然后交給專門的人員來進行修復。
(3)重復的數據:同樣的,需要將重復的數據交給主管部門來確認並整理。
2、數據轉換
數據轉換主要是進行不一致的數據轉換、數據粒度的轉換以及商務規則的計算。
(1)不一致的數據轉換:將不同業務數據庫中的相同類型的數據統一,如某個字段在A數據庫是A01,在B數據庫中是B01,進行統一后,就只使用A01。
(2)數據粒度的轉換:業務數據庫中會存儲很明細的數據,而數據倉庫只需要用來分析數據,不需要非常明細的數據,所以會根據數據倉庫的粒度來整理業務系統的數據。
(3)商務規則的計算:業務中的數據指標通常不是簡單的計算就能完成,需要將這些數據計算好了之后再存入數據倉庫庫中。
四、ETL和ELT
ETL是按照E T L的操作順序進行處理的架構:抽取、轉換、加載。而ELT是抽取后先進行加載,最后進行轉換的架構。
在ETL中如果需要提高效率,則需要提高ETL工具的服務器配置,而ELT則需要對相應的數據庫進行調優。
ETL架構的優勢
1、可以分擔數據庫的壓力
2、相對於ELT可以實現更復雜的轉換邏輯
3、使用單獨的服務器,不需要數據庫來分擔
4、和底層的數據庫無關
ELT架構的優勢
1、可以充分利用數據庫
2、保證數據一直在數據庫中,不需要額外的加載操作,提高效率
3、可以對相關數據庫進行調優,以此來獲得更高的效率
五、ETL的四種模式
ETL有四種主要實現模式:觸發器、增量字段、全量同步、日志比對。
1、觸發器
觸發器是普遍采取的一種模式。這種模式根據抽取的要求,在對應的表上建立對應的插入、修改、刪除3個觸發器,當源表的數據發生變化時,觸發器會把變化的數據寫入另一張增量表,后續ETL的抽取就直接從這張增量表中取出而不是源表,增量表中抽取過的數據要進行標記。
優點:抽取的效率高,不需要修改源表結構。
缺點:需要建立觸發器,數據庫有更大壓力。
2、增量字段
增量字段是在源表中增加一個字段,如時間戳,當源表中的數據有新增或者修改等操作時,這個字段也會修改成對應的時間,當使用ETL工具來進行增量數據獲取時,只需要對比已經抽取過的數據中最大的時間戳,再使用這個時間戳在數據庫中比對,就能夠判斷出哪些是新增/修改數據。
優點:使用時間戳的方式提取效率快,方式也比較簡單。
缺點:時間戳字段的維護需要業務代碼來實現,需要在代碼中加入額外的時間戳字段,對老數據的刪除/更新操作有限制,數據准確度不高。
3、全量同步
全量同步是指在抽取之前先獲取源表數據,刪除目標表數據,最后再加載進去的方式。但最好是在數據量不大時使用。
優點:對表結構沒有影響,不需要修改業務代碼,由於是全量的方式,所以基本上沒有風險。
缺點:處理時需要對全表的數據進行比對,性能較低。
4、日志比對
日志比對是通過獲取數據庫的日志來捕獲變化數據,使用較成熟的技術是oracle的CDC技術,它能夠捕獲到上一次抽取之后產生過變化的數據並寫入到相關的日志。
優點:同步效率高。
缺點:如果數據庫版本或者產品不統一,就不好實現抽取。
5、總結
增量機制 | 兼容性 | 完備性 | 抽取性能 | 源庫壓力 | 源庫改動量 | 實現難度 |
---|---|---|---|---|---|---|
觸發器 | 關系型數據庫 | 高 | 優 | 高 | 高 | 容易 |
增量字段 | 關系型數據庫.具有”字段”結構的其它數據格式 | 低 | 較優 | 低 | 高 | 容易 |
全表同步 | 任何數據格式 | 高 | 極差 | 中 | 無 | 容易 |
日志比對 | 關系型數據庫(oracle/mysql) | 高 | 較優 | 中 | 中 | 較難 |