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


由來:需要將一個系統的數據(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中的這條數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM