ETL的基礎知識,看完你就全明白了!


 

ETL基礎概念

ETL基礎概念 - 背景

隨着企業的發展,各業務線、產品線、部門都會承建各種信息化系統方便開展自己的業務。隨着信息化建設的不斷深入,由於業務系統之間各自為政、相互獨立造成的數據孤島”現象尤為普遍,業務不集成、流程不互通、數據不共享。這給企業進行數據的分析利用、報表開發、分析挖掘等帶來了巨大困難。
在這里插入圖片描述

在此情況下,為了實現企業全局數據的系統化運作管理(信息孤島、數據統計、數據分析、數據挖掘) ,為DSS(決策支持系統)、BI(商務智能)、經營分析系統等深度開發應用奠定基礎,挖掘數據價值 ,企業會開始着手建立數據倉庫,數據中台。將相互分離的業務系統的數據源整合在一起,建立一個統一的數據采集、處理、存儲、分發、共享中心。
在這里插入圖片描述

在BI項目中ETL會花掉整個項目至少1/3的時間,ETL設計的好壞直接關接到BI項目的成敗。

ETL基礎概念-定義

ETL是將業務系統的數據經過抽取(Extract)、清洗轉換(Transform)之后加載(Load)到數據倉庫的過程,目的是將企業中的分散、零亂、標准不統一的數據整合到一起,為企業的決策提供分析依據。
在這里插入圖片描述

ETL基礎概念-過程

ETL處理分為五大模塊,分別是:數據抽取、數據清洗、庫內轉換、規則檢查、數據加載。各模塊可靈活進行組合,形成ETL處理流程。簡單介紹一下各個模塊之間的主要功能。

數據抽取

  • 確定數據源,需要確定從哪些源系統進行數據抽取
  • 定義數據接口,對每個源文件及系統的每個字段進行詳細說明
  • 確定數據抽取的方法:是主動抽取還是由源系統推送?是增量抽取還是全量抽取?是按照每日抽取還是按照每月抽取?

數據清洗與轉換

  • 數據清洗
    主要將不完整數據、錯誤數據、重復數據進行處理

  • 數據轉換

    • 空值處理:可捕獲字段空值,進行加載或替換為其他含義數據,或數據分流問題庫
    • 數據標准:統一元數據、統一標准字段、統一字段類型定義
    • 數據拆分:依據業務需求做數據拆分,如身份證號,拆分區划、出生日期、性別等
    • 數據驗證:時間規則、業務規則、自定義規則
    • 數據替換:對於因業務因素,可實現無效數據、缺失數據的替換
    • 數據關聯:關聯其他數據或數學,保障數據完整性

數據加載

將數據緩沖區的數據直接加載到數據庫對應表中,如果是全量方式則采用LOAD方式,如果是增量則根據業務規則MERGE進數據庫

ETL VS ELT

ETL架構按其字面含義理解就是按照E-T-L這個順序流程進行處理的架構:先抽取、然后轉換、完成后加載到目標數據庫中。在ETL架構中,數據的流向是從源數據流到ETL工具,ETL工具是一個單獨的數據處理引擎,一般會在單獨的硬件服務器上,實現所有數據轉化的工作,然后將數據加載到目標數據倉庫中。如果要增加整個ETL過程的效率,則只能增強ETL工具服務器的配置,優化系統處理流程(一般可調的東西非常少)。
在這里插入圖片描述

ELT架構則把“L”這一步工作提前到“T”之前來完成:先抽取、然后加載到目標數據庫中、在目標數據庫中完成轉換操作。在ELT架構中,ELT只負責提供圖形化的界面來設計業務規則,數據的整個加工過程都在目標和源的數據庫之間流動,ELT協調相關的數據庫系統來執行相關的應用,數據加工過程既可以在源數據庫端執行,也可以在目標數據倉庫端執行(主要取決於系統的架構設計和數據屬性)。當ETL過程需要提高效率,則可以通過對相關數據庫進行調優,或者改變執行加工的服務器就可以達到。
在這里插入圖片描述

大家可以仔細看看上面兩種架構圖,體會一下他們之間的區別,下面來分析一下他們各自的優點:

ETL架構的優勢

  • 可以分擔數據庫系統的負載(采用單獨的硬件服務器)
  • 相對於ELT架構可以實現更為復雜的數據轉換邏輯
  • 采用單獨的硬件服務器
  • 與底層的數據庫存儲無關

ELT架構的優勢

  • 充分利用數據庫引擎來實現的可擴展性
  • 可以保持所有的數據始終在數據庫當中,避免數據的加載和導出,從而保證效率,提高系統的可監控性
  • 可以根據數據的分布情況進行並行處理優化,並可以利用數據庫的固有功能優化磁盤I/O
  • 通過對相關數據庫進行性能調優,ELT過程獲得3到4倍的效率提升比較容易

ETL 模式介紹

ETL有四種主要實現模式:觸發器模式、增量字段、全量同步、日志比對

觸發器模式

觸發器方式是普遍采取的一種增量抽取機制。該方式是根據抽取要求,在要被抽取的源表上建立插入、修改、刪除3個觸發器,每當源表中的數據發生變化,就被相應的觸發器將變化的數據寫入一個增量日志表,ETL的增量抽取則是從增量日志表中而不是直接在源表中抽取數據,同時增量日志表中抽取過的數據要及時被標記或刪除。
為了簡單起見,增量日志表一般不存儲增量數據的所有字段信息,而只是存儲源表名稱、更新的關鍵字值和更新操作類型(insert、update或delete),ETL增量抽取進程首先根據源表名稱和更新的關鍵字值,從源表中提取對應的完整記錄,再根據更新操作類型,對目標表進行相應的處理。

CREATE OR REPLACE TRIGGER TRI_T_ETL_YB
  BEFORE INSERT OR UPDATE OR DELETE ON T_ETL_YB
  FOR EACH ROW
DECLARE
 CZLX VARCHA2(1); -- 定義操作類型
 BEGIN
   -- 插入日志表(ID,操作時間,操作類型)
   IF DELETING THEN INSERT INTO ETL_LOG(ID,CZSJ,CZLX) VALUES (:old.ID,sysdate,'D');
   ELSE IF UPDATING THEN INSERT INTO ETL_LOG(ID,CZSJ,CZLX) VALUES (:old.ID,sysdate,'U');
   ELSE IF INSERTING THEN INSERT INTO ETL_LOG(ID,CZSJ,CZLX) VALUES (:new.ID,sysdate,'I');
   END IF;
END;

優點:
數據抽取的性能高,ETL 加載規則簡單,速度快,不需要修改業務系統表結構,可以實現數據的遞增加載。

缺點:
要求業務表建立觸發器,對業務系統有一定的影響,容易對源數據庫構成威脅。

增量字段

增量字段方式來捕獲變化數據,原理就是在源系統業務表數據表中增加增量字段,增量字段可以是時間字段,同時也可以是自增長字段(如oracle的序列),設計要求就是源業務系統中數據新增或者被修改時,增量字段就會產生變化,時間戳字段就會被修改為相應的系統時間,自增長字段就會增加。
每當ETL工具進行增量數據獲取時,只需比對最近一次數據抽取的增量字段值,就能判斷出來哪些是新增數據,哪些是修改數據。這種數據抽取方式的優點就是抽取性能比較高,判斷過程比較簡單,最大的局限性就是由於某些數據庫在進行設計的時候,未考慮到增量字段,需要對業務系統進行改造,基於數據庫其他方面的原因,還有可能出現漏數據的情況。

優點:
同觸發器方式一樣,時間戳方式的性能也比較好,ETL 系統設計清晰,源數據抽取相對清楚簡單,可以實現數據的遞增加載。

缺點:
時間戳維護需要由業務系統完成,對業務系統也有很大的侵入性(加入額外的時間戳字段),特別是對不支持時間戳的自動更新的數據庫,還要求業務系統進行額外的更新時間戳操作;
另外,無法捕獲對時間戳以前數據的delete和update 操作,在數據准確性上受到了一定的限制。

全量同步

全量同步又叫全表刪除插入方式,是指每次抽取前先刪除目標表數據,抽取時全新加載數據。該方式實際上將增量抽取等同於全量抽取。對於數據量不大,全量抽取的時間代價小於執行增量抽取的算法和條件代價時,可以采用該方式。
同步流程:
在這里插入圖片描述

優點:
對已有系統表結構不產生影響,不需要修改業務操作程序,所有抽取規則由ETL完成,管理維護統一,可以實現數據的遞增加載,沒有風險。

缺點:
ETL 比對較復雜,設計較為復雜,速度較慢。與觸發器和時間戳方式中的主動通知不同,全表比對方式是被動的進行全表數據的比對,性能較差。當表中沒有主鍵或唯一列且含有重復記錄時,全表比對方式的准確性較差。

日志比對

日志比對的方式是通過獲取數據庫層面的日志來捕獲到變化的數據,不需要改變源業務系統數據庫相關表結構,數據同步的效率比較高,同步的及時性也比較快,最大的問題就是前面所提到的不同的數據庫的數據庫日志文件結構存在較大的差異性,實施分析起來難度比較大,同時需要具備訪問源業務庫日志表文件的權限,存在一定的風險性,所以這種方式有很大的局限性。

日志比對方式中比較成熟的技術是Oracle的CDC(Changed Data Capture)技術,作用同樣是能夠捕獲到上一次抽取之后的產生的相關變化數據,當CDC對源業務表進行新增、更新和刪除等相關操作的時就可以捕獲到相關變化的數據,相對於增量字段方式,CDC方式能夠較好的捕獲到刪除數據,並寫入相關數據庫日志表,然后再通過視圖或者別的某種可操作的方式將捕獲到的變化同步到數據倉庫當中去。

優點:
ETL同步效率較高,不需要修改業務系統表結構,可以實現數據的遞增加載。

缺點:
業務系統數據庫版本與產品不統一,難以統一實現,實現過程相對復雜,並且需深入研究方能實現。或者通過第三方工具實現,一般都是商業軟件,而且費用較高。

模式對比

增量機制 兼容性 完備性 抽取性能 源庫壓力 源庫改動量 實現難度
觸發器 關系型數據庫 容易
增量字段 關系型數據庫.具有”字段”結構的其它數據格式 較優 容易
全表同步 任何數據格式 極差 容易
日志比對 關系型數據庫(oracle/mysql) 較優 較難

ETL 工具

為什么要使用ETL工具

  • 當數據來自不同的物理主機,這時候如果使用SQL語句去處理的話就顯得比較吃力且開銷也更大
  • 數據來源可以是各種不同的數據庫或者文件,這時候需要先把他們整理成統一的格式后才可以進行數據的處理,這一過程用代碼實現顯然有些麻煩
  • 在數據庫中我們當然可以使用存儲過程去處理數據,但是處理海量數據的時候存儲過程顯然比較吃力,而且會占用較多數據庫的資源,這可能會導致數據庫資源不足,進而影響數據庫的性能。

ETL工具選擇依據

  • 對平台的支持程度
  • 抽取和裝載的性能是不是較高,且對業務系統的性能影響大不大,侵入性高不高
  • 對數據源的支持程度
  • 是否具有良好的集成性和開放性
  • 數據轉換和加工的功能強不強
  • 是否具有管理和調度的功能

主流ETL工具推薦

PDI(KETTLE) DATASTAGE
免費 IBM商業軟件
開源產品,使用純JAVA代碼編寫的ETL工具 專業的ETL工具,價格不菲
跨平台 適合大規模的ETL應用
擴展性好  

好了,各位朋友們,本期的內容到此就全部結束啦,能看到這里的同學都是優秀的同學,下一個升職加薪的就是你了!
如果覺得這篇文章對你有所幫助的話請掃描下面二維碼加個關注,當然也歡迎加我微信,拉你進技術交流群!
“轉發” 加 “在看”,養成好習慣!咱們下期再見!
在這里插入圖片描述

 


免責聲明!

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



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