需求描述

对于数据分析人员来说,工作的基础是数据,没有数据分析就无从谈起,即巧妇难为无米之炊。

#数据库# #数据迁移# #Oracle#

然而,数据分析往往在实验环境或者准生产环境中开展,而数据分布在生产环境,因此需要将生产环境的部分数据导入到准生产环境中。因为网络隔离和权限管理的原因,无法直接在生产库和准生产库之间应用数据迁移工具。目前的办法是:将生产库中的数据以数据文件形式导出,然后通过安全手段传送到准生产环境,然后在准生产环境中应用Kettle等数据迁移工具实现数据的导入。

下面的实验路径如下:生产数据文件-->Mysql临时库-->准生产Oracle库。

Logo

将数据导入到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数据库中的输入表,即可自动生成目标表的建表语句,执行建表语句即可完成目标表的构建。

获取字段

选择mysql表

9.启动转换(成功)。再次启动转换,没有报错,意味着转换成功。

转换成功

中文乱码,如何解决?

完成Mysql向Oracle的数据迁移后,通过PL/SQL查询发现数据表中的中文乱码,显然这是因为两边数据编码不一致造成的,解决方法就是配置编码使两边保持一致。

1.查看Oracle的数据编码,可以看出是GBK,下一步就是把Mysql的编码调整成GBK。

查看Oralce编码

2.配置Mysql编码。在表输入的配置环节,在【高级】中增加“set names gbk;”,在【选项】中增加“characterEncoding:gbk”。

set names gbk

characterencoding:gbk

3.配置完成后,再次执行转换任务,验证发现中文正常显示。

数据验证

总结

本文通过一个具体的业务场景逐步介绍了数据的迁移过程,总结如下:

  1. Navicat提供了较好的数据导入工具,可以实现数据文件的快速入库。
  2. Kettle可以快捷地实现数据在异构数据库中的迁移,配置项丰富,操作简单。
  3. 使用Navicat进行数据导入时,要注意设置合理的表结构,不能超过Mysql限制,否则会导入失败。
  4. 在使用Kettle进行数据在Mysql和Oracle中的迁移时,一是要确保目标Oracle表的存在,如不存在则需要配置或新建,二是要注意编码一致,避免出现总问乱码。

我是会说科技,关注我,一起聊聊数据、科技、IT、安全、金融那些琐事。####

导入数据中文乱码_基于Navicat和Kettle的数据迁移完全解读(多图)相关推荐

  1. datax 导入数据中文乱码_浅谈数据同步之道

    数据同步,顾名思义就是不同系统的数据进行同步处理.而业务系统所涉及的数据库同步是重中之重,虽然大部分数据库都提供了导入导出的工具,但是数据存储到各个地方,Hive.Hbase.MySQL.Oracle ...

  2. ajax后台返回数据中文乱码_解决Jmeter返回值显示中文乱码 的三种方法及设置随机动态参数(非原创侵删)...

    一.Jmeter返回值显示中文乱码解决方法 第一种解决方法: 1. 点击线程组--添加--后置处理器--BeanShell后置处理程序 2.点击BeanShell后置处理程序,编写:prev.setD ...

  3. datax 导入数据中文乱码_四种方法处理MYSQL导入中文数据时的乱码问题 | 很文博客...

    我是用的最后一种方法,前面三种解决MYSQL导入数据乱码的方法没试过,很文博客推荐大家直接使用第四种方法处理MYSQL导入中文数据时的乱码问题. 首先在新建数据库时一定要注意生成原数据库相同的编码形式 ...

  4. linux mysql插入中文乱码_解决Linux下Tomcat向MySQL插入数据中文乱码问题

    一.问题 在windows上面使用eclipse开发的项目在windows上面运行一切正常,部署到腾讯云时出现向MySQL数据库中插入数据是中文乱码 二.解决办法 1.尝试一 直接在linux上面使用 ...

  5. ajax传输json数据格式乱码_解决Ajax加载JSon数据中文乱码问题

    一.问题描述 使用zTree的异步刷新父级菜单时,服务器返回中文乱码,但项目中使用了SpringMvc,已经对中文乱码处理,为什么还会出现呢? 此处为的异步请求的配置: Java代码 async: { ...

  6. js post中文乱码 php,AJAX之POST数据中文乱码如何解决

    本文主要和大家分享AJAX之POST数据中文乱码如何解决,前端使用encodeURI进行编码,希望能帮助到大家.var param = encodeURI(param); $.ajax({ url: ...

  7. mysql导出数据到表格讲解大全(导出数据带表头,导出数据中文乱码问题解决)

    方法1 使用sqlyang工具 1.本地准备好一个文件 2.选择数据 3.点击图中所示按钮 ,选择复制所有行到剪贴板 4.一般都选择确定,无须修改 5 打开之前的文件,粘贴保存 方法2 使用mysql ...

  8. dbvisualizer查询mysql中文乱码_使用PLSQL Developer和DbVisualizer查询oracle数据库时出现乱码...

    使用PLSQL Developer和DbVisualizer查询oracle数据库时,出现查询数据中文乱码情况. 查看了一下数据库编码格式 select * from v$nls_parameters ...

  9. 用springmvc作接口时返回json数据中文乱码

    以前都是用springmvc做web项目,浏览器访问,所以没出现过fastjson中文乱码的问题,今天要做一个接口,结果杯具了中文乱码. 接口调用拿到返回数据疯狂的修改编码,结果无效,考虑是不是jso ...

最新文章

  1. css float 的使用
  2. 信息收集——Office钓鱼
  3. ViewPager与Tab结合使用
  4. SAP HANA中创建时间相关的数据时候需要Variant Schema
  5. 转载:SQL server2005 里面没有management studio!下载SQL开发版本
  6. 4.3 Siamese 网络
  7. selenium——元素的定位
  8. java 自定义注解 生成json_Java使用@JsonDeserialize注解实现自定义反序列化器
  9. mysql主主双机互备(三)
  10. IOS中延时执行的几种方式的比较和汇总
  11. configure: error: C++ compiler cannot create executables
  12. ERROR: Cannot uninstall 'wrapt'. It is a distutils installed project and thus we cannot accurately
  13. 钱理群: 真正的鲁迅是沉默的
  14. 人体工学电脑椅选购建议 | 潘魏增
  15. react开发插件-ES7 React/Redux/GraphQL/React-Native snippets
  16. Elasticsearch基础11——索引之别名使用
  17. java的println、print与printf
  18. office2021、Excel2021设置密码
  19. UnboundLocalError: local variable 'end_page' referenced before assignment
  20. python如何使用最简单的方式将PDF转换成Word?

热门文章

  1. Java问题集锦--The type StringEscapeUtils is deprecated
  2. java通过HTTPS协议POST提交接收JSON格式数据
  3. kafka集群下载、启动、部署、测试
  4. 企业实战_13_MyCat清除冗余数据
  5. Launch failed - cleaning up connection
  6. Bigdecimal基本运算及小数保留方式枚举
  7. c++ 指针拼接字符串_字符串拼接+和concat的区别
  8. python加载模型包占用内存多大_如何保持Keras模型加载到内存中并在需要时使用它? - python...
  9. decimal转为string sql_PHP+Mysql防止SQL注入的方法
  10. 南航计算机学院岳涛,自动化学院 - 南京航空航天大学