0、准备两个数据库实例(最好位于两台不同的数据库服务器),每个实例中创建好源表和目标表
源表
CREATE TABLE `test_0`.`stu_info` (
`stuNum` VARCHAR(128) NOT NULL COMMENT '学号',
`stuName` VARCHAR(45) NOT NULL COMMENT ' 姓名',
`stuAge` VARCHAR(45) NOT NULL COMMENT '年龄',
`regTime` VARCHAR(45) NOT NULL COMMENT '注册时间',
PRIMARY KEY (`stuNum`));
分析表
CREATE TABLE `stu_info_analysis` (
`stu_num` varchar(128) NOT NULL,
`stu_name` varchar(45) NOT NULL,
`stu_age` int(4) NOT NULL,
`reg_time` timestamp NOT NULL,
PRIMARY KEY (`stu_num`)
)
1、创建job
File --> New --> Job,在新建的Job上,ctrl+s,命名为stu_etl,保存到文件
2、创建数据连接
File --> New --> Database connection...
把这个流程中需要用到的数据库连接全部创建起来,本例中就两个
先测试一下数据源的连通性,如果提示找不到驱动,上Mysql官网下载驱动包:
https://dev.mysql.com/downloads/connector/j/
Select Operating System: Platform Independent
由于在mysql-connector-java-5.1.48以后的版本中,用com.mysql.jdbc.Driver替代了org.gjt.mm.mysql.Driver,所以只能下载mysql-connector-java-5.1.48版本的jar包
下载完成之后,解压,把驱动jar包放在data-integration/lib下
创建的数据库连接在
可以看到,然后在建好的数据源上,右键,Share,这样整个工程就都可以用这两个数据源了
3、创建起始点
添加Start元素到Job stu_etl中
4、新建transformation。从目标表中取出上次抽取的最大学号,保存到变量中,作为本次抽取的起点
File --> New --> Transformation,在新建的Transformation上,ctrl+s,命名为get_start_stunum,保存到文件
将Transformation get_start_stunum添加到Job stu_etl中
转到get_start_stunum
添加Input/Table Input
接着添加Job/Set variable
并把Table Input getMaxStuNum连向这个Set variable
注意,variable scope type需要选择valid the patent job,即父级job可见,这样才能在job中从当前transformation流向下一个transformation
注意,一定要写default value,因为初始的时候,通过Table Input getMaxStuNum拿到的数据肯定是空的,因为分析表里在初始状态下是没有数据的。
5、创建transformation,在上次抽取的基础上接着抽
同样在创建Transformation data_from_src_to_anay,添加到job中,并将Transformation get_start_stunum连向Transformation data_from_src_to_anay
在Transformation data_from_src_to_anay上设置传入变量
然后在Transformation data_from_src_to_anay中添加
input/table input从源表中获取数据,由于学生年龄和注册时间两个字段类型不匹配,所以需要必要的转换
注意,由于需要用到Transformation get_start_stunum传过来的变量,所以这里必选勾选Replace variable in script
在input和output中间添加两表的映射关系Transform/select values
output/table output将数据存到分析表中
6、创建结束点(Success)
这是必须的,否则etl进程所持有的数据库连接等资源将得不到释放
运行,成功!!!