Kettle需求場景復現

前置說明

  1. 遍歷文件夾下的文件,讀取所有的sheet頁(指定的sheet)落庫
  2. 讀取execl文件和csv文件,獲得文件中sheet/csv數據,進行落庫,並增加字段實現更新;
  3. 如果execl中存在兩個標題,將標題一進行行轉列並進行字段的添加(任務圖如下)

任務2對應圖
最終實現效果圖:

組件的使用:

  1. execl輸入
  2. csv輸入
  3. 獲取文件名
  4. 表輸出
  5. 列拆分爲多行
  6. 記錄合併(笛卡爾積)
  7. 轉換
  8. 執行SQL語句

說明:
任務1:使用滴滴.csv和攜程(xc.xlsx)做演示
任務2:使用京東(jd1.xlsx)做演示

場景復現:

搭建任務1:使用滴滴.csv和攜程(xc.xlsx)做演示

流程:

攜程:

Execl文件輸入:


文件輸出,需要執行對應的路徑,通過通配符進行匹配文件夾下的所有文件;.*\.xlsx

這裏需要注意,對於工作表來說,可用於兩個場景

  1. 讀取指定的sheet數據
  2. 不指定sheet名字則讀取該execl文件中所有的sheet數據,字段需要一致(適用於文件下的sheet頁名字不同字段相同的表數據)



表輸出:


直接以該組件圖展示來說;
首先需要連接數據庫(可參考網上文章),選擇目標表,這裏有兩種方式:

  1. 如果數據庫中存在表,則直接選擇或填寫名字
  2. 如果數據庫沒有,則開啓指定數據庫字段,並獲取字段,執行下面的SQL,需要注意的是自動生成的語句是否正確。

最後執行可看到效果;

滴滴

獲取文件名:



獲取文件名匹配類似與execl輸入組件,在預覽數據的時候需要注意的filename參數,後續用到。

CSV文件輸入:


首先通過單一的CSV文件輸入,獲得對應文件中的字段:

然後連接到獲取文件名,通過filename參數,來接收前面的文件名;

最後表輸出與攜程例子中的操作相同,不表。

搭建任務2:使用京東(jd1.xlsx)做演示

流程圖:
如果execl中存在兩個標題,將標題一進行行轉列並進行字段的添加。


在獲取文件名中得到文件名參數(filename),需要傳遞到轉換中:

Execl輸入組件中的配置參數;

爲了實現將第一個標題下的數據讀取出來並進行行轉列。我們在輸入組件中的內容部分,設置爲限制1:表示只讀取標題字段下的第一行。(如下圖)

根據列拆分多行進行轉換:選擇前面的字段,並設置向後傳遞的字段名字。

Execl2輸入組件需要注意的點是sheet數據讀取的起始位置:


最後對數據進行組合和落庫:記錄關聯直接拖出來用就可。

字段更新

update xc set vpkid=CONCAT(DATE_FORMAT(SYSDATE(),'%Y%m%d'), 'xc'),update_time=SYSDATE(),create_time=SYSDATE();

最後對入庫數據的各表字段進行更新:

Linux下運行

./pan.sh -file=xxx.ktr
./kitchen.sh -file=xxxx.kjb

kettle基於Java開發,可設置JVM內存大小:
起始內存大小:Xms
最大內存大小:Xmx
永久代大小:MaxpermSize

if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms7680m" "-Xmx7680m" "-XX:MaxPermSize=3840m"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章