文章目录
一、kettle下载与运行
1. 下载地址
https://community.hitachivantara.com/docs/DOC-1009855
2. 运行
下载完成后,解压即可,双击Spoon.bat
运行。
注意需要配好JDK path。
启动较慢,十秒钟可能毫无反应,耐心等待。
说明:后文例子是从sqlserver迁移到mysql
二、使用“复制多表向导”进行整表复制
适用业务场景:小数据量数据迁移,直接整表迁移至目标库(新建源表同样的表),然后在目标库中进行数据整理。
1. 新建一个“转换”
2. 设置DB连接
涉及什么库,就要在lib
目录下添加对应的数据库连接jar包(注意版本不合适可能报错):
sqlserver:jtds-1.3.1.jar
mysql:mysql-connector-java-5.1.18.jar
oracle:ojdbc14-10.2.0.1.0.jar
(1)设置源库连接:
(2)设置目标库连接:
可能碰到的错误:
总体解决思路:在确保填写无误之后,重点考虑mysql-connector-java-xxx.jar 的版本(测试发现mysql-connector-java-5.1.46.jar比较好用。
错误1:Error connecting to database: (using class org.gjt.mm.mysql.Driver)
Unknown initial character set index ‘255’ received from server. Initial client character set can be forced via the ‘characterEncoding’ property.
解决1:设置characterEncoding=utf8
错误2:Error connecting to database: (using class org.gjt.mm.mysql.Driver)
Unexpected exception encountered during query.
解决2:mysql-connector-java-*.jar版本不合适,改成mysql-connector-java-5.1.46.jar测试可以。
3. 使用“复制多表向导”
(1)选择源数据库和目标数据库
(2)选择需要复制的表
(3)设置作业名称和保存位置,完成
问题1:为什么使用kettle,不直接导出sql语句啥的呢?
因为kettle会自动处理不同数据库字段格式兼容的问题。
问题2:为什么使用复制多表向导,不使用复制单表向导呢?
复制单表要求目标库有对应表,不会自动生成新建表的步骤;复制多表(选择单表当然可以),会检测目标库有没有同名表,没有的话会生成新建表的步骤,有的话就没有新建表步骤。(测试发现是这样,不当之处请指正)
4. 执行
三、有字段映射的单表迁移
适用业务场景:源库中某表数据迁移到目标库中某表,需要设置字段映射。
也不用从核心对象中拖入对象啥的,直接使用“复制单表向导”。
1. 新建一个“转换”
2. 设置DB连接
3. 使用“复制单表向导”
(1)选择源数据库和目标数据库
(2)选择需要复制的表,完成
4. 修改一些设置
(1)表输入步骤:可以修改select语句,也可修改步骤名称等。
(2)表输出步骤:
5. 执行
四、设置作业定时调度
1. 双击作业start节点,设置定时调度
下图设置了每隔5秒执行一次