1. 程式人生 > >Oracle BI基礎之ETL資料增量抽取方案

Oracle BI基礎之ETL資料增量抽取方案

一篇好文見百度文庫:

一、 ETL 簡介

資料整合是把不同來源、格式和特點的資料在邏輯上或物理上有機地集中,從而提供全面的資料共享,是企業商務智慧、資料倉庫系統的重要組成部分。ETL 是企業資料整合的主要解決方案。

隨著資訊化建設的發展,巨大的投資為公安行業建立了眾多的資訊系統,以幫助公安進行內外部業務的處理和管理工作,但是隨著資訊系統的增加,各自孤立工作的資訊系統將會造成大量的冗餘資料和業務人員的重複勞動。資料整合是公安應用整合的重要環節,實現資料整合,可以使更多的人更充分地使用已有資料資源,減少資料收集、資料採集等重複勞動和相應費用。

但是,在實施資料整合的過程中,由於不同使用者提供的資料可能來自不同的途徑,其資料內容、資料格式和資料質量千差萬別,有時甚至會遇到資料格式不能轉換或資料轉換格式後丟失資訊等棘手問題,嚴重阻礙了資料在各部門和各應用系統中的流動與共享。因此,如何對資料進行有效的整合管理已成為增強公安戰鬥力的必然選擇。ETL 是實現資料整合的主要技術。

ETL 中三個字母分別代表的是Extract、Transform、Load,即抽取、轉換、載入。

(1)資料抽取:從源資料來源系統抽取目的資料來源系統需要的資料;

(2)資料轉換:將從源資料來源獲取的資料按照業務需求,轉換成目的資料來源要求的形式,並對錯誤、不一致的資料進行清洗和加工;

(3)資料載入:將轉換後的資料裝載到目的資料來源。ETL 作為構建資料倉庫的一個環節,負責將分佈的、異構資料來源中的資料如關係資料、平面資料檔案等抽取到臨時中間層後進行清洗、轉換、整合,最後載入到資料倉庫或資料集市中,成為聯機分析處理、資料探勘的基礎。現在越來越多地將ETL 應用於一般資訊系統資料的遷移、交換和同步。一個簡單的ETL 體系結構如圖1.1 所示。

二、 ETL 抽取方案

ETL 過程中的主要環節就是資料抽取、資料轉換和加工、資料裝載。為了實現這些功能,ETL 工具會進行一些功能上的擴充,例如工作流、排程引擎、規則引擎、指令碼支援、統計資訊等。

2.1 資料抽取

資料抽取是從資料來源中抽取資料的過程。實際應用中,資料來源較多采用的是關係資料庫。

從資料庫中抽取資料一般有以下幾種方式:

2.1.1 全量抽取

全量抽取類似於資料遷移或資料複製,它將資料來源中的表或檢視的資料原封不動的從資料庫中抽取出來,並轉換成自己的ETL 工具可以識別的格式。全量抽取比較簡單。

2.1.2 增量抽取

增量抽取只抽取自上次抽取以來資料庫中要抽取的表中新增或修改的資料。在ETL 使用過程中,增量抽取較全量抽取應用更廣。如何捕獲變化的資料是增量抽取的關鍵。對捕獲方法一般有兩點要求:準確性,能夠將業務系統中的變化資料按一定的頻率準確地捕獲到;效能,不能對業務系統造成太大的壓力,影響現有業務。目前增量資料抽取中常用的捕獲變化資料的方法有:

2.1.2.1 觸發器方式(又稱快照式):

在要抽取的表上建立需要的觸發器,一般要建立插入、修改、刪除三個觸發器,每當源表中的資料發生變化,就被相應的觸發器將變化的資料寫入一個臨時表,抽取執行緒從臨時表中抽取資料,臨時表中抽取過的資料被標記或刪除。

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

缺點:要求業務表建立觸發器,對業務系統有一定的影響。

2.1.2.2 時間戳方式:

它是一種基於快照比較的變化資料捕獲方式,在源表上增加一個時間戳欄位,系統中更新修改表資料的時候,同時修改時間戳欄位的值。當進行資料抽取時,通過比較系統時間與時間戳欄位的值來決定抽取哪些資料。有的資料庫的時間戳支援自動更新,即表的其它欄位的資料發生改變時,自動更新時間戳欄位的值。有的資料庫不支援時間戳的自動更新,這就要求業務系統在更新業務資料時,手工更新時間戳欄位。

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

缺點:時間戳維護需要由業務系統完成,對業務系統也有很大的傾入性(加入額外的時間戳欄位),特別是對不支援時間戳的自動更新的資料庫,還要求業務系統進行額外的更新時間戳操作,工作量大,改動面大,風險大;另外,無法捕獲對時間戳以前資料的delete和update 操作,在資料準確性上受到了一定的限制。

2.1.2.3 全表刪除插入方式

每次ETL 操作均刪除目標表資料,由ETL 全新載入資料。

優點:ETL 載入規則簡單,速度快。

缺點:對於維表加代理鍵不適應,當業務系統產生刪除資料操作時,綜合資料庫將不會記錄到所刪除的歷史資料,不可以實現資料的遞增載入;同時對於目標表所建立的關聯關係,需要重新進行建立。

2.1.2.4 全表比對方式:

全表比對的方式是採用MD5 校驗碼,ETL 工具事先為要抽取的表建立一個結構類似的MD5 臨時表,該臨時表記錄源表主鍵以及根據所有欄位的資料計算出來的MD5 校驗碼,每次進行資料抽取時,對源表和MD5 臨時表進行MD5 校驗碼的比對,如有不同,進行Update 操作,如目標表沒有存在該主鍵值,表示該記錄還沒有,即進行Insert 操作。

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

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

2.1.2.5 日誌表方式

在業務系統中新增系統日誌表,當業務資料發生變化時,更新維護日誌表內容,當作ETL 載入時,通過讀日誌表資料決定載入那些資料及如何載入。

優點:不需要修改業務系統表結構,源資料抽取清楚,速度較快。可以實現資料的遞增載入。

缺點:日誌表維護需要由業務系統完成,需要對業務系統業務操作程式作修改,記錄日誌資訊。日誌表維護較為麻煩,對原有系統有較大影響。工作量較大,改動較大,有一定風險。

2.1.2.6 Oracle 變化資料捕捉(CDC 方式):

通過分析資料庫自身的日誌來判斷變化的資料。Oracle 的改變資料捕獲(CDC,Changed Data Capture)技術是這方面的代表。CDC 特性是在Oracle9i 資料庫中引入的。CDC 能夠幫助你識別從上次抽取之後發生變化的資料。利用CDC,在對源表進行insert、update 或 delete 等操作的同時就可以提取資料,並且變化的資料被儲存在資料庫的變化表中。這樣就可以捕獲發生變化的資料,然後利用資料庫檢視以一種可控的方式提供給目標系統。CDC 體系結構基於釋出者/訂閱者模型。釋出者捕捉變化資料並提供給訂閱者。訂閱者使用從釋出者那裡獲得的變化資料。通常,CDC 系統擁有一個釋出者和多個訂閱者。釋出者首先需要識別捕獲變化資料所需的源表。然後,它捕捉變化的資料並將其儲存在特別建立的變化表中。它還使訂閱者能夠控制對變化資料的訪問。訂閱者需要清楚自己感興趣的是哪些變化資料。一個訂閱者可能不會對釋出者釋出的所有資料都感興趣。訂閱者需要建立一個訂閱者檢視來訪問經發布者授權可以訪問的變化資料。CDC 分為同步模式和非同步模式,同步模式實時的捕獲變化資料並存儲到變化表中,釋出者與訂閱都位於同一資料庫中;非同步模式則是基於Oracle 的流複製技術。

優點:提供了易於使用的API 來設定CDC 環境,縮短ETL 的時間。不需要修改業務系統表結構,可以實現資料的遞增載入。

缺點:業務系統資料庫版本與產品不統一,難以統一實現,實現過程相對複雜,並且需深入研究方能實現,CDC 產品推出時間短,難免存在BUG。

2.2 資料轉換和加工

從資料來源中抽取的資料不一定完全滿足目的庫的要求,例如資料格式的不一致、資料輸入錯誤、資料不完整等等,因此有必要對抽取出的資料進行資料轉換和加工。資料的轉換和加工可以在 ETL 引擎中進行,也可以在資料抽取過程中利用關係資料庫的特性同時進行。

2.2.1 ETL 引擎中的資料轉換和加工

ETL 引擎中一般以元件化的方式實現資料轉換。常用的資料轉換元件有欄位對映、資料過濾、資料清洗、資料替換、資料計算、資料驗證、資料加解密、資料合併、資料拆分等。這些元件如同一條流水線上的一道道工序,它們是可插拔的,且可以任意組裝,各元件之間通過資料匯流排共享資料。同時ETL 工具還提供了指令碼支援,使得使用者可以以一種程式設計的方式定製資料的轉換和加工行為。

2.2.2 在資料庫中進行資料加工

關係資料庫本身已經提供了強大的SQL、函式來支援資料的加工,如在SQL 查詢語句中新增where 條件進行過濾,查詢中重新命名欄位名與目的表進行對映,substr 函式,case條件判斷等等。相比在 ETL 引擎中進行資料轉換和加工,直接在SQL 語句中進行轉換和加工更加簡單清晰,效能更高;對於SQL 語句無法處理的可以交由ETL 引擎處理。

2.3 資料裝載

將轉換和加工後的資料裝載到目的庫中通常是ETL 過程的最後步驟。裝載資料的最佳方法取決於所執行操作的型別以及需要裝入多少資料。當目的庫是關係資料庫時,一般來說有兩種裝載方式:

1) 直接 SQL 語句進行insert、update、delete 操作。

2) 採用批量裝載方法,如 bcp、bulk、關係資料庫特有的批量裝載工具或api。

大多數情況下使用第一種方法,因為它們進行了日誌記錄並且是可恢復的。但是,批量裝載操作易於使用,並且在裝入大量資料時效率較高。使用哪種資料裝載方法取決於業務系統的需要。

相關推薦

Oracle BI基礎ETL資料增量抽取方案

一篇好文見百度文庫: 一、 ETL 簡介 資料整合是把不同來源、格式和特點的資料在邏輯上或物理上有機地集中,從而提供全面的資料共享,是企業商務智慧、資料倉庫系統的重要組成部分。ETL 是企業資料整合的主要解決方案。 隨著資訊化建設的發展,巨大的投資為公安行業建立

Python學習路——Python基礎基本資料型別(列表、元組和字典)

基本資料型別 數字 字串 列表 list 元組 tuple 字典 dict 布林值 bool 列表和元組 列表:有序,元素可以被修改元組: 書寫格式:元組的一級元素不可被修改,不能被增加或者刪除,一般寫元租的時候,推薦在最後加入',' 索引:v =

Python學習路——Python基礎基本資料型別

基本資料型別 數字 字串 列表 list 元祖 tuple 字典 dict 布林值 bool ×××的魔法 數字 將字串轉換為數字:int a = "123" print(type(a),a) b = int(a) print(type(b),b) n

.NET基礎C#資料型別

(一)列舉變數 [public] enum 列舉名 { 值1, 值2, 值3, ...... } 例: public enum Gender { 男, 女 } //使用列舉變數 Gender sex = Gender.男; public:訪問修飾符 enum:宣告

oracle容災truncate資料恢復

在我的另外幾篇文章中,介紹了關於資料庫閃回的一些內容,對於drop和delete的資料閃回。對於truncate,可能有一些資料庫知識的應該會知道,在正常邏輯中,如果我們將表truncate掉了,是找不回來了,TRUNCATE TABLE 是一次性地從表中刪除所有的資料並不把單獨的刪除操

Python基礎五大資料型別

學習一門語言,往往都是從Hello World開始。 但是筆者認為,在一個黑框框中輸出一個“你好,世界”並沒有什麼了不起,要看透事物的本質,熟悉一門語言,就要了解其底層,就是我們常常說的基礎。本篇從python中的變數型別開始。 五大標準資料型別 在記憶體中儲存的資料可以有多種型別。 例如,

Java基礎基本資料型別到底是幾種?

如果連基本資料型別都不知道,恐怕是還沒入門。當然,有些人不去記,肯定不知道。就知道常用的有 int。其他,沒了。 此文只是說明 基本資料型別有幾種?具體 區別 另行檢視其它文章。 基本資料型別到底有幾種? 7種? 在我的腦海中,好多人還以為常用的基本型別有7種,當

python基礎資料池、程式碼塊、編碼

  一、程式碼塊。if True:   print(333)   print(666) while 1:   a = 1   b = 2   print(a+b) for i in '12324354':   print(i) 雖然上面的縮排的內容都叫程式碼塊,但是他不是pyt

java基礎----基本資料型別和引用資料型別的引數傳遞過程(一)

值傳遞:方法呼叫時,實際引數把它的值傳遞給對應的形式引數,方法執行中形式引數值的改變不影響實際引數的值。 引用傳遞:也稱為傳地址。方法呼叫時,實際引數的引用(地址,而不是引數的值)被傳遞給方法中相對應的形式引數,在方法執行中,對形式引數的操作實際上就是對實際引

kafka原始碼系列mysql資料增量同步到kafka

一,架構介紹生產中由於歷史原因web後端,mysql叢集,kafka叢集(或者其它訊息佇列)會存

ETL增量抽取方案

一、.ETL體系結構     資料庫--->抽取---> 轉換--->載入--->目的資料來源 二、ETL抽取方案    1).全量抽取         全量抽取類似於資料遷移或資料複製,它將資料來源中的表或檢視的資料原封不動的從資料庫中抽

Java基礎基本資料型別、封裝型別

基本資料型別有4類8種: byte、short、int、long、float、double、boolean、char (在棧中可以直接分配記憶體的資料是基本資料型別)(除此之外都是引用資料型別:資料的

redis基礎HyperLogLog資料結構

一、概述: Redis 在 2.8.9 版本添加了HyperLogLog 結構。 RedisHyperLogLog 是用來做基數統計的演算法,HyperLogLog 的優點是,在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定的、並且是很小的。 在 Redis

Oracle Form開發folder(資料夾)功能開發(一)

一、模板製作:YSFOLDER.FMB 開啟TEMPLATE.FMB,如果開啟的是APPSTAND.FMB,以下步驟省略: 1、FORM級觸發器: 1、 在WHEN-NEW-FORM-INSTANCE後面新增以下程式碼: --定義資料夾資料塊 app_folder.defi

MySQL基礎 DDL(資料定義)語句

本文主要介紹MySQL的DDL(資料定義語言)sql的分類:DDL: 資料定義語言操作物件:資料庫和表關鍵詞:create alter dropDML: 資料操作語言關鍵詞:insert delete

C語言基礎基本資料型別

char 字元型別 1位元組  輸出符為%c int  整型  4位元組  輸出符為%d short  短整型  2位元組  輸出符為%hd float 單精度浮點型  4位元組  輸出符為%f l

Android基礎json資料解析

這次來聊聊Android中json資料的解析,既然是基礎就要求只要你看一遍就必須會的,不牽涉到太多的複雜邏輯,目的就是讓你初步認識json資料的解析和學會對簡單的json資料進行解析。 首先第一步我們先來準備一個json的資料,這裡我們建立一個最簡單的json

Python基礎六大資料型別

number: type() 查詢變數型別 isinstance() 判斷資料型別 int() 轉為整數 float()轉為浮點數 str() 轉為字串 tuple() 轉為元組 list() 轉為列表 complex() 轉為複數 math: dir()

HBase——叢集資料手動遷移方案

1、從源HBase叢集中複製出HBase資料庫到本地目錄hadoop fs -get2、目標HBase匯入hadoop fs -put3、修復.META.表hbase hbck -fixMeta4、重新

BI專案筆記》增量ETL資料抽取的策略及方法

增量抽取 增量抽取只抽取自上次抽取以來資料庫中要抽取的表中新增或修改的資料。在ETL使用過程中。增量抽取較全量抽取應用更廣。如何捕獲變化的資料是增量抽取的關鍵。對捕獲方法一般有兩點要求:準確性,能夠將業務系統中的變化資料按一定的頻率準確地捕獲到;效能,不能對業務系統造成太大的壓力,影響現有業務。目前增量資料抽