日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

insert时调用本身字段_「技术篇」ETL工具Kettle数据对比同步以及Java程序中调用

發布時間:2025/3/20 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 insert时调用本身字段_「技术篇」ETL工具Kettle数据对比同步以及Java程序中调用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作為一個技術棧出身的攻城獅,雖然走上管理之路,但是技術是不能扔下的,時不時的拿起來重溫一下,理論與實踐相結合...

使用背景:

住建部某區塊鏈共享平臺(下游系統)需要自于上游系統的生產庫數據,數據量不大十幾萬,而且須要每天提供截止當天的增量數據,要求每條數據給出數據變化時間及標示,即數據若是插入有插入時間和插入標示;若是改動,有改動時間和改動標示;若是刪除需邏輯刪除、有刪除標示且有刪除時間等等。

解決辦法:

kettle的轉換ktr里有一個圖元叫做合并記錄。能夠把兩個表輸入分為源和目的依據唯一標示進行全量比對。得到增量的數據流,再寫入到中間表里,即能夠實現該需求。實現功能的ktr如下圖:

1 輸入源 合并記錄

上圖。最左側是兩個表輸入,上面一個GRZHXX 是上游系統,下一個是SEND_GRZHXX目標數據

GRZHXX的數據來源SQL:注意一定要排序操作!

SEND_GRZHXX的數據來源SQL: 注意一定要排序操作!

2 值映射

例如以下圖, 將輸入源與目的源的每一個字段數據依據唯一字段比較后到值映射圖元,使用字段名為起的后面用到的一個變量名(可隨意起)。源值列為系統默認

1 代表輸入源與目標源比較后刪除的數據標志

2 是輸入源新增

3 是輸入源更新

4是不變 目標值 是自己起的名字 能夠依據須要不變 或改動

標志字段:設置標志字段的名稱,標志字段用于保存比較的結果,比較結果有下列幾種。

1. “identical” – 舊數據和新數據一樣

2. “changed” – 數據發生了變化;

3. “new” – 新數據中有而舊數據中沒有的記錄

4. “deleted” –舊數據中有而新數據中沒有的記錄

3過濾無效記錄

例如以下圖,條件 flagfield is not null (后面沒顯示完),若條件成立發送給下一步zh_check_date,若不成立發送給空操作。

通過下面的過濾標志過濾各種類型數據。

4 新增數據推斷add

例如以下圖,zh_check_date 為獲取當前的系統時間變量。

add2 圖元打開為 畫圈的圖 左側的地方 ,條件 flagfield = add_rec ,若成立及發送數據到中間畫圈的add圖元,若不成立則 發送數據到mod_del圖元 (矩形紅框) 如果為true數據到 add圖元,打開 即是下圖右側 部分 填寫須要插入的數據字段 再到insert圖元 ,就可以把輸入源比目標源多的新數據更新到目標表來 而且加上時間戳。

5 改動或刪除 mod_rec

例如以下圖,如果數據從add2發送而來。 打開矩形框 mod_del 條件flagfield = mod_rec 若true 則發送到 update mapping 若flase 則發送到delete mappinig 。如果是更新,則右側 的查詢keyword 是 更新的比較字段 即是一開始合并記錄的比較字段 ,更新字段就是 除了比較字段之外的其它字段。這樣數據就能夠從 輸入源更新到目標源。

6 刪除數據 delete mapping

例如以下圖。如果數據流到了 delete mapping 。則 僅僅須要依據比較字段把 目標表的時間戳更新 和 狀態更新為del_rec就可以,下圖zh_check_type 為flag_field的值

7 數據結果查看

zh_check_type和check_date已更新成功

8 程序調用 (定時執行、批量執行)

在程序中直接調用ktr執行數據同步操作,需要注意的是,從Kettle工具中拷貝jar到項目中

具體實現代碼如下:

import java.text.SimpleDateFormat;import java.util.Date;?import org.pentaho.di.core.KettleEnvironment;import org.pentaho.di.core.exception.KettleException;import org.pentaho.di.core.util.EnvUtil;import org.pentaho.di.job.Job;import org.pentaho.di.job.JobMeta;import org.pentaho.di.trans.Trans;import org.pentaho.di.trans.TransMeta;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;?@Componentpublic class TestKettle {? ? ? public static String filePath = " pdi-ce-5.1.0.0-752/data-integration/";? ? ? public static String fileName = "GRZHXX.ktr";?? ? ? public static void main(String[] args) {? ? ? ? ? ? ?System.out.println("============>>>>>> job開始執行 【 "? ? ? ? ? ? ? ? ? ? ? ? ? ?+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?.format(new Date()) + "】");? ? ? ? ? ? ?String jobFileName = filePath + "TestJob.kjb";? ? ? ? ? ? ?try {? ? ? ? ? ? ? ? ? ? long startTime = System.currentTimeMillis();? ? ? ? ? ? ? ? ? ? // callKettleJob(jobFileName);? ? ? ? ? ? ? ? ? ? callNativeTrans(filePath + fileName);? ? ? ? ? ? ? ? ? ? long endTime = System.currentTimeMillis();? ? ? ? ? ? ? ? ? ? System.out.println("數據抽取任務運行時間:" + (endTime - startTime) / 1000+ "S");? ? ? ? ? ? ?} catch (KettleException e) {? ? ? ? ? ? ? ? ? ? e.printStackTrace();? ? ? ? ? ? ?}? ? ? }?? ? ? @Scheduled(cron = "0 30 16 * * ? ")? ? ? public void process() {? ? ? ? ? ? ?System.out.println("============>>>>>> job開始執行 【 "? ? ? ? ? ? ? ? ? ? ? ? ? ?+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?.format(new Date()) + "】");? ? ? ? ? ? ?String jobFileName = filePath + "TestJob.kjb";? ? ? ? ? ? ?try {? ? ? ? ? ? ? ? ? ? long startTime = System.currentTimeMillis();? ? ? ? ? ? ? ? ? ? // callKettleJob(jobFileName);? ? ? ? ? ? ? ? ? ? callNativeTrans(filePath + fileName);? ? ? ? ? ? ? ? ? ? long endTime = System.currentTimeMillis();? ? ? ? ? ? ? ? ? ? System.out.println("數據抽取任務運行時間:" + (endTime - startTime) / 1000+ "S");? ? ? ? ? ? ?} catch (KettleException e) {? ? ? ? ? ? ? ? ? ? e.printStackTrace();? ? ? ? ? ? ?}? ? ? }?? ? ? public static void callKettleJob(String jobFileName) throws KettleException {? ? ? ? ? ? ?KettleEnvironment.init();// 初始化? ? ? ? ? ? ?JobMeta jobMeta = new JobMeta(jobFileName, null);// jobFileName是job腳本路徑及文件名? ? ? ? ? ? ?Job job = new Job(null, jobMeta);? ? ? ? ? ? ?// job.setVariable("AJBH", "123");// 傳入參數? ? ? ? ? ? ?job.start();? ? ? ? ? ? ?job.waitUntilFinished();? ? ? ? ? ? ?if (job.getErrors() > 0) {? ? ? ? ? ? ? ? ? ? throw new KettleException("job執行不成功,有步驟失敗!");? ? ? ? ? ? ?}? ? ? ? ? ? ?System.out.println("============>>>>>> job執行完成");? ? ? }?? ? ? /**? ? ? ?* 調用本地的轉換文件? ? ? ?*/? ? ? public static void callNativeTrans(String transFileName)? ? ? ? ? ? ? ? ? ? throws KettleException {? ? ? ? ? ? ?KettleEnvironment.init();// 初始化? ? ? ? ? ? ?// 轉換元對象? ? ? ? ? ? ?TransMeta transMeta = new TransMeta(transFileName);? ? ? ? ? ? ?// 轉換? ? ? ? ? ? ?Trans trans = new Trans(transMeta);? ? ? ? ? ? ?// 執行轉換? ? ? ? ? ? ?trans.execute(null);? ? ? ? ? ? ?// 等待轉換執行結束? ? ? ? ? ? ?trans.waitUntilFinished();? ? ? }?}對于定時執行,可以執行kettle里面的job文件也可以通過程序定時任務來控制同時還可以多線程同時操作:public static void main(String arg[]) throws Exception? ?{? ? ? String idname="7";//參數值? ? ? String filename1="./test1.ktr";//ktr路徑? ? ? String filename2="./test2.ktr";//ktr路徑? ? ? KettleEnvironment.init();//初始化kettle環境? ? ? /*定義文件路徑,模型元數據,模型三個容器*/? ? ? ArrayList list1=new ArrayList();? ? ? ArrayList list2=new ArrayList();? ? ? ArrayList list3=new ArrayList();? ? ? /*添加文件對象*/? ? ? list1.add(filename1);? ? ? list1.add(filename2);? ? ? //System.out.print("=======================1:"+list1.get(0));? ? ? //System.out.print("=======================2:"+list1.get(1));? ? ? /*遍歷文件對象,創建轉換元數據對象*/? ? ? for(int i=0;i

總結

以上是生活随笔為你收集整理的insert时调用本身字段_「技术篇」ETL工具Kettle数据对比同步以及Java程序中调用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99热99| 亚洲福利电影 | 伊人久久综合视频 | 精品国产乱子伦一区二区 | 激情亚洲天堂 | 91视频这里只有精品 | 性——交——性——乱免费的 | 日本免费在线 | 欧美自拍偷拍一区 | 美女扣逼喷水视频 | 伊人网伊人影院 | 青青草视频免费观看 | 蜜臀av性久久久久av蜜臀妖精 | 日韩亚洲欧美精品 | 一级片一级 | 国产欧美一区二区三区在线看蜜臂 | 中文字幕一区二区三区人妻不卡 | 日韩精品第一 | 色女人在线 | 色一情| 无码人妻aⅴ一区二区三区 国产高清一区二区三区四区 | 欧美成人乱码一二三四区免费 | 国产1区在线 | 国产亚洲性欧美日韩在线观看软件 | 亚洲一级黄色片 | 国内精品在线观看视频 | av导航站| 婷婷在线免费 | 亚洲成人国产精品 | 国产日韩一区二区三区在线观看 | 成人美女视频 | 亚洲无码精品免费 | 中文在线а√天堂官网 | 国内视频一区 | 免费的毛片视频 | av影片在线观看 | 黄色小视频免费观看 | 中文永久免费观看 | 一本色道久久综合亚洲 | 中国极品少妇xxxx | 国产色在线视频 | 亚洲最新av网址 | 国产成人啪一区二区 | www.久久久久久久久 | 四虎影视成人永久免费观看亚洲欧美 | 亚洲の无码国产の无码步美 | 毛片123| 国产精品一区二区黑人巨大 | 午夜精品福利影院 | 深夜国产福利 | 久久人人爽人人爽人人片亚洲 | 国产探花视频在线观看 | 国外成人性视频免费 | 麻豆传媒一区二区三区 | 亚洲裸体网站 | 德国艳星videos极品hd | 亚洲一区成人 | 亚洲欧洲综合网 | 天天看黄色片 | 狠狠综合一区 | 亚洲熟伦熟女新五十路熟妇 | 少妇一级淫片免费播放 | 亚洲手机av | 爆乳2把你榨干哦ova在线观看 | 深夜福利在线免费观看 | 午夜视频在线 | 99这里只有精品视频 | 欧美成人a视频 | 久久9热| 中文字幕国产综合 | 麻豆视频国产 | 国产精品无码一区二区三区免费 | 久久av不卡| 亚洲综合色吧 | 熟女毛毛多熟妇人妻aⅴ在线毛片 | 日本久久伊人 | 国产色影院 | 美女涩涩网站 | 色播av| 97在线播放免费观看 | 亚洲精品人妻无码 | 国产肉丝在线 | 日韩中文在线一区 | www.欧美com| 一级黄色片a | 日韩精品在线观看AV | 国产欧美日韩在线观看 | 日韩精品在线播放 | 在线97 | 日韩成人高清视频 | www.国产一区 | 日韩精品2区| 欧美爱爱网 | 亚洲欧美在线看 | 香蕉视频在线视频 | 国产精品白浆一区二小说 | 久久亚洲精品小早川怜子 | 人人爱超碰 | 国产在线三区 |