前置說明
- 遍歷文件夾下的文件,讀取所有的sheet頁(指定的sheet)落庫
- 讀取execl文件和csv文件,獲得文件中sheet/csv數據,進行落庫,並增加字段實現更新;
- 如果execl中存在兩個標題,將標題一進行
行轉列
並進行字段的添加(任務圖如下)
最終實現效果圖:
組件的使用:
- execl輸入
- csv輸入
- 獲取文件名
- 表輸出
- 列拆分爲多行
- 記錄合併(笛卡爾積)
- 轉換
- 執行SQL語句
說明:
任務1:使用滴滴.csv和攜程(xc.xlsx)做演示
任務2:使用京東(jd1.xlsx)做演示
場景復現:
搭建任務1:使用滴滴.csv和攜程(xc.xlsx)做演示
流程:
攜程:
Execl文件輸入:
文件輸出,需要執行對應的路徑,通過通配符進行匹配文件夾下的所有文件;.*\.xlsx
這裏需要注意,對於工作表來說,可用於兩個場景:
- 讀取指定的sheet數據
- 不指定sheet名字則讀取該execl文件中所有的sheet數據,字段需要一致(適用於文件下的sheet頁名字不同字段相同的表數據)
表輸出:
直接以該組件圖展示來說;
首先需要連接數據庫(可參考網上文章),選擇目標表,這裏有兩種方式:
- 如果數據庫中存在表,則直接選擇或填寫名字
- 如果數據庫沒有,則開啓指定數據庫字段,並獲取字段,執行下面的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"