Kettle之數據同步(篇一)


之前的業務需求是實現數據的增量同步,具體描述為:新增數據插入,變化數據更新,我使用輸出中的插入更新即可。

現在業務提出新的需求:除前面描述外,還要實現源表數據刪除時,目標表數據同樣刪除。
      雖然我極其不推薦這樣做,原因有三:
            (1)數據庫不應該真正存在delete操作,如果確實要刪除一條數據的話,理論上應該在數據庫中設置標志位,執行update,不向前端業務顯示,但數據仍存在數據庫中,便於追溯和回退;
            (2)ETL實現刪除數據的操作,一旦出現問題,很難查找和解釋原因,容易出現互相扯皮和推諉現象;
            (3)我需要重新開發ETL。雖然個人難以接受,奈何業務需求是天,我也得硬着頭皮去完成,之后可能發生的事情,只能“走一步看一步”,聽天由命了。記錄關鍵過程如下:

1.轉換的核心對象共4個,包括2個輸入、1個合並記錄和1個數據同步

【表輸入在輸入中找:合並記錄在鏈接中;數據同步在輸出中】分別設置源數據和目標數據,其中記錄數量限制為0就是全部同步。
       


2.合並記錄設置,要注意舊數據源是要同步的數據,也就是目標數據;新數據是來源數據,也就是被同步的數據。標志字段隨便起名即可(要符合命名規范)。匹配的關鍵字段最好是主鍵(唯一值勉強也行),數據字段是要同步的列(注意,一定要包括關鍵字段,否則目標數據該列就是空值,千萬注意!!)。如下圖:


3.合並完成后,標志字段的值有4種,分別是:

Identical” : 關鍵字段在新舊數據源中都存在,且域值相同

“changed” : 關鍵字段在新舊數據源中都存在,但域值不同

new” :  舊數據源中沒有找到該關鍵字段

deleted”:  新數據源中沒有找到關鍵字段

則數據同步的配置需要注意以下幾點:

(1)  不論是查詢的關鍵字,還是更新字段,都要把標志字段去掉(注意,去掉標志字段!);其他字段根據業務需求,進行設置;

(2)  高級標簽中的規則要定義好,否則會報“It was not possible to find operation field [null] in the input stream!”錯誤。

 

4.根據需要是定時操作,還是手工操作,如果定時的話,重新建個作業,設定開始相關的配置即可。

另外需要強調一下,如果源數據和目標數據字段不一樣的話,來源數據可以用as來改變列名,並一定注意名稱和列順序一致。

  


免責聲明!

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



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