关于数据迁移

前言

在日常研发工作中,时不时的经常在某些场景需要使用到数据迁移。比如,从产线数据库中,迁移一部分数据到本地、测试环境,进行测试相关。
这时候,就遇到点问题,怎么迁移?
通常你是没有权限直接接触产生数据库后台的,用工具直接连,你就别想了。完了,我们能接触的就是查询,而查询出来的估计也多半是类Excel表格形式。

将待迁移数据到Excel中之后,接下来问题就来了,怎么将Excel数据导入到目的数据库中呢?

尝试过的方案

  • 实在没辙:自己写代码,解析Excel,直接通过JPA或者其它的组件进行对数据库操作,生成DML。
  • Kettle:一款功能比较丰富的,大数据迁移软件
  • Navicat:一款数据库操作IDE,支持MySQL、Oracle、SQL Server等数据库
  • DataGrip:intellij出品的一款数据库操作IDE,功能更丰富,支持的数据库更多!

额外的故事

我是在工作中的某一次,需要迁移数十万条产线数据到测试环境,进行测试。

上述方案的前两个首先放弃,Kettle自己其实不不是很熟悉,建立映射的时候,最烦的是,kettle自己生成了数据库的alert语句来匹配导入的列(可能是我不熟悉,可能有方法能解决这个问题)。

完了navicat,导入,excel、csv都可以,正常情况下,如果导入顺利,数十万条,这个还是非常快的。但是,好巧不巧,那次,我重试了n遍,显示导入成功了,但是,目标表中死活就是没有数据。
PS:后来才发现,确实,是源文件中的,某时间列,有问题,导入的时候,其实有错误的,只是navicat没有错误提示,直接回滚导入的数据了。。。。

在我快崩溃,准备通过代码的方式来整的时候,我才知道DataGrip这个玩意儿。
DataGrip目前使用导入场景来说,最好的一点就是,如果有错误,会提示哪一行,哪一列导入出错了。如果只是时间什么的错误,完全可以就把源数据文件中的这列删掉就是了,再进行导入,这个会快很多。

下面,就分别简单的说说,这俩工具在数据迁移时的使用场景

操作还是比较简单的,在对应数据库上右键,选择“导入向导”,在剩下步骤选择对应的源文件,完了映射关联表,后续一步一步点下去,最后运行就行了:
navicat导入

DataGrip

关于DataGrip的一些介绍,官网传送门

IDEA的手册,写的还是比较详细的,可以参考dg在关于导入的时候的步骤:https://www.jetbrains.com/help/datagrip/import-file-name-format-dialog.html