?由來:需要將乙個系統的資料(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...