關於使用ETL工具Kettle的簡單介紹(二)

2021-06-02 16:16:20 字數 1607 閱讀 2053

該篇主要描述已實現的一種

etl過程:

環境描述

由於源端的表結構和正式庫的表結構大部分是一一對應的,所以對於這大部分表進行設計了一套通用的過程進行轉換。現在先來描述該套設計,對於一對多和多對一的過程下章進行描述。

設計概述:

主要需要設計幾個所需的表, n

第乙個表:該表是用來配置源端表結構與目的端表結構中字段的對應關係,該表中主要記錄以下字段:源端庫名、源端表名、源錶該表的欄位名或表示式、目的端庫名、目的端表名、目的端該錶的欄位名、是否為主鍵。根據這些資訊可以動態拼接出以下語句:

insert into targetdb.targettb(cl1,cl2…cln) select cl1,cl2…cln from sourcedb.sourcetb;

該條語句則可以直接將源端的資料進行轉換。

而是否為主鍵欄位,這裡主要是用於對資料進行裝載時。這裡在裝載時是用先

delete

後insert

的方式進行裝載的;

n第二個表:該表是用來配置整個

etl流程的表。其中主要記錄有以下資訊:源端庫名和表名、目的端庫名和表名、

job組號、源端增量上次時間戳點、源端當前最大時間戳、轉換臨時庫上次裝載時間戳點、轉換臨時庫當前最大時間戳點、每次執行資料量、每次迴圈次數、轉換發生時間、裝載發生時間;

n第三個表:該表是用來記錄每個環節的錯誤日誌資訊:其中主要記錄以下資訊:源端表名、目的端表名、起止時間、

job組號、錯誤型別、處理狀態和錯誤詳細日誌。

設計詳細描述:

通過以上三個表大致可以將一對一的

etl整個過程實現,並且可以做到監控等。

一、獲取增量,並且進行不同表的不同業務邏輯的轉換,將轉換後的記錄存到乙個臨時庫中。

1.1主程式(詳情請見其中的注釋)

1.2每個表的詳細流程圖

該圖是通過分頁的方式對找到的增量進行分頁處理,每次處理配置表中定義的數量,迴圈次數也在配置表中進行了定義。每個步驟發生了錯誤都將會進行記錄到錯誤日誌表中。執行完該步驟後,就已將增量資料轉換到臨時庫中。下一步就是將該部分資料裝載到正式環境中。

二、裝載臨時庫中的資料到正式環境中

2.1 主程式 跟上面的主程式一樣

略2.2 每個表的流程圖

該圖中表述了兩步,第一步是裝載到loaddata庫中,第二步是裝載到產品庫中。有人會問為什麼不直接裝載到產品庫中呢?因為發生業務邏輯轉換的庫跟正式環境產品庫是物理隔離的,即在兩台不同的伺服器上。而為了使先delete後insert這兩個操作放在乙個事務中,我們將裝載過程用儲存過程來完成。有人又要問了,資料庫中dblink不是也可以嗎?經過測試,如果使用dblink的話,則會發生乙個錯誤:當由於網路等原因導致session中斷,而沒有裝載成功時,這時dblink並不會返回錯誤值,而是一直卡在程序中。而當遇到表中有附件的情況時,這種情況發生的頻率會更高。所以現在在產品庫端也使用了臨時庫來完成該操作。

2.3 2.2步驟中的「裝載到loaddata」步驟圖

2.4  2.2步驟中的「裝載到產品庫」步驟圖

開源ETL工具 kettle的使用入門介紹

首先,給大家介紹一寫關於etl的基本知識。etl是由三個詞組成的。分別是extract,transform,load 也就是抽取,轉換和載入。在現代網際網路企業中使用時比較頻繁的,在商業智慧型bi中也是很受歡迎的。常用的etl工具也有很多,比如infomatia,datastage,kettle,t...

開源ETL工具kettle 資料遷移

由於專案的需求,需要將資料從oracle遷移到mssql,不是簡單的資料複製,而是表結構和欄位名都不一樣,甚至需要處理編碼規範不一致的情況,如下圖所示 注意 oracle和mssql中的同名表的欄位名是不相同的 如果要是採用手工sql語句操作的話會很麻煩,需要考慮 oracle和mssql sql語...

ETL工具kettle設定全域性變數

昨天讓kettle傳入的引數搞的很鬱悶,從網上查一些資訊,大多講的是每個transformation內部傳遞引數,要麼就是講在job中把引數傳進transformation,而且還不正確。大家最常碰到的問題恐怕就是要做增量抽取了吧,增量抽取不可避免要碰到時間戳,那麼我們假如每天晚上需要抽取當天新增的...