什么是ETL?
ETL(Extract, Transform and Load)是從不同的源系統(tǒng)中提取數(shù)據(jù),然后轉(zhuǎn)換數(shù)據(jù)(如應用計算、連接等)并最終將數(shù)據(jù)加載到數(shù)據(jù)倉庫系統(tǒng)中的過程。ETL 的完整形式是提取、轉(zhuǎn)換和加載。
很容易認為創(chuàng)建數(shù)據(jù)倉庫只是從多個來源提取數(shù)據(jù)并加載到數(shù)據(jù)倉庫的數(shù)據(jù)庫中。這與事實相去甚遠,需要復雜的 ETL 過程。ETL 過程需要來自包括開發(fā)人員、分析師、測試人員、高層管理人員在內(nèi)的各種利益相關(guān)者的積極投入,并且在技術(shù)上具有挑戰(zhàn)性。
為了保持其作為決策者工具的價值,數(shù)據(jù)倉庫系統(tǒng)需要隨著業(yè)務(wù)的變化而變化。ETL 是數(shù)據(jù)倉庫系統(tǒng)的重復活動(每天、每周、每月),需要敏捷、自動化和有據(jù)可查。
為什么需要ETL?
在組織中采用 ETL 的原因有很多:
- 它可以幫助公司分析其業(yè)務(wù)數(shù)據(jù)以做出關(guān)鍵業(yè)務(wù)決策。
- 事務(wù)型數(shù)據(jù)庫無法回答 ETL 示例可以回答的復雜業(yè)務(wù)問題。
- 數(shù)據(jù)倉庫提供公共數(shù)據(jù)存儲庫
- ETL 提供了一種將數(shù)據(jù)從各種來源移動到數(shù)據(jù)倉庫中的方法。
- 隨著數(shù)據(jù)源的變化,數(shù)據(jù)倉庫會自動更新。
- 精心設(shè)計和記錄的 ETL 系統(tǒng)對于數(shù)據(jù)倉庫項目的成功幾乎是必不可少的。
- 允許驗證數(shù)據(jù)轉(zhuǎn)換、聚合和計算規(guī)則。
- ETL 過程允許在源系統(tǒng)和目標系統(tǒng)之間比較樣本數(shù)據(jù)。
- ETL 過程可以執(zhí)行復雜的轉(zhuǎn)換并且需要額外的區(qū)域來存儲數(shù)據(jù)。
- ETL 有助于將數(shù)據(jù)遷移到數(shù)據(jù)倉庫。轉(zhuǎn)換為各種格式和類型以遵循一個一致的系統(tǒng)。
- ETL 是一個預定義的過程,用于訪問和操作源數(shù)據(jù)到目標數(shù)據(jù)庫中。
- 數(shù)據(jù)倉庫中的 ETL 為業(yè)務(wù)提供了深刻的歷史背景。
- 它有助于提高生產(chǎn)力,因為它無需技術(shù)技能即可編碼和重復使用。
數(shù)據(jù)倉庫中的 ETL 過程
ETL 是一個 3 步過程

步驟 1) 提取
在 ETL 架構(gòu)的這一步中,數(shù)據(jù)從源系統(tǒng)中提取到暫存區(qū)。在暫存區(qū)進行轉(zhuǎn)換(如果有),以便源系統(tǒng)的性能不會降低。此外,如果將損壞的數(shù)據(jù)直接從源復制到數(shù)據(jù)倉庫數(shù)據(jù)庫中,回滾將是一個挑戰(zhàn)。暫存區(qū)提供了在提取的數(shù)據(jù)進入數(shù)據(jù)倉庫之前對其進行驗證的機會。
數(shù)據(jù)倉庫需要集成不同的系統(tǒng)、DBMS、硬件、操作系統(tǒng)和通信協(xié)議。來源可能包括大型機等遺留應用程序、定制應用程序、ATM 等接觸點設(shè)備、呼叫交換機、文本文件、電子表格、ERP、來自供應商、合作伙伴等的數(shù)據(jù)。
因此,在物理提取和加載數(shù)據(jù)之前,需要一個邏輯數(shù)據(jù)映射。該數(shù)據(jù)映射描述了源數(shù)據(jù)和目標數(shù)據(jù)之間的關(guān)系。
三種數(shù)據(jù)提取方法:
- 完全提取
- 部分提取 - 沒有更新通知。
- 部分提取 - 帶有更新通知
無論使用何種方法,提取都不應影響源系統(tǒng)的性能和響應時間。這些源系統(tǒng)是實時生產(chǎn)數(shù)據(jù)庫。任何放緩或鎖定都可能影響公司的底線。
在提取期間完成了一些驗證:
- 將記錄與源數(shù)據(jù)協(xié)調(diào)
- 確保沒有加載垃圾郵件/不需要的數(shù)據(jù)
- 數(shù)據(jù)類型檢查
- 刪除所有類型的重復/碎片數(shù)據(jù)
- 檢查所有鑰匙是否到位
步驟 2) 轉(zhuǎn)型
從源服務(wù)器提取的數(shù)據(jù)是原始數(shù)據(jù),不能以其原始形式使用。因此,需要對其進行清理、映射和轉(zhuǎn)換。事實上,這是 ETL 過程增加價值和更改數(shù)據(jù)以生成有洞察力的 BI 報告的關(guān)鍵步驟。
它是重要的 ETL 概念之一,您可以在其中對提取的數(shù)據(jù)應用一組函數(shù)。不需要任何轉(zhuǎn)換的數(shù)據(jù)稱為直接移動或傳遞數(shù)據(jù)。
在轉(zhuǎn)換步驟中,您可以對數(shù)據(jù)進行自定義操作。例如,如果用戶想要數(shù)據(jù)庫中沒有的銷售收入總和。或者,如果表中的名字和姓氏在不同的列中??梢栽诩虞d之前連接它們。

以下是數(shù)據(jù)完整性問題:
- 同一個人的不同拼寫,如 Jon、John 等。
- 有多種表示公司名稱的方法,例如 Google、Google Inc.
- 使用不同的名稱,如克利夫蘭、克利夫蘭。
- 可能存在針對同一客戶的不同應用生成不同賬號的情況。
- 在某些數(shù)據(jù)所需的文件中仍為空白
- 在 POS 收集的無效產(chǎn)品作為手動輸入可能會導致錯誤。
在此階段完成驗證
- 過濾 – 只選擇某些列加載
- 使用規(guī)則和查找表進行數(shù)據(jù)標準化
- 字符集轉(zhuǎn)換和編碼處理
- 測量單位的轉(zhuǎn)換,如日期時間轉(zhuǎn)換、貨幣轉(zhuǎn)換、數(shù)字轉(zhuǎn)換等。
- 數(shù)據(jù)閾值驗證檢查。例如,年齡不能超過兩位數(shù)。
- 從暫存區(qū)到中間表的數(shù)據(jù)流驗證。
- 必填字段不應留空。
- 清潔(例如,將 NULL 映射到 0 或?qū)?Gender Male 映射到“M”和將女性映射到“F”等)
- 將一列拆分為多列并將多列合并為一列。
- 轉(zhuǎn)置行和列,
- 使用查找來合并數(shù)據(jù)
- 使用任何復雜的數(shù)據(jù)驗證(例如,如果一行中的前兩列是空的,那么它會自動拒絕處理該行)
步驟 3) 加載
將數(shù)據(jù)加載到目標數(shù)據(jù)倉庫數(shù)據(jù)庫是 ETL 過程的最后一步。在典型的數(shù)據(jù)倉庫中,需要在相對較短的時間內(nèi)(夜間)加載大量數(shù)據(jù)。因此,加載過程應該針對性能進行優(yōu)化。
在加載失敗的情況下,恢復機制應配置為從故障點重新啟動而不會丟失數(shù)據(jù)完整性。數(shù)據(jù)倉庫管理員需要根據(jù)當前的服務(wù)器性能監(jiān)控、恢復、取消加載。
加載類型:
- 初始加載— 填充所有數(shù)據(jù)倉庫表
- 增量負載——在需要時定期應用正在進行的更改。
- 完全刷新 —擦除一個或多個表的內(nèi)容并重新加載新數(shù)據(jù)。
負載驗證
- 確保關(guān)鍵字段數(shù)據(jù)既不缺失也不為空。
- 基于目標表測試建模視圖。
- 檢查組合值和計算的度量。
- 維表和歷史表中的數(shù)據(jù)檢查。
- 檢查有關(guān)加載的事實和維度表的 BI 報告。
最佳實踐 ETL 流程
以下是 ETL 流程步驟的最佳實踐:
永遠不要嘗試清理所有數(shù)據(jù):
每個組織都希望所有數(shù)據(jù)都干凈,但他們中的大多數(shù)還沒有準備好為等待或沒有準備好等待。清理所有數(shù)據(jù)只會花費太長時間,因此最好不要嘗試清理所有數(shù)據(jù)。
永遠不要清洗任何東西:
總是計劃清理一些東西,因為構(gòu)建數(shù)據(jù)倉庫的最大原因是提供更干凈、更可靠的數(shù)據(jù)。
確定清理數(shù)據(jù)的成本:
在清理所有臟數(shù)據(jù)之前,確定每個臟數(shù)據(jù)元素的清理成本很重要。
為了加速查詢處理,有輔助視圖和索引:
為了降低存儲成本,將匯總數(shù)據(jù)存儲到磁盤磁帶中。此外,需要在要存儲的數(shù)據(jù)量與其詳細使用之間進行權(quán)衡。在數(shù)據(jù)粒度級別進行權(quán)衡以降低存儲成本。
概括:
- ETL 代表提取、轉(zhuǎn)換和加載。
- ETL 提供了一種將數(shù)據(jù)從各種來源移動到數(shù)據(jù)倉庫中的方法。
- 在第一步抽取中,數(shù)據(jù)從源系統(tǒng)抽取到暫存區(qū)。
- 在轉(zhuǎn)換步驟中,對從源中提取的數(shù)據(jù)進行清理和轉(zhuǎn)換。
- 將數(shù)據(jù)加載到目標數(shù)據(jù)倉庫是 ETL 過程的最后一步。
參考guru99