轉換
轉換(transformtion)是ETL解決方案中最主要的部分,它處理抽取、轉換、加載各階段各種對數據的操作。
轉換包括一個或多個步驟(step),如讀取文件、過濾輸出行、數據清洗或將數據加載到數據庫。
轉換里的步驟通過跳(hop)來連接,跳定義了一個單向通道,允許數據從一個步驟向另一個步驟流動。
除步驟和跳,轉換還包括了注釋(note),注釋是一個小的文本框,可以放在轉換流程圖的任何位置。注釋的主要目的是使轉換文檔化。
步驟
步驟是轉換里的基本組成部分,“表輸入”和“文件文件輸出”顯示了兩個步驟。
轉換的跳
跳(hop)就是步驟之間帶箭頭的連線,跳定義了步驟之間的數據通路。
注意: 跳在轉換里不能循環。因為在轉換里每個步驟都依賴前一個步驟獲取字段值。
並行
當轉換啟動后,所有步驟都同時啟動,從它們的輸入跳中讀取數據,並把處理過的數據寫到輸出跳,直到輸入跳里不再有數據,就路上步驟的運行。
轉換里的步驟幾乎是同時啟動的,所以不可能判斷出哪個步驟是第一個啟動的步驟。
如果想要一個任務沿着指定的順序插,那么就要使用“作業”了。
數據行
數據以數據行的形式沿着步驟移動。一個數據行是零到多個字段的集合,字段包括下面幾種數據類型:
- String: 字符類型
- Number: 雙精度浮點數
- Integer: 帶符號長整型
- BigNumber: 任意精度數值
- Date: 帶毫秒精度的日期時間值
- Boolean: 取值為true和false的布爾值
- Binary: 二進制字段可以包括圖形、聲音、視頻及其他類型的二進制數據
數據轉換
顯式轉換數據類型,如通過“字段選擇”步驟中直接選擇要轉換的數據類型。
隱式轉換數據類型,如將數值類型數據寫入數據庫中的varchar類型字段。
常見數據類型轉換有:
- Date和String的轉換
- Numberic和String的轉換
- Boolean和String的轉換
- String和Boolean的轉換
- Integer和Date的轉換
- Date和Integer的轉換
作業
大多數ETL項目都需要完成各種各樣的操作,而且這些操作要按照一定順序完成。因為轉換以並行方式執行,就需要一個可以串行執行的作業來處理這些操作。
一個作業包括一個或多個作業項,這些作業項以某種順序來執行。作業執行順序由作業項之間的跳(job hop)和每個作業項的執行結果來決定。
作業項
作業項是作業的基本構成部分。如同轉換的步驟,作業項也可以使用圖標的方式圖形化展示 。
默認情況下,所有的作業項都是以串行方式執行的,只是在特殊的情況下,以並行方式執行。
因為作業順序執行作業項,所以必須定義一個地點。有一個叫“開始”的作業項就定義了這個起點。一個作業只能定義一個開始作業項。
作業跳
作業的跳是作業項之間的連接線,它定義了作業的執行路徑。
作業項的運行結果的判斷如下:
-
無條件執行(黃色帶鎖連接線)
黃色帶鎖連接線 -
當運行結果為真是執行(綠色對鈎號連接線)
綠色對鈎號連接線 -
當運行結果為假時執行(紅色停止圖標連接線)
紅色停止圖標連接線
多路徑和回溯
回溯算法就是:假設掃行到了圖里的一條路徑的某個節點時,要依次掃行這個節點的所有子路徑,直到沒有再可以執行的子路徑,就返回該節點的上一節點,再反復這個過程。
上圖A、B、C三個作業項的執行順序如下:
- 首先 “開始” 作業項搜索所有下一個節點作業項,找到了 “A” 各 “C”
- 執行 “A”
- 搜索 “A” 后面的作業項,發現了 “B”
- 執行 “B”
- 搜索 “B” 后面的作業項,沒有找到任何作業項
- 回到 “A” ,也沒有發現其他作業項
- 回到Start,發現另一個要執行的作業項 “C”
- 執行 “C”
- 搜索 “C” 后面的作業項,沒有找到任何作業項
- 回到Start,沒有找到任何作業項
- 作業結束
因為沒有定義執行順序,所以上面例子的執行順序除了ABC,還可以有CAB。
並行執行
有時候需要將作業項並行執行。一個作業項可以並發的方式執行它后面的所有作業項。如下圖:
注意:通過“Run Next Entries in Parallel” 設置
作業項結果
作業執行結果不僅決定了作業的執行路徑,而且還向下一個作業項傳遞了一個結果對象。
結果對象包括了下面一些信息:
- 一組數據行
- 一組文件名
- 讀、寫、輸入、輸出、更新、刪除、拒絕的行數和轉換里的錯誤數
- 腳本作業項的退出狀態
轉換或作業的元數據
轉換和作業是Kettle的核心組成部分。它們可以用XML格式來表示,它們的這些表示方式,都依賴下面的這些元數據:
- 名字
- 文件名
- 目錄
- 描述
- 擴展描述
數據庫連接
Kettle里的轉換和作業使用數據庫連接到關系型數據庫。Kettle數據連接實際是數據庫的描述,也就是建立實際連接需要的參數。實際連接只是在運行時才建立。
工具
Kettle里有不同工具,用於ETL的不同階段。主要工具如下:
- Spoon:圖形界面工具,快速設計和維護復雜的ETL工作流
- Kitchen:運行作業的命令行工具
- Pan:運行轉換的命令行工具
- Carte:輕量級的(大概1MB)Web服務器,用來遠程執行轉換或作業。一個運行有Care進程的機器可以作為從服務器,從服務器是Kettle集群的一部分。
資源庫
資源庫主要用於開發人員在一起工作,開發人員之間的合作。目前有3種覺資源庫:
-
數據庫資源庫:數據庫資源庫是把所有的ETL信息保存在關系型數據庫中。
-
Pentaho資源庫:Pentaho資源庫是一個插件,在Kettle的企業版中有這個插件。
-
文件資源庫:文件資源庫是在一個文件目錄下定義一個資源庫。這里的文件目錄包括:zip文件、Web服務、FTP服務等。
作者:小糾結在簡書
鏈接:https://www.jianshu.com/p/a02480e2dda1
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
