大家都知道,每個ETL工具都用不同的名字來區分不同的組成部分。kettle也不例外。
比如,在
Kettle的四大不同環境工具
本博客,是立足於kettle工具的設計模塊的概念介紹。
1、轉換
轉換(transformation)是ETL解決方案中最主要的部分,它處理(抽取、轉換、加載各階段)各種對數據行的操作。轉換包括一個或多個步驟(step),如讀取文件、過濾輸出行、數據清洗或將數據加載到數據庫。
轉換里的步驟通過跳(hop)來連接,跳定義了一個單向通道,允許數據從一個步驟向另一個步驟流動。在kettle里,數據的單位是行,數據流就是數據行從一個步驟到另一個步驟的移動。數據流也叫作記錄流。
轉換包括步驟、跳、注釋、並行、數據行、數據轉換和其他轉換。
1.1 注釋
注釋是一個小的文本框,可以放在轉換流程圖的任何位置,注釋的主要目的是使轉換文檔化。
1.2 步驟
步驟是轉換的基本組成部分。它是以圖標的方式來圖形化展現。
- 步驟需要有一個名字,這個名字在轉換范圍內唯一。
- 每個步驟都會讀、寫數據行(唯一例外是“生成記錄”步驟,該步驟只寫數據)
- 步驟將數據寫到與之相連的一個或多個輸出跳(outgoing hops),再傳送到跳的另一端的步驟。對另一端步驟來說這個跳就是一個輸入跳(incoming hops),步驟通過輸入跳接收數據
- 大多數的步驟都可以有多個輸出跳。一個步驟的數據發送可以被設置為輪流發送和復制發送。輪流發送是將數據行依次發給每一個輸出跳(round robin),復制發送是將全部數據行發送給所有輸出跳。
- 在運行轉換時,一個線程運行一個步驟和步驟的多份拷貝,所有步驟的線程幾乎同時運行,數據行連續地流過步驟之間的跳。
1.3 跳
跳(hop)就是步驟之間帶箭頭的連線,跳定義了步驟之間的數據通路。跳實際上是兩個步驟之間的被稱為行集(row set)的數據行緩存(行集的大小可以在轉換的設置里定義)。當行集滿了,向行集寫數據的步驟將停止寫入,直到行集里又有了空間。當行集空了,從行集讀取數據的步驟停止讀取,直到行集里又有可讀的數據行。
注意: 當創建新跳的時候,需要記住跳在轉換里不能循環。因為在轉換里每個步驟都依賴前一個步驟獲取字段值。
1.4 並行
跳的這種基於行集緩存的規則允許每個步驟都由一個獨立的線程運行,這樣並發程序最高。這一規則也允許數據以最小消耗內存的數據流的方式來處理。在數據倉庫里,我們經常要處理大量數據,所以這種並發低耗內存的方式也是ETL工具的核心需求。
對於Kettle,不可能定義一個執行順序,不可能也沒有必要確定一個起點和終點。因為所有步驟都以並發方式執行:當轉換啟動后,所有步驟都同時啟動,從它們的輸入跳中讀取數據,並把處理過的數據寫到輸出跳,直到輸入跳里不再有數據,就中止步驟的運行。當所有的步驟都中止了,整個轉換就中止了。也就是說,從功能的角度來看,轉換也有明確的起點和終點。
1.5 數據行
數據以數據行的形式沿着步驟移動。一個數據行是零到多個字段的集合,字段包括下面幾種數據類型。
1.6 數據轉換
1.7 其他轉換
2、作業
大多數ETL項目都需要完成各種各樣的維護工作。例如,當運行中發生錯誤,要做哪些操作;如何傳送文件;驗證數據庫表是否存在等。而且這些操作要按照一定順序完成 。因為轉換以並行方式執行,就需要一個可以串行執行的作業來處理這些操作。
一個作業包括一個或多個作業項,這些作業項以某種順序來執行。作業執行順序由作業項之間的跳(job hop)和每個作業項的執行結果來決定。
3、轉換或作業的元數據
。。
4、數據庫連接
。。
5、工具
。。
6、資源庫
。。
7、虛擬文件系統
。。