datax中使用时间增量回滚同步

发现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
		}
	}
}


你可能感兴趣的:(datax中使用时间增量回滚同步)