【Kettle Spoon】課程要點簡記

一、入門

1.Kettle簡介

ETL是數據抽取、轉換、加載。
Spoon是圖形界面接口。
Kettle包含job和transformation兩種腳本

2.Kettle下載

下載網址:https://community.hitachivantara.com/docs/DOC-1009855
國內鏡像地址:http://mirror.bit.edu.cn/pentaho/Pentaho%208.2/client-tools/

3.Kettle部署

  • 安裝JDK
  • 配置環境變量
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 修改空間大小(實際應用中如果文件比較大,可能導致內存溢出)
    在這裏插入圖片描述

4.界面簡介

工具欄
工具圖表
樹形列表
工作區

5.快速體驗

抽取:輸入。
轉換:轉換。
加載:輸出。
新建加載,拖動圖標,修改參數,獲取字段,連接步驟(shift+拖動連線),完成運行。

6.執行結果

日誌:顯示錯誤行、清空日誌、設置日誌顯示級別
步驟度量
Metrics
Preview data

7.核心概念

  • 可視化編程:使用圖形化的方式定義複雜的ETL程序和工作流

  • 轉換:是ETL解決方案中最主要的部分,它處理抽取、轉換、加載各種對數據行的操作。

  • 步驟:拖動的圖標
    ①步驟需要有一個名字,這個名字在轉換範圍內唯一。
    ②每個步驟都會讀、寫數據行(唯一例外是“生成記錄”步驟,該步驟只寫數據)。
    ③步驟將數據寫到與之相連的一個或多個輸出跳,再傳送到跳的另一端的步驟。
    ④大多數的步驟都可以有多個輸出跳。一個步驟的數據發送可以被被設置爲分發和複製,分發是目標步驟輪流接收記錄,複製是所有的記錄被同時發送到所有的目標步驟。

  • 跳:步驟之間帶箭頭的連線,跳定義了步驟之間的數據通路。
    跳實際上是兩個步驟之間的被稱之爲行集的數據行緩存(行集的大小可以在轉換的設置裏定義)。

  • 數據行:數據以數據行的形式沿着步驟移動。一個數據行是零到多個字段的集合

  1. 字段包含下面幾種數據類型
    ①String:字符類型數據
    ②Number:雙精度浮點數。
    ③Integer:帶符號長整型(64位)。
    ④BigNumber:任意精度數據。
    ⑤Date:帶毫秒精度的日期時間值。
    ⑥Boolean:取值爲true和false的布爾值。
    ⑦Binary:二進制字段可以包含圖像、聲音、視頻及其他類型的二進制數據。
  2. 每個步驟在輸出數據行時都有對字段的描述,這種描述就是數據行的元數據。
    通常包含下面一些信息。
    ①名稱:行裏的字段名應用是唯一的。
    ②數據類型:字段的數據類型。
    ③格式:數據顯示的方式,如Integer的#、0.00。
    ④長度:字符串的長度或者BigNumber類型的長度。
    ⑤精度:BigNumber數據類型的十進制精度。
    ⑥貨幣符號:¥
    ⑦小數點符號:十進制數據的小數點格式。不同文化背景下小數點符號是不同的,一般是點(.)或逗號(,)。
    ⑧分組符號:數值類型數據的分組符號,不同文化背景下數字裏的分組符號也是不同的,一般是點(.)或逗號(,)或單引號(’)
  • 並行:跳的這種基於行集緩存的規則允許每個步驟都是由一個獨立的線程運行,這樣併發程度最高。

二、輸入控件

1.csv文件輸入

輸入CSV文件(是一種帶有固定格式的文本文件)
列分隔符:一般是逗號
包含列頭行:勾選帶上表頭
文件編碼:GBK、UTF-8等根據實際情況選取

2.文本文件輸入

輸入txt文件
分隔符:根據實際情況選取

3.Excel輸入

輸入xls和xlsx的excel文件
表格類型(引擎):excel類型(xls或xlsx)

4.多文件合併

例如【Excel輸入】步驟中,可以添加多個文件或目錄,設置通配符號
在這裏插入圖片描述

5.Get data from XML

XML 指可擴展標記語言(EXtensible Markup Language), XML 被設計用來傳輸和存儲數據。
XPath即爲XML路徑語言(XML Path Language),它是一種用來確定XML文檔中某部分位置的語言。XPath基於XML的樹狀結構,提供在數據結構樹中找尋節點的能力。
XPath語法:
在這裏插入圖片描述
示例:
在這裏插入圖片描述
在這裏插入圖片描述
循環讀取路徑:要到達最底層的路徑,注意不要中文,最好複製
XML路徑:以最底層爲當前位置
考慮名稱空間
在這裏插入圖片描述
Xpath參考:https://www.w3school.com.cn/xpath/index.asp

6.Json input

  • JSON
    JSON(JavaScript Object Notation, JS 對象簡譜) 是一種輕量級的數據交換格式。
    JSON核心概念:數組、對象、屬性
    數組:[ ]
    對象:{ }
    屬性:key:value
  • JSONPath
    JSONPath類似於XPath在xml文檔中的定位,JsonPath表達式通常是用來路徑檢索或設置Json的。
    其表達式可以接受“dot–notation”(點記法)和“bracket–notation”(括號記法)格式
    點記法:$.store.book[0].title
    括號記法:$[‘store’][‘book’][0][‘title’]
    在這裏插入圖片描述在這裏插入圖片描述
    在這裏插入圖片描述jsonpath參考:https://www.cnblogs.com/jpfss/p/10973590.html

7.生成記錄

數據倉庫中絕大多數的數據都是業務系統生成的動態數據,但是其中一部分維度數據不是動態的,比如:日期維度。靜態維度數據就可以提前生成。這一步周生成的數據都是相同的,需要其他步驟在此基礎上修改。

8.表輸入(數據庫表)

根據自己數據庫版本MySQL驅動下載:https://dev.mysql.com/downloads/connector/j/
放在\pdi-ce-8.2.0.0-342\data-integration\lib目錄
連接mysql8數據庫參考:https://blog.csdn.net/weixin_40818105/article/details/86248915(修改jdbc.properties文件)
連接好的數據庫可以右擊設置爲共享。
在這裏插入圖片描述
連接後填寫查詢語句。

9.自定義常量數據

自定義常量數據就是生成key-value形式的常量數據。
元數據:常量名稱、類型
數據:值

三、輸出控件

1.Excel輸出

【Exel輸出】輸出xls
【Microsoft Excel 輸出】輸出xls或xlsx(選擇擴展名)

2.文本文件輸出

數據操作常見的格式是:TXT和CSV(修改擴展名)

3.SQL文件輸出

SQL文件輸出可以導出數據庫表的結構和數據。
選擇數據庫,選擇目標表,輸出的是一個sql文件,裏面是建表語句和插入數據語句。

4.表輸出(數據庫表)

將數據導入數據庫表。
選擇數據庫連接,輸入目標表/新建的表名,如果是新建表可以sql按鈕執行新建語句。
指定數據庫字段可以手動選擇數據庫字段。

5.更新(數據庫表)

更新就是把數據庫已經存在的記錄與數據流裏面的記錄進行比對,如果不同就進行更新。
注意:如果記錄不存在,則會出現錯誤!
選擇目標表,指定用來查詢的字段和要更新的字段
忽略查詢失敗避免中斷報錯

6.插入(數據庫表)

插入更新就是把數據庫已經存在的記錄與數據流裏面的記錄進行比對,如果不同就進行更新。
如果記錄不存在,則會插入數據!

7. 刪除(數據庫表)

刪除就是刪除數據庫表中指定條件的數據。
將目標表裏的數據按照流裏面的字段條件刪除。
可以協同【輸入-自定義常量數據】

四、轉換控件

1.Concat fields

Concat fields就是多個字段連接起來合併一個新的字段。

2.值映射

就是把字段的一個值映射成其他的值。
選擇字段名、填寫目標字段名(映射後的),不匹配的默認值
對應源值和目標值

3.增加常量

增加常量就是在本身的數據流裏面添加一列數據,該列的數據都是相同的值。
增加一列常量。

4.增加序列

給數據流添加一個序列字段。
數據庫來生成序列只支持Oracle
使用轉換計數器生成序列,填寫起始值、步長、最大值

5.字段選擇

字段選擇是從數據流中選擇字段、移除字段、改變名稱、修改數據類型。

6.計算器

計算器是一個函數集合,以現有字段爲基礎,來創建新的字段,還可以設置字段是否移除(臨時字段)

7.剪切字符串+字符串替換+字符串操作

  • 剪切字符串:
    是指定輸入流字段裁剪的位置剪切出新的字段。
    設置起始位置(0開始計數)和結束位置,類似mid函數
  • 字符串替換:
    是指定搜索內容和替換內容,如果輸入流的字段匹配上搜索內容就進行替換生成新字段。
    類似substitute函數
  • 字符串操作:
    是去除字符串兩端的空格和大小寫切換,並生成新的字段。
    類似trim函數

8.排序記錄+去除重複記錄

將記錄先排序,將相鄰的兩行對比去重

9.唯一行(哈希值)

對所有記錄尋找唯一值,從而去重

10.拆分字段

把字段按照分隔符拆分成兩個或多個字段
拆分字段後,原字段就不在數據流中
在這裏插入圖片描述

11.列拆分爲多行

把指定分隔符的字段進行拆分爲多行
在這裏插入圖片描述
在這裏插入圖片描述

12.列轉行

如果數據一列有相同的值,按照指定的字段,把多行數據轉換爲一行數據
去除一些原來的列名,把一列數據變爲字段
注意:列轉行之前必須進行數據流排序(排序記錄)
在這裏插入圖片描述
在這裏插入圖片描述
關鍵字段:要轉成行的字段(相當於透視表裏的列)
分組字段:相同值,可以進行合併分組的字段(相當於透視表的行)
目標字段:關鍵字段的內容,轉成行的列名
數據字段:(相當於透視表中的值)
類型:指定數據字段的數值類型

13.行轉列

把數據字段轉換爲一列,把數據行變爲數據列(列轉行逆運算)
在這裏插入圖片描述
在這裏插入圖片描述
Key字段:要轉成列的新字段名
Value字段:原來值要轉成的新字段名

14.行扁平化

把同一組的多行數據合併成爲一行
注意:
只有數據流的同類數據行記錄一致的情況才能使用(張三2行其他人也是2行)
數據流必須排序,否則結果會不正確
在這裏插入圖片描述
在這裏插入圖片描述
目標字段的個數取決於組內記錄條數(張三和所有人都是兩條,目標字段數就是2個)

五、Kettle應用控件

1.替換null值

將空值替換成指定值
選擇字段:針對該字段的空值進項替換

2.寫日誌

在調試的時候使用,把日誌信息打印到日誌窗口
選擇日誌級別,寫日誌(測試信息)、字段

3.發送郵件

企業郵箱

六、流程控件

1.Switch/case

讓數據流從一路到多路
switch字段:要判斷的字段
數據類型:switch字段數據類型
case值:值(條件)-目標步驟(結果)
輸出步驟有多個

2.過濾記錄

讓數據流從一路到兩路(if-else)
輸出步驟有兩個

3.空操作

一般作爲數據流的重點,什麼都不操作,可以結合switch或過濾進行記錄篩選剔除

4.中止

數據流的終點,如果有數據到這裏,將會報錯。用來校驗數據的時候使用。

七、查詢控件

1.HTTP client

使用get方式提交請求,獲取返回的頁面內容
該步驟需要聯網,設置字段名後,獲取返回字段值是xml或者json,解析後輸出。
要訪問的url可以直接輸入,或者使用【自定義常量數據】定義字段後從字段獲取,解析xml使用【Get data from xml】

2.數據庫查詢

就是數據庫裏面的左連接
兩表關聯後,把左邊的表數據查詢出來。
在這裏插入圖片描述

3.數據庫連接

可以執行兩個數據庫(例如不同的schema,例如mysql庫和oracle庫)的查詢,和單參數的表輸入
案例:將MYTEST下的departments表連接到MYSQL下的employees先將departments進行表輸入
在這裏插入圖片描述
在這裏插入圖片描述
結果相當於兩個表進行join

4.流查詢

在查詢前將數據都加載到內存中,並且只能進行等值查詢
先將兩個表excel輸入成流
在這裏插入圖片描述
相當於select employees.*,departments.dep_name from employees left join departments on employees.dep_id=departments.id

八、連接控件

結果集通過關鍵字進行連接

1.合併記錄

將兩個不同來源的數據合併,這兩個來源分別爲舊數據和新數據,改步驟將舊數據和新數據按照指定的關鍵字匹配、比較、合併。
需要設置:新數據來源和舊數據來源
標誌字段:用於保存比較的結果

  • identical:舊數據和新數據一樣
  • changed:數據發生了變化
  • new:新數據中有而舊數據中沒有的記錄
  • deleted:舊數據中有而新數據中沒有的記錄

關鍵字段:用於定位兩個數據院中的同一條數據
比較字段:兩個數據源中的同一條記錄中,指定需要比較的字段
合併新數據源與舊數據源數據,對於變化的數據,新的替代舊的,同時結果裏用一個標誌字段來指定比較結果。
注意:新數據和舊數據需要實現按照關鍵字段排序;新數據和舊數據要有相同的字段名稱
在這裏插入圖片描述
在這裏插入圖片描述

2.記錄關聯(笛卡爾積)

對送兩個數據流進行笛卡爾積操作
在這裏插入圖片描述
需要指定主步驟
在這裏插入圖片描述

3.記錄集連接

就像數據庫中的左連接、右鏈接、內連接、外連接
需要先排序
在這裏插入圖片描述

九、統計控件

1.分組

分組是按照某一個或某幾個進行分組,同時可以將其餘字段按照某種規則進行合併。
注意:分組前按照分組字段排序(僅需按照分組字段排序)
設置分組字段,指定聚合信息。
在這裏插入圖片描述

十、映射控件

用來定義子轉換,便於封裝和重用

1.映射(子轉換)

用來配置子轉換,對子轉換進行調用的一個步驟

2.映射輸入規範

輸入字段,由調用的轉換輸入

3.映射輸出規範

向調用的轉換輸出所有列,不做任何處理

案例:從t_orders表中獲取數據,根據u_id查詢t_users表,獲取用戶信息,並把數據保存到excel
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

十一、腳本控件

直接通過程序代碼完成一些複雜的操作。

1.javascript腳本

兩種模式:兼容和不兼容(老版本)

  • 獲取字段
    不兼容:
    myVar=FieldName;
    兼容:根據字段類型的不同,使用不同的方法
    myVar=FieldName.getString();
    myVar=FieldName.getNumber();
  • 字段賦值
    不兼容:
    FieldName=myVar;
    兼容:
    FieldName.setValue(myVar);
  • 在腳本中使用java類
    不兼容:
    var myVar = new java.lang.String(‘appple’);
    兼容:
    var myVar = new Packages.java.lang.String(‘appple’);
    案例:生成100條從2000.1.1開始的日期維度數據
    在這裏插入圖片描述
    上一步已經生成兩個字段
    在這裏插入圖片描述
    在這裏插入圖片描述

2.java腳本

-Main
Main函數對應一個processRow()函數(用來處理數據流)
案例:從excel讀取數據,生成newcode字段,如果code的列爲null就是用name列來替換,否則就在code列的後面加上123,結果保存在excel
在這裏插入圖片描述

3.sql腳本

可以執行一個update語句,用來更新某個表中的數據
案例:從t_user表找到lisi,把age的值更改爲33
在這裏插入圖片描述

十二、作業

ETL中需要完成各種維護工作,例如傳送文件、驗證數據庫表是否存在 ,這些作業按照一定順序完成,這就需要可以串行執行的作業來處理(轉換是以並行方式執行)
一個作業包含一個或多個作業項,這些作業項以某種順序來執行,作業執行順序由作業項之間的跳job hop和每個作業項的執行結果來決定
作業項:是作業的基本構成(類似轉換中的步驟)
作業項之間可以傳遞一個結果對象,包含數據行,但不是以數據流的方式來傳遞,而是等待一個作業項執行完了,再傳遞下一個作業項。
必須設置起點
作業跳:作業項之間的連接線
無條件執行(藍色,鎖)運行結果結果爲真時執行(綠色,勾)執行結果爲假(紅色,禁止),可以點擊切換

1.作業

在這裏插入圖片描述
轉換作業項需要指定一個存在的轉換項

2.參數

參數的傳遞會涉及到業務數據如何抽取

  • 全局參數
    全局參數定義是通過當前用戶下.kettle文件夾中的kettle.properties文件來定義。
    採用“鍵=值”對的方式來定義,例如start_date=20130101
    注意:在配置全局變量時需要重啓kettlle 纔會生效
  • 局部參數
    局部參數變量時通過"Set Varibles"與"Get Varibles"方式來設置
    注意:在"Set Varibles"時在當前轉換當中是不能馬上使用,需要在作業中的下一步驟中使用。
  • 參數使用
    %%變量名%%
    ${變量名}
    在sql中使用變量時需要把“是否替換變量”勾選上,否則無法使變量生效。
    在這裏插入圖片描述編輯-編輯kettle.properties文件
    在這裏插入圖片描述
    在這裏插入圖片描述

3.常量傳遞

先自定義常量數據,在表輸入的sql語句裏面使用?來替換。
?的替換順序就是常量定義的順序
在這裏插入圖片描述
在這裏插入圖片描述

4.轉換命名參數

在轉換的內部定義的變量,作用範圍是在轉換內部。
在轉換的空白處右鍵,選擇【轉換設置】就可以看見
在這裏插入圖片描述
在這裏插入圖片描述

5.設置變量-獲取變量

轉換-作業-設置變量、獲取變量
注意:“獲取變量”時在當前轉換當中是不能馬上使用,需要在作業中的下一步驟中使用
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

6.作業裏設置變量

作業-通用-設置變量
在這裏插入圖片描述
在這裏插入圖片描述方式1. 先獲取再使用
在這裏插入圖片描述方式2:直接使用
在這裏插入圖片描述

7.發送郵件

只有企業郵箱纔可以,個人郵箱不行,並且需要在郵件設置中開通客戶端授權碼。
地址:收件人郵箱、發件人郵箱
服務器:SMTP服務器、端口號;用戶驗證、用戶名、密碼(授權碼)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章