目标:将mysql5.5中testdb1的ehr_user表推送到tdoa的ehr_user表中,为避免不必要的麻烦,两张表结构、编码,包括数据库编码保持一致
操作系统:centos7.2
kettle:5.2
jdk:1.8.102
数据库:mysql
1.环境搭建
安装jdk1.8.102
rpm -ivh jdk-8u102-linux-x64.rpm
2.下载kettle软件上传到/data/目录下,并解压kettle.zip
3.在windows中建立好推送任务任务
具体步骤:
①安装好jdk1.8.102并设置java环境并设置java_home目录
②双击D:\software\source_tar\kettle\kettle\data-integration\Spoon.bat运行kettle软件
a.文件/新建/转换,保存下,此次我保持名为win_centos
db连接-新建,输入数据库的名称、连接IP、用户名、密码、数据库名,可以点击测试数据库是否联通,分别建立源数据库和目标数据库连接
点击运行可以进行测试是否连通
b.建立一个作业
将这些文件上传到/data/job目录中
kettle任务运行脚本,做成定时任务,每天晚上一次:
1 1 * * * /bin/bash /data/job/appPush/appPush.sh
cat appPush.sh
#!/bin/sh
JAVA_HOME=/usr/java/jdk1.8.0_102
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME
export CLASSPATH
export PATH
/data/kettle/data-integration/kitchen.sh -file=/data/job/appPush/win_centos.kjb > /data/job/appPush/bi.log
问题描述:
数据库中的数据在不同的数据库中转换来装换去,由于不同库可能使用了不同的字符集,所以可能导致结果数据乱码问题。此次是在一个作业中跑数据,跑完数据前台数据显示出现乱码,检查了作业中的多有中间过程表,包括表输入的预览,表中的数据都是正常的,可想而知,问题肯定是处在“表输入”到“表输出”这个中间的转换环节上,根据能想到的,应该是字符集问题,为了更有保障的“表输入”和“表输出”的字符集相同,所以在表输入输出中。都添加了字符集的配置参数characterEncoding,值为utf8,
步骤截图如下
主对像树/DB连接,源数据库和目标数据库都要改