我需要在一张大的表A中按照where条件导出指定字段的数据,然后导入到一张旧表B中,请问有什么解决方案吗?
我的思路是用dumpling导出指定sql的数据为csv,再lightning导入到B表,但是问题是B表不是空表,导入报错
那 dumpling 导出结果为 sql ?
–sql模式不支持导出成sql,
报错:
create dumper failed: unsupported config.FileType ‘sql’ when we specify --sql, please unset --filetype or set it to ‘csv’
–sql 是什么,应该 --filetype sql ?
噢噢噢,理解了。那 --sql 换成 --where 满足需求吗?
2张表结构不一样,需要导出指定字段只能用–sql
这处处是限制了
用 lightning 导入到空表 C 中,然后慢慢插入呗(少的话也可以把 B 表的数据插入到 C 表中)
kettle工具导吧
数据量较大,几年历史记录好几亿了,不好搞哦。
如果是同库的话,我一般都是直接写insert语句插入。如果是跨库或者异构,一般就是用kettle这种ETL工具了
试试重建新表
只能交给研发写代码迁移了
曲线救国,先导入到一张空表,再insert into到空表里面,如果数据量大,可以考虑分批次提交,问题不大
持续关注,跟大佬学etl工具
如果导入的目标表不为空,则 TiDB Lightning 会自动报错退出;如果开启了并行导入模式 (parallel-import = true),则会跳过此检查项。
如果确实导入数据没问题,我感觉可以这样解决。
无非是增量导入的时候,如果选物理模式可能有点得不偿失,因为物理模式最后会自动checksum,analyze。这两个操作如果历史数据比较多,可能耗时超过导入时间。
增量导入的时候,我感觉还是逻辑导入模式好一些。
CSV文件的字段结构和顺序与B表一至的话,可以使用Lightning的tidb模式,本质上就是采用replace into的方式写入
最后的解决方案定了吗?
卸数很简单啦,自己写个unload工具,load的话可以load data