發現datax中對增量同步做的不夠完善,有些數據庫沒有update操作。不能進行更新,只能進行插入。
以sqlserver爲例。
時間戳增量同步:
假定在源數據表中有一個字段會記錄數據的新增或修改時間,可以通過它對數據在時間維度上進行排序。通過中間表記錄每次更新的時間戳,在下一個同步週期時,通過這個時間戳同步該時間戳以後的增量數據。這是時間戳增量同步。
時間增量回滾同步:
但是時間戳增量同步不能對源數據庫中歷史數據的刪除操作進行同步,我們可以通過在每次同步時,把時間戳往前回滾一段時間,從而同步一定時間段內的刪除操作。這就是時間戳增量回滾同步,意會即可,就是在時間戳增量同步的同時回滾一定的時間段。
我們可以在寫入前對目標數據庫進行 preSql 操作,刪掉之前的數據。
{
"content":[
{
"reader":{
"name":"sqlserverreader",
"parameter":{
"column":[
"id",
"ids",
"age",
"updatetime"
],
"connection":[
{
"jdbcUrl":[
"jdbc:sqlserver://xxx:1433;DatabaseName=HX"
],
"table":[
"dbo.test04"
]
}
],
"password":"***********",
"username":"sa",
"where":"updatetime > 1590335000 and updatetime < 1590350500"
}
},
"writer":{
"name":"sqlserverwriter",
"parameter":{
"column":[
"id",
"ids",
"age",
"updatetime"
],
"connection":[
{
"jdbcUrl":"jdbc:sqlserver://xxx:1433;DatabaseName=HXS",
"table":[
"dbo.test04"
]
}
],
"password":"***********",
"preSql":[
"DELETE FROM dbo.test04 WHERE updatetime BETWEEN 1590336000 AND 1590350400;"
],
"username":"sa"
}
}
}
],
"setting":{
"speed":{
"channel":5
}
}
}