1. 程式人生 > >2017年3月21日kettle步驟概覽--抽取

2017年3月21日kettle步驟概覽--抽取



抽取:所有的資料抽取類的步驟都放在Input(輸入)類別下,輸入類的步驟,顧名思義就是從外部資料來源抽取資料,把資料輸入到Kettle的資料流中。一般來說準備要讀取的資料(尤其是檔案類資料)的功能,往往在作業裡完成,實際讀取資料才在轉換著一層。

一、處理文字檔案

總體來說文字檔案分兩類:

1、分隔符檔案:這種檔案裡,每個欄位或列都由特定字元或製表符分隔。通常這類檔案也稱CSV(逗號分割檔案)檔案或者製表分隔符檔案。

2、固定寬度檔案:每個欄位列都有指定的寬度或者長度。

‘文字檔案輸入’步驟的其他主要功能如下:

1、從前一個步驟讀取檔名。

2、一次執行讀取多個檔名。

3、從.zip

.gzip壓縮檔案中讀取檔案。

4、不用指定檔案結構就可以顯示檔案內容。

5、指定逃逸字元。

6、錯誤處理。

7、過濾。

8、指定本地化的日期格式。

  而比起前兩個‘簡化版’的文字檔案輸入功能,後者是要付出佔用更多的記憶體和CPU的處理能力的代價。

二、處理XML檔案

XML檔案時擴充套件標識語言的縮寫,是一種平面文字檔案中定義資料結構和內容的開放標準。XML檔案不是普通的文字檔案,而是一種遵照規範的結構化的文字檔案。

Kettle裡有四種驗證XML資料是否有效的方法:

1、驗證XML檔案是否有效:基本的驗證,只驗證XML是否有完整的開始和結束標籤,隔層巢狀的結構是否完整。

2DTD驗證:檢查XML檔案的結構是否符合(Data Type Defintion)檔案的要求。DTD檔案可以是一個獨立的檔案,也可以包含在XML檔案中。

3XSD驗證(作業):檢查XML檔案的結構是否符合XML Schema定義檔案的要求。

4XSD驗證(轉換):和上面相同,但XML是在資料流的欄位裡(如資料庫的列裡包含XML格式資料)。

三、特殊檔案型別

  Access輸入步驟:Access檔案是一種輕量級的原型資料庫或個人資料庫,在被增加網路驅動功能後,它可以作為一些緊急任務的解決方法。Kettle裡有‘Access輸入’步驟,可以從Access檔案裡抽取資料,但

Access不能被加密。

四、處理SAP資料

當需要抽取變換的、新增的或刪除的資料,有以下三種方法:

1、釋出檔案:可以要求SAP開發人員一個程式、這個程式可以把變化的資料釋出到一個文字檔案中。大多數專案都是這樣實現的,因為ETL不能直接訪問SAP系統。

2、基於快照

3、給RFC增加引數:可以給RFC增加一個引數,來過濾出編號的資料,但這需要在SAP上來做修改。

資料剖析

資料剖析可以完成下面3個層次的工作:

1、列特徵分析:蒐集某一列資料的統計資訊。

2、依賴性特徵分析:分析表中不同列之間的依賴關係。

3、連線特徵分析:分析不同表之間的依賴關係。

  資料剖析工作的起點一般就是分析特徵分析,它可以生成關於一列資料的統計資料,統計資訊包括但不限於:

1、不同值的個數:這一列裡有多少個值不相同的資料。

2NULL值和空字串的個數:這一列有多少個NULL值和空值。

3、最大最小值:這個統計不只用於數值型別的資料,也可以用於文字檔案的資料。

4、數值型別的合計、中位數、平均數、標準差:各種關於數值型別的統計資料。

5、字串模式和長度:可以用來驗證資料格式是否正確

6、單詞個數、大小寫字元的個數:這一列裡的單次的總個數,這些單次是全大寫的還是全小寫的,或者大小寫混合的。

7、詞頻統計:一列裡,詞頻最大、最小的N個單詞。

CDC:變更資料捕獲

  ETL過程的第一步就是從不同的資料來源抽取資料並把資料儲存在資料快取區。這個過程的主要挑戰就是初始載入的資料量大和比較慢的網路延遲。在初始載入完成後,不能再把所有資料重新載入一遍。只需要抽取變化的資料。識別出變化的資料並只抽取這些變化的資料稱為變化資料捕獲。

CDC可以分為兩種:一種是侵入性的,另一種是非侵入性的。所謂侵入性的是指CDC操作可能會給源系統帶來效能的影響。只要CDC操作以任何一種方式執行了SQL語句,就可以認為是侵入性的CDC。以下四種CDC方法只有一種不是侵入性的:

1、基於源資料的CDC

  基於源資料的CDC要求源資料裡有相關的屬性列,ETL過程可以利用這些屬性列,來判斷出那些資料是增量資料,常見的屬性列有一下兩種:

1)時間戳:這種方法至少需要一個更新時間戳,但最好有兩個時間戳:一個是插入時間戳(記錄什麼時候建立)和一個更新時間戳(記錄什麼時間最後一次更新)。

2)序列:大多數資料庫都有自增序列。如果資料庫表用到裡這種序列,就可以很容易識別出新插入的資料。

  這兩種方法都需要一個額外的資料庫來儲存上一次更新時間或上次抽取的最後一個序列號。一般是在一個獨立的模式下或在資料緩衝區裡建立這個引數表,不能在資料倉庫裡建立,更不能在資料集市裡建立。基於時間戳和自增列的方法是CDC最簡單的實現方式,所以也是最常用的方法。缺點如下:

1)區分插入操作和更新操作:只能當源系統包含了插入時間戳和更新時間戳兩個欄位,才能區別插入和更新,否則不能區分。

2)刪除急了的在操作:不能捕獲到刪除操作,除非是邏輯刪除

3)多次更新監測:如果在一次同步週期內,資料被更新了多次,只能同步最後一次更新操作,中間的更新操作都丟失了。

4)實時能力:時間戳和基於序列的資料抽取一般適用於批量操作,不適合實時場景下的資料載入。

2基於觸發器的CDC

當執行insertupdatedelete這些SQL語句時,可以啟用資料庫裡的觸發器,並執行一些動作。就是說觸發器可以用來捕獲變更的資料並把資料儲存到中間臨時表裡。然後這些變更的資料再從臨時表裡取出,被載入到資料倉庫的資料快取區裡。但大多數場合下,不允許向資料庫裡新增觸發器(需要變動資料庫,服務協議裡不允許或者管理員不允許),而且這種方法還會降低系統的效能,所以一般用的不多。

   作為直接在源資料庫上建立觸發器的替代方法,可以使用源資料庫的複製功能,先把源資料庫上的資料複製到資料倉庫的接收表中,在接收表上建立觸發器以提供CDC功能。儘管這種方法看上去過程冗餘、需要額外的儲存空間,但實際非常有效,而且沒有侵入性。

3、基於快照的CDC

  如果沒有時間戳、也不能用觸發器,就要使用快照表了,通過比較來獲得變化。快照表就是一次性抽取源系統中全部資料,把這些資料載入到資料倉庫的緩衝區中。下一次需要同步時,再從源系統中抽取全部資料,並把全部資料也放到資料倉庫的緩衝區中,作為這個表的第二版本,然後再比較這兩個版本的資料,找到變化。

  基於快照的CDC可以檢測到插入、更新和刪除的資料,這是相對於基於時間戳的CDC方案的優點,但它的缺點是要大量的儲存空間來儲存這些快照。另外,在表比較大時,也會有比較嚴重的效能問題。

4、基於日誌的CDC

最高階的和最沒有侵入性的CDC方法是基於日誌的方式。資料庫會把每個插入、更新、刪除操作記錄到日誌裡。

CDC比較

                            時間戳          快照方式觸發器方式         日誌方式

能區分插入/更新              否              是                

週期內,檢測到多次更新       否                

能檢測到刪除                 是                是              

不具有侵入性                 否                

 支援實時                    否                

需要DBA                      否              否                是              

不依賴資料庫                 是              是                

資料釋出

獲得變更資料後,釋出到資料庫中的幾種方法:

1、使用表輸出步驟:這些資料可以被儲存到一個獨立的快取資料表裡。這樣做的好處是可以使用標準的SQL操作來在後面的步驟裡再進行處理,缺點是會帶來額外的負載和冗餘。使用資料庫表並不是最快和最有效的方法。

2、文字檔案輸出:在一些場景下,需要先把變更後的資料輸出到文字中,輸出到文字檔案中比輸出到資料庫要更快。這些檔案彙總的資料隨後在被匯入到其他系統中。

3XML輸出:只有在接收資料的資料來源只支援XML格式的資料時,才有必要用這種方式。因為生成XML格式的過程需要打的系統開銷,所以儘量使用其他方式。

4、序列化到檔案:這個步驟使用了特殊的檔案格式,只能被‘De-serializafrom file’步驟讀取。但使用這種私有的檔案格式比文字檔案效能更好,因為Kettle讀取時不再解析檔案格式。

5、複製記錄到結果:這個步驟會把資料儲存在記憶體裡,在後面的轉換裡使用“Getrowsfromresult”步驟可以獲取這些資料。這也是轉換之間交換資料的最快方式,但只限於記憶體。