kettle使用總結(一)


工作需要,臨時接到需求說要做ETL,指定使用kettle。因此開啟此番旅程。

需求:通過查詢兩個庫的數據,經過關聯后寫入到第三個DB中,數據庫都是使用的oracle。

一、簡單介紹下kettle的工具使用

1、安裝jdk並配置環境變量(kettle是java寫的)

2、下載kettle工具包

https://community.hitachivantara.com/s/article/data-integration-kettle

 

(我自己沒有下載,我的是我同事給我的,所以具體下載可參看別的博文)

 3下載后解壓,根目錄找到spoon.bat雙擊運行就啟動了kettle的客戶端

 

 

點擊文件,右鍵->新建,可以選擇創建作業還是轉換,一般我的的主要任務是創建轉換上

二、我的操作

1、創建一個轉換:

  

 

(執行結果很好用,這里不做介紹,自己點點看看就能明白都是干啥的)

 1.1、首先創建連個輸入

  1)在右側導航欄選中核心對象,找到輸入目錄 ,下拉找到表輸入

       

 

   選中拖拽到右側工作面板

  右鍵編輯步驟/雙擊打開編輯

 

 通過點擊“新建”創建數據庫連接信息,這個沒啥好說的,有點oracle基礎都知道咋連,點點試試哈

  2)同理創建兩個表輸入

1.2、其次,我們要把查到的兩個結果集合並起來,然后插入到第三個DB中

  1)我們選用的連接方式是"排序合並"

       

 

 2)這個連接方式要求在合並之前每個結果集要根據連接字段排序,所以要添加排序步驟

 

3)選中排序步驟,拖拽到工作區,同時選中表輸入步驟和和排序步驟,右鍵“新建結點連接”

 

4) 同理處理兩一個表輸入的排序,這些步驟啥的沒有順序要求,你可以自己試試

 

5)配置合並步驟.截圖很明白了,參考下

 

 1.3創建輸出步驟

我這里選的是插入、更新組件(這里最好先建立結點連接,這樣可以字段獲取更新字段)

  

 

 

然后就完成了

 

 點擊運行,成功,如果失敗了可以查看“執行結果->日志”

2、如果想要放到linux上面運行,還需要創建作業,

  參看博文   https://blog.csdn.net/qq_38797366/article/details/83273862

三、我遇到的問題:

1、兩庫數據連接,先嘗試使用了笛卡爾積連接,后來因為同事建議使用了“排序合並”,。具體原因沒有深究,只是用了排序合並覺得滿足需求就用了 

2、步驟隱藏,開始為了跑流程,使用輸出的“表輸出”步驟,后來改用更新/插入步驟,就把原來的表輸出隱藏了(沒有刪掉是為了后續還想測試用),當時是好了,但是后面想用、想刪的時候都找不到了,百度了下,具體步驟如下:

在轉換工作台中找到主對象樹—>步驟,所有的轉換步驟都在這里了,找到被隱藏的步驟,拖拽到工作面板即可,或者直接刪除

3、這里我因為好奇,在步驟右鍵點了share,結果執行轉換的時候就報錯了,這個share我也不知道是干啥的,也不知道為啥保存,解決方法百度收到了

到安裝kettle的系統C盤目錄下,如:C:\Users\Administrator\.kettle下,找到shared.xml文件,打開刪除<sharedobjects>結點間的數據,保存,重新運行即可。

參看    http://blog.sina.com.cn/s/blog_5ceb51480102yfdh.html

 

4、因為存入db的數據要記錄create_time和modify_time字段,所以我在表輸入的時候添加了create_time 字段的值

to_timestamp(to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') as create_date

在執行完更新/插入步驟后又添加了一個sql執行的步驟,用來每次更新后為數據update modify_time

          

 

這里選擇“執行每一行”,不然不做更新操作

結果發現執行轉換的時候,不定期發生“檢查到資源鎖定”的問題,百度了下,因為每個步驟用一個事物,而且沒有強制前面步驟執行commit后再執行后面步驟的事物,所以資源鎖定了,我的解決很粗暴,就是放到同一個步驟里了,都放到表輸入中了,這個是我業務需求對這個沒啥要求,但是如果必須用單獨的步驟,就要從新考慮下了

參看:

https://www.cnblogs.com/Bruce_H21/p/9993451.html

(其實我發現,是兩個步驟同時使用了oracle的時間函數才會出現資源鎖定的問題,如果只有一個步驟使用時間函數是不會出現這個問題的,具體原因未究)

5 kettle在表輸入的查詢腳本中,不支持“;”,分號會被識別成不支持的字符

6  在更新/插入步驟中,“用來查詢的關鍵字” 不能存在 null 空值,不然插入更新不會報錯,但是數據有問題,我的是之能一條一條的入庫。

7、至此,kettle配置遇到的問題就解決完了,還有就是,使用kettle自帶的定時任務據說不好用,我也只是通過命令行執行job時,發現是命令行任務,也就是如果關閉命令行,任務就停止了,其他方式我倒是沒有研究,聽從同事的建議,使用linux自帶定時任務執行kettle執行命令。

附上執行命令,(記得要在kitchen.sh所在目錄下執行哈)
./kitchen.sh -file=/app/kettle_project/test.ktr -level=Basic
./kitchen.sh -file=/app/kettle_project_update/test.kjb -level=Basic

關於linux配置定時任務,參看

https://www.cnblogs.com/intval/p/5763929.html

8、Couldn't find starting point in this job.

當執行./kitchen.sh -file=/app/kettle_project/test.ktr -level=Basic   直接執行轉換的時候,發生了找不到開始點的問題,

網上有文章說是“-file必須執行job任務,將ktr任務放入kjb中,執行kjb”

參看: https://blog.csdn.net/qq_38797366/article/details/83273862

 總結下7和8的問題:

Linux的crontab,其實Job本身也支持定時,但是你必須保證圖形界面一直開着,這樣並不如crontab那么好。在命令行里使用kettle很簡單,Job用kitchen調度,trans用pan調

9 其他資料:

http://www.kettle.net.cn/d   中文文檔

https://www.cnblogs.com/jifeng/p/4741498.html 

-------------------------- 續

https://www.cnblogs.com/tianhaichao/p/13085378.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM