tidb 的insert table a selct * from table b 有没有风险

tiDB 做数据清洗该怎么做呢
可以直接使用insert table a selct * from table b 吗?遇到大数据量的有啥好办法吗?

参考下

1 个赞

只能手动按条件拆分select了,没有启用batch-dml的话可能会导致oom,而且大批量提交速度很慢。6.1版本后有个非事务DML功能,字段的根据指定的size做批次拆分,不过目前只支持delete且不能并行,估计后续版本应该能解决Insert。。select这种

看具体需求:
1:全量同步,这个无非就是insert into,主要考虑是错误后如何正常找到最后点位,具体效率取决你 源端->程序->对端 这三台机器的性能,其余考虑的内容就是程序中多少线程,每个线程多少批数据,并不是线程越多越快,每批数据越多越快,具体需要打印时间调试一下,没有过多花里胡哨的办法

可以自己写,也有很多程序工具,程序工具例如cloudcanal等

2:增量同步,订阅cdc -> kafka -> 订阅topic并解析canal -> insert database.table 解析Json,根据内容清洗,过滤还是打宽表等

后面加上 limit ,不过要结合代码去做,毕竟tid不支持存储过程

建议先把数据卸出来再批量insert进去,insert … select * 应该是一行一行操作,速度慢

给b表加个update_time字段

我觉得可以写个循环,定义多少行提交一次

https://docs.pingcap.com/zh/tidb/stable/sql-statement-begin#begin

不支持存储过程,处理这种大批量insert into建议手工拆分小批量插入

迁移数据用cdc

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。