当同时同一个cust_id 依次进行新增 修改 删除 新增,canal接收到两条数据的数据: 如: cust_id 类型 sql执行时间 001 add 1533002422 001 update 1533002422 001 delete 1533002423 001 add 1533002423 这样的话出现一个问题,我做数据仓库的拉链表的时候 无法知道 001 用户在1533002423毫秒情况下add和delete的顺序 我的问题是,这种情况下,还有其他的字段能提供对于同一个sql执行时间,对数据进行排序区分前后顺序
原提问者GitHub用户zhonghui001
在 Canal 接收到数据时,如果多条数据的时间戳相同,那么就无法通过时间戳来确定它们的执行顺序。不过,Canal 会为每个 binlog 事件添加一个唯一的 ID,称为 log file offset
,可以通过它来区分不同的 binlog 事件,从而确定它们的执行顺序。
在你的情况下,可以观察这些数据的 log file offset
,来确定它们的执行顺序。一般来说,后加入的数据会有更大的 log file offset
。这个值可以在 Canal 的数据格式中找到,比如 JSON 格式下,可以在 binlog event 的 header 中找到 logfileName
和 logfileOffset
两个字段,它们组成了一个唯一的 ID,用于标识该 binlog 事件。
如果你需要对数据进行拉链表处理,可以在拉链表中添加一个字段,用于存储 log file offset
,从而记录数据的执行顺序。这样,即使多条数据的时间戳相同,你也可以根据 log file offset
来确定它们的执行顺序。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。