日韩性视频-久久久蜜桃-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程序中调用的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 91国产视频在线播放 | 成人亚洲一区二区 | 1769国产精品视频 | 18国产免费视频 | 亚洲dvd| 国产精品成人一区 | 精品成人一区二区三区 | 人人妻人人爽欧美成人一区 | 免费在线国产 | 制服丝袜成人动漫 | 麻豆国产尤物av尤物在线观看 | 亚欧成人精品一区二区 | 久久久久亚洲av成人人电影 | 日韩一级二级三级 | 牛牛热在线视频 | 五月婷婷深深爱 | 欧美第七页 | 日本色婷婷| a午夜| 四虎免费在线观看 | 亚洲无av| 中国少妇高潮 | 久久久在线视频 | 无码人妻精品一区二 | 精品人妻久久久久一区二区三区 | 白丝开裆喷水 | av一级网站 | 狠狠躁18三区二区一区 | 精品人妻一区二区三区三区四区 | 窝窝视频在线观看 | 超碰碰碰碰 | 亚洲品质自拍视频 | 青春草视频在线免费观看 | 成年人免费高清视频 | 国产精选在线 | 四虎三级 | 国产片在线播放 | 一级激情视频 | 亚洲国产婷婷 | 久久77777 | 吻胸摸激情床激烈视频大胸 | 亚洲韩国精品 | 特级特黄aaaa免费看 | 久久mm| 夫妻自拍偷拍 | 国产青草视频在线观看 | 99久久久无码国产 | 美女福利视频导航 | 亚洲精品一级片 | 国产综合第一页 | 国产制服在线 | 久草免费av| 亚洲欧美在线视频 | 亚洲丝袜在线观看 | 日本资源在线 | 人人精品视频 | 不卡日本| 久久精品在这里 | 翔田千里一区二区 | 青娱乐超碰| 亚洲成人91 | 大地资源在线观看免费高清版粤语 | 国产一区二区福利 | 大肉大捧一进一出好爽动态图 | 国产不卡在线视频 | 亚洲精品性 | 国产高清免费 | 久操资源网 | 久久狠狠婷婷 | 亚洲国产日韩一区无码精品久久久 | 午夜精品一区二 | 直接看的毛片 | 肉色超薄丝袜脚交一区二区图片 | www成人网 | 99精品99 | 国产在线拍揄自揄拍 | 邻家有女4完整版电影观看 欧美偷拍另类 | 中国老熟妇自拍hd发布 | 北条麻妃久久精品 | 97人妻精品一区二区三区免费 | 国产精品va在线观看无码 | 黄色一级在线视频 | 最近最新最好看的2019 | √8天堂资源地址中文在线 欧美精品在线一区二区 | 视频二区在线观看 | 久久久久无码国产精品不卡 | 亚洲精品成人网 | 日韩a在线| www超碰| 日韩三级视频在线观看 | 午夜激情影院 | 活大器粗np高h一女多夫 | 最近中文字幕免费mv视频7 | 怡红院院av| 久久靠逼视频 | 筱田优全部av免费观看 | 九九福利视频 | 午夜影院一区二区三区 | 伊人一区二区三区四区 |