需求描述
对于数据分析人员来说,工作的基础是数据,没有数据分析就无从谈起,即巧妇难为无米之炊。
#数据库# #数据迁移# #Oracle#
然而,数据分析往往在实验环境或者准生产环境中开展,而数据分布在生产环境,因此需要将生产环境的部分数据导入到准生产环境中。因为网络隔离和权限管理的原因,无法直接在生产库和准生产库之间应用数据迁移工具。目前的办法是:将生产库中的数据以数据文件形式导出,然后通过安全手段传送到准生产环境,然后在准生产环境中应用Kettle等数据迁移工具实现数据的导入。
下面的实验路径如下:生产数据文件-->Mysql临时库-->准生产Oracle库。
将数据导入到MySQL临时库中(基于Navicat)
使用Navicat的导入向导可以便捷地将文本文件中的数据导入到Mysql库中,从而为下一步通过Kettle迁移至Oracle做准备,同时可以做一些临时性的分析。具体导入步骤如下:
1.选择数据库下面的【表】,选择【导入向导】
2.选择要导入的数据文件格式,常见的txt、csv、excel等。
3.选择分隔符。如果是csv文件的话保持默认就可以了,如果是用|等分割的txt文件,则需要进行调整。
4.选择目标表。选择要把数据导入的数据表,可以是不存在的表,也可以是已存在的表。不存在的表需要新建,已存在的则需要去掉新建表下面的勾选。
5.调整表结构。在这一步,可以看到从文本文件中解析出来的表结构,即字段名称、字段类型等,同时可以根据需要对字段类型、长度和主键进行设定。我们这里先不做任何调整,看看后面什么结果。
6.附加选项。设定文本文件的起始和结束行数,设定首行是否为列名,设定日期和数值型数据的格式等。
7.选择导入模式。选择数据导入模式,有追加、更新、删除、复制等几种模式,我们选择“复制”,即新建表并将数据导入其中。
8.开始导入(失败)。在第7步的基础上执行下一步,然后点击开始,执行导入操作。很遗憾,导入失败,报“row size too large.XXXXX”的错误(见下图)。
这个错误是因为,在前面的设置中,我们将每个字段都设置为Varchar类型且长度为255,且宽表字段数量N过多(N>100),255*N超出了Mysql的限制(65535)。因此,解决方法是调整字段类型及长度,使之低于Mysql的限制。
9.按需调整字段类型及长度,这里主要调整的是长度,由255调减至32,够用了。
10.再次导入(成功)。调整完字段类型及长度后,再次执行导入,显示导入成功,验证发现数据确已入库。
Mysql数据向Oracle迁移(基于Kettle)
基于Navicat完成了数据文件的导入之后,下一步就是利用Kettle实现数据在Mysql数据库和Oracle数据库上的迁移,具体操作过程如下:
1.新建转换。打开Kettle,新建转换,为数据迁移做准备。
2.选择表输入并将表输入组件拖入主功能区。
3.编辑表输入节点并选择源数据库类型,这里选择Mysql。
4.完成数据库连接的配置。包括主机名、端口、数据库名称、数据表、用户名、密码等,通过测试可验证数据库是否已正确连接。
5.完成表输出配置。完成表输入配置后,选择表输出并拖至主功能区,按照表输入配置的方式完成表输出的配置,只是这里要配置Oracle的数据库连接,包括主机名、数据库、数据表、用户名、密码、端口等。同样的,可以通过测试验证是否已连接成功。
6.建立表输入与表输出的连接,即在主功能区中,点击表输入的箭头并拖至表输出的箭头处。
7.启动转换(失败)。点击主功能区左上角的三角形按钮,启动转换。
很遗憾,转换失败,表输出节点上出现了红色标识。通过查看日志发现,这是因为在表输出中配置的数据表不存在,导致数据无法插入。所以,解决的办法就是新建数据表。如果通过create新建就太吃力了,还好可以通过配置解决,详见第8步。
8.建立输出数据表。在Oracle数据连接配置界面中,选择【数据库字段】,然后点击【获取字段】,选择Mysql数据库中的输入表,即可自动生成目标表的建表语句,执行建表语句即可完成目标表的构建。
9.启动转换(成功)。再次启动转换,没有报错,意味着转换成功。
中文乱码,如何解决?
完成Mysql向Oracle的数据迁移后,通过PL/SQL查询发现数据表中的中文乱码,显然这是因为两边数据编码不一致造成的,解决方法就是配置编码使两边保持一致。
1.查看Oracle的数据编码,可以看出是GBK,下一步就是把Mysql的编码调整成GBK。
2.配置Mysql编码。在表输入的配置环节,在【高级】中增加“set names gbk;”,在【选项】中增加“characterEncoding:gbk”。
3.配置完成后,再次执行转换任务,验证发现中文正常显示。
总结
本文通过一个具体的业务场景逐步介绍了数据的迁移过程,总结如下:
- Navicat提供了较好的数据导入工具,可以实现数据文件的快速入库。
- Kettle可以快捷地实现数据在异构数据库中的迁移,配置项丰富,操作简单。
- 使用Navicat进行数据导入时,要注意设置合理的表结构,不能超过Mysql限制,否则会导入失败。
- 在使用Kettle进行数据在Mysql和Oracle中的迁移时,一是要确保目标Oracle表的存在,如不存在则需要配置或新建,二是要注意编码一致,避免出现总问乱码。
我是会说科技,关注我,一起聊聊数据、科技、IT、安全、金融那些琐事。####