kettle 跑马观花

一. Kettle能做什么?

数据迁移, 数据增量同步, 数据收集.

二. kettle运行方式

  1. 使用kettle的GUI客户端运行.
  2. 命令行运行
  3. 通过kettle的server端运行.

三. kettle实例

环境准备

  • 安装 JDK
  • 安装 MySQL
  • 下载,解压kettle

数据准备

mysql数据库创建脚本

# 创建数据库
create database kettle_demo;

use kettle_demo;

# 区域表(存放省市名称以及关系)
CREATE TABLE `t_district` (
  `id` int(11) unsigned NOT NULL COMMENT '主键',
  `name` varchar(20) DEFAULT NULL COMMENT '区域名称',
  `p_id` int(11) DEFAULT NULL COMMENT '上级区域id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# 插入省市数据
insert into t_district(id,name,p_id) values(1,'湖北省',0);
insert into t_district(id,name,p_id) values(2,'武汉市',1);
insert into t_district(id,name,p_id) values(3,'黄石市',1);
insert into t_district(id,name,p_id) values(4,'荆州市',1);
insert into t_district(id,name,p_id) values(5,'广东省',0);
insert into t_district(id,name,p_id) values(6,'广州市',5);
insert into t_district(id,name,p_id) values(7,'中山市',5);

# 源数据表
CREATE TABLE `t_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(50) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '姓名',
  `sex` int(11) DEFAULT NULL COMMENT '性别: 0.男 1.女',
  `del` int(11) NOT NULL COMMENT '是否删除: 1.已删除 0.未删除',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '时间戳,会自动更新',
  `cityId` int(11) DEFAULT NULL COMMENT '城市id',
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

# 向t_user中插入原始数据
insert into t_user(name,sex,del,cityId) values('张三',0,0,2);
insert into t_user(name,sex,del,cityId) values('李四',1,0,3);
insert into t_user(name,sex,del,cityId) values('王五',1,0,4);
insert into t_user(name,sex,del,cityId) values('赵六',1,0,6);
insert into t_user(name,sex,del,cityId) values('孙七',1,0,7);
insert into t_user(name,sex,del,cityId) values('钱八',1,0,7);



# 目标数据表
CREATE TABLE `t_copy_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(50) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '姓名',
  `sex` int(11) DEFAULT NULL COMMENT '性别: 0.男 1.女',
  `del` int(11) NOT NULL COMMENT '是否删除: 1.已删除 0.未删除',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `cityId` int(11) DEFAULT NULL COMMENT '城市id',
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;



CREATE TABLE `t_new_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(50) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '姓名',
  `sex` int(11) DEFAULT NULL COMMENT '性别: 0.男 1.女',
  `del` int(11) NOT NULL COMMENT '是否删除: 1.已删除 0.未删除',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `city_name` varchar(20) DEFAULT NULL COMMENT '城市名称',
  `province_name` varchar(20) DEFAULT NULL COMMENT '省份名称',
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

kettle界面简介

主界面

kettle界面简介

资源库列表

资源库列表

资源库创建

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

kettle概念

资源库

作用

存储kettle脚本的代码

分类

文件资源库, 数据库资源库

建议使用文件资源库方式存放kettle脚本

**为什么? ** 因为稍微复杂一点的kettle脚本,都会涉及到脚本互相调用, 使用了kettle文件资源库方式管理kettle脚本,那么使用的就是相对路径.这样无论你的脚本放在哪里, 都可以正常运行. (这个表述不正确, 但你应该能够这句话的意思吧)

作业

可以将一个kettle作业看作一个java项目

转换

可以将一个kettle转换, 看成是一个项目下的功能模块

1. 使用kettle进行表数据复制

输入图片说明

输入图片说明

输入图片说明

设置字符编码,解决可能的中文乱码问题characterEncoding=utf8

输入图片说明

输入图片说明

输入图片说明

2. 使用kettle进行表数据的增量同步

情况一: 源数据表存在自增长id,且原表数据不会修改和删除

将目标表也设置一个id字段, 每次先取目标表的最大id, 然后通过这个id, 获取源数据表中所有大于该id的所有行数据

情况二: 源数据表存在一个实时更新的时间字段,且对该表中的数据进行逻辑删除, 任何对记录的修改,该字段的值都会更新为操作的执行时间

将目标表也设置一个时间字段, 每次获取目标的最大时间, 然后将源数据表中所有大于该时间的记录都复制到目标表中.

本实例, 实现 "情况二" 的数据复制.

3. 关联数据获取(数据库查询方式实现)

场景模拟: 用户表存了城市编码, 区域表中存了城市编码和省份编码以及区域名称和关系.

4. 关联数据获取(多源数据合并方式实现)

5. 关联数据获取(Rest Client方式实现)

6. 大数据量采用分页方式同步

四. kettle环境切换

在开发环境完成需求 --> 再将kettle的job切换到测试环境测试 --> 测试通过后,将job发布到生产环境.

转载于:https://my.oschina.net/akita/blog/1556800

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值