kettle 2(實現增量更新 插入 更新)

2022-03-30 03:43:02 字數 1294 閱讀 2968

由來:需要將乙個系統的資料(mysql)抽取到另乙個系統(oracle),使用etl方式。隨著資料量的增加,全量同步資料不可行,所以得做增量更新。業務資料表有主鍵,除了新增外,以前同步的資料非主鍵資訊可能會發生更改。

1.看了下網上的思路,有一種是這樣的(a代表表名):一句話概括-通過主鍵對比找到新增行-同步資料。

①select max(id) from mysql.a;===>>>找出mysql中的最大id;

②select * from oralce.a where a.id > ?;===>>>?代表①的max(id),找出oracle中比mysql.max(id)大的id;

③insert into mysql.a value = ②;===>>>將②中資料插入mysql;

第一步沒什麼滑頭,第二步如下:

第三步如下:

*上述方法沒有問題,但是在初始化的時候行不通,原因是步驟①-mysql.a中沒資料時,即max(id)=null,導致帶入第 ②步的and條件的id > null ,即varchar > null,資料不會寫到mysql,當mysql中有一條符合條件的id時,是可行的。

2.在轉換中新增的「插入/更新」時其實已經包含了兩個動作-插入和更新,所以可以去掉1中的比較結果集步驟:

①找出oracle.a中的所有符合條件的資料;

②將上一步找到的資料通過id欄位和mysql中的對比,做出更新動作;

*這裡的更新包含2層含義:

*更新:如果id = id,id欄位不更新,其他字段更新,即id更新=n,其他字段更新=y;

*新增:如果id != id,在以上範圍外,新增;

*可以先同步三條資料到mysql.a;然後再在oracle.a中增加一條資料,修改一條資料的非id欄位,執行下看下效果。

3.補充說明:若刪除了oracle.a中已同步到mysql.a的資料時,執行操作後不會影響mysql.a中的這條資料。

kettle 增量更新

後面的乙個問號就是表示它需要接受乙個引數,你在這個table input 下面需要指定replace variable in script 選項和execute for each row 為選中狀態,這樣,kettle就會迴圈執行這個sql 執行的次數為前面引數步驟傳入的資料集的大小。kettle執...

kettle教程 增量更新

以下操作都在5.0.1版本下進行開發,其餘版本可以進行自動比對 在平時工作當中,會遇到這種情況,而且很常見。比如 增量抽取 每隔2個小時抽取截至到上次抽取時間的記錄 一 操作前提 存在3張表,源表 t student 同步日誌表 t tbrz 插入表 t target student 表結構如下圖所...

kettle插入 更新

1.資料庫環境 實時表 create table nowtable id int,name varchar 100 info varchar 100 insert into nowtable values 1,張啟山 長沙 insert into nowtable values 2,尹新月 長沙 i...