kettle 數據遷移 (轉)


  最近在公司搞一個項目重構遷移問題,舊項目一直在線上跑,重構的項目則還沒上線。重構之后數據庫表結構,字段,類型等都有變化,而且重構的數據庫由oracl改為mysql。這樣就設計到數據遷移問題,別人推薦下用了kettle。由於資料比較少,剛開始搞了半天沒成功過一次。現在終於有點開竅了,記錄下以備后用,同時給用到的同學一點幫助也好,現在還是剛用的第二天,所以寫的太淺顯,望莫恥笑。

1、數據類型轉換

  由於大多數的數據結構都差不多,所以大多轉換就如下圖所示:

  

  如果有字段變化在在“字段選擇”中做映射,如我原來庫中字段為UUID,在新庫中字段叫ID

  

  由於新的mysql中所有日期類型都采用時間戳來存儲,所以在數據轉換的時候也要考慮。這里在查詢數據的時候,也就是“表輸入”時候進行數據轉換,首先寫了一個oracle的函數:

create or replace function oracle_to_unix(in_date IN DATE) return number is  
begin  
return( (in_date -TO_DATE('19700101','yyyymmdd'))*86400 - TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))*3600)*1000;
end oracle_to_unix;

  然后在查詢數據的時候調用此函數進行轉換:

select oracle_to_unix(CREATE_DATE) as create_date from t_1

  這樣就完成了oracle date類型到時間戳的轉換了。

2、增加ID

  在老的系統上有需要表都沒有ID,這樣在遷移數據的時候就需要同時生成ID,這里采用的是kellten“增加序列”來自動生成ID,轉換過程如下

  

  在增加序列中“值的名稱”填入“表輸出”中表的ID字段名稱,或者隨便寫一個,在“字段選擇”中進行映射即可,這里我直接寫的ID。

  

3、性能提升

  在測試遷移過程中,一開始的數據速度竟然是20多條/s,真是讓人抓狂,3000W的數據這要遷移到明年了。。。,網上搜索了下,修改如下鏈接參數可以提高效率:

useServerPrepStmts=false  
rewriteBatchedStatements=true  
useCompression=true  

  

  設置上試了下果然是鳥槍換炮啊,立馬速度增加到2000條/S

暫時記錄到此,后續有問題再更新。

http://www.cnblogs.com/lcxdever/p/4335358.html


免責聲明!

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



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