数据导入导出

我需要在一张大的表A中按照where条件导出指定字段的数据,然后导入到一张旧表B中,请问有什么解决方案吗?
我的思路是用dumpling导出指定sql的数据为csv,再lightning导入到B表,但是问题是B表不是空表,导入报错

1 个赞

那 dumpling 导出结果为 sql ?

1 个赞

–sql模式不支持导出成sql,
报错:
create dumper failed: unsupported config.FileType ‘sql’ when we specify --sql, please unset --filetype or set it to ‘csv’

1 个赞

–sql 是什么,应该 --filetype sql ?

噢噢噢,理解了。那 --sql 换成 --where 满足需求吗?

2张表结构不一样,需要导出指定字段只能用–sql

:eyes: :eyes:这处处是限制了

:rofl: 用 lightning 导入到空表 C 中,然后慢慢插入呗(少的话也可以把 B 表的数据插入到 C 表中)

kettle工具导吧

1 个赞

数据量较大,几年历史记录好几亿了,不好搞哦。

如果是同库的话,我一般都是直接写insert语句插入。如果是跨库或者异构,一般就是用kettle这种ETL工具了

试试重建新表

只能交给研发写代码迁移了

曲线救国,先导入到一张空表,再insert into到空表里面,如果数据量大,可以考虑分批次提交,问题不大

持续关注,跟大佬学etl工具

如果导入的目标表不为空,则 TiDB Lightning 会自动报错退出;如果开启了并行导入模式 (parallel-import = true),则会跳过此检查项。

如果确实导入数据没问题,我感觉可以这样解决。
无非是增量导入的时候,如果选物理模式可能有点得不偿失,因为物理模式最后会自动checksum,analyze。这两个操作如果历史数据比较多,可能耗时超过导入时间。

增量导入的时候,我感觉还是逻辑导入模式好一些。

CSV文件的字段结构和顺序与B表一至的话,可以使用Lightning的tidb模式,本质上就是采用replace into的方式写入

最后的解决方案定了吗?

卸数很简单啦,自己写个unload工具,load的话可以load data