
有的时候,我们想要在Kettle中实现这个循环的功能,比如,批量加载数据的时候,我们要对10张表执行同样的 *** 作,只有表名和一些信息不一样,这时,写个循环就省事儿多了
这里的话,我们主要是通过一个将结果集返回,然后通过转换的设置来实现的
这个转换,只要是将我们要遍历的结果集返回,
表输入,我们就是返回了5条记录,来做遍历
这里呢,我们就是需要遍历的转换了,这里,我们只是获取结果集,然后将结果集输出
还有一个很重要的一步,怎样让这个转换可以根据结果集的条数,去循环执行呢?
就是这个“执行每一个输入行”
网上有很多的例子,介绍怎样用JS来控制循环,这里我们也简单的测试下
这一步,和上面的一样,就是将结果集返回
这里主要是使用JS将结果集进行遍历,通过JS,将一些结果存放到变量里面,在后面的 *** 作中就可以使用了,通过${xxx}的方式使用
这个其实和Java、JS里面循环思路一样,通过结果集的总数“total_num”和下标“LoopCounter”进行判断
这一步,就是判断下标的值和结果集的总数,进行对比,
输出下,我们想要使用的变量
这一步,给下标加一,然后获取下一条记录
好了,执行下,我们看看
前面我们介绍了 Kettle的Spoon的转换和作业定时任务GUI设计方式以及运行,但是在实际应用中,我们需要计划任务是在服务器后台运行。
首先我们需要了解Kettle的Kitchen和Pan
Kitchen——作业(job)执行器 (命令行方式)
Pan——转换(trasform)执行器 (命令行方式)
下面我们将重点讲解经常会用到的 作业执行器 Kitchenbat 。
1、新建一个bat文件,命名jobbat,然后编辑,输入内容如下:
注意:确保路径的正确性。
2、双击jobbat,即可运行。
我们已经建立了命令行运行的bat文件,并且已经可以正确执行我们的ETL任务了,但是现在我们在运行bat后,桌面上面会一直存在一个控制台的黑窗口,我们可以使用bat命令中的隐藏窗口的命令。
修改我们的jobbat文件
在此双击jobbat运行,我们将不会再看到控制台黑窗口继续保留在桌面上,并且等待设置的间隔时间后,我们可以看到日志文件记录。
···
2017/12/07 16:51:26 - Kitchen - Logging is at level : 基本日志
2017/12/07 16:51:26 - Kitchen - Start of run
2017/12/07 16:51:31 - job2 - 开始执行任务
2017/12/07 16:51:31 - job2 - job2
2017/12/07 16:53:31 - job2 - 开始项[简单表同步]
2017/12/07 16:53:31 - 简单表同步 - Loading transformation from XML file [file:///D:/KettleProject/TEST2ktr]
2017/12/07 16:53:31 - 简单表同步 - Using run configuration [Pentaho local]
2017/12/07 16:53:31 - 简单表同步 - Using legacy execution engine
2017/12/07 16:53:31 - TEST2 - 为了转换解除补丁开始 [TEST2]
2017/12/07 16:53:32 - 表输入0 - Finished reading query, closing connection
2017/12/07 16:53:32 - 表输入0 - 完成处理 (I=3, O=0, R=0, W=3, U=0, E=0)
2017/12/07 16:53:32 - 插入 / 更新0 - 完成处理 (I=3, O=0, R=3, W=3, U=1, E=0)
···
上一篇: Kettle入门之三 Kettle定时任务(GUI)
下一篇: Kettle入门之五 Kettle应用场景(增量插入和更新)
增量同步的方式有很多种,我使用的是: 快照表 + 触发器
需求:
当主库库表发生增删改时,从库库表与主库库表数据保持一致。
环境:
1、Mysql
2、kettle 71
思路:
1、在主库中,将需要同步的库表新建快照表,表结构一致。
2、在主库中,分别新增库表的增、删、改的触发器。
2、新建一个转换,该转换只针对一张表的增删改。
3、新建‘表输入’控件,查询主库的快照表
4、新建‘插入/更新’控件,插入数据到从库的库表,查询的关键字要求唯一。
5、新建‘删除’控件,将主库的快照表中的数据删除。
注意: 主库的库表,要新增针对增、删、改的三张表快照,三张表的步骤同上面的1 - 5 一致。
6、新建作业控件
7、配置发送邮件服务
8、完成
Kettle 的几个子程序的功能和启动方式
Spoonbat: 图形界面方式启动作业和转换设计器。
Panbat: 命令行方式执行转换。
Kitchenbat: 命令行方式执行作业。
Cartebat: 启动web服务,用于 Kettle 的远程运行或集群运行。
Encrbat: 密码加密
(请注意这里各个文件的名字,很有趣,类似于hadoop中的名字,这也许是属于国外程序猿的一种幽默吧)
转换和作业
Kettle 的 Spoon 设计器用来设计转换(Transformation)和 作业(Job)。
转换主要是针对数据的各种处理,一个转换里可以包含多个步骤(Step)。
作业是比转换更高一级的处理流程,一个作业里包括多个作业项(Job Entry),一个作业项代表了一项工作,转换也是一个作业项。
*** 作界面如下
保存作业
用户通过 Spoon 创建的转换、作业、数据库连接等可
以保存在资源库和 XML 文件中。
转换文件以 ktr 为扩展名,作业文件以 kjb 为扩展名
资源库可以是各种常见的数据库。可以在 Spoon 中自动创建资源库,资源库默认用户名和密码是admin/admin。
输入步骤简介
输入类步骤用来从外部获取数据,可以获取数据的数据源包括,文本文件(txt,csv,xml,json)数据库、 Excel 文件等桌面文件,自定义的数据等。对特殊数据源和应用需求可以自定义输入插件。
输入内容部分截图如下:
转换步骤简介
转换类步骤是对数据进行各种形式转换所用到的步骤。
例子:
- 字段选择 (就比如我们我负责的现在我们公司的数据库转移工作,字段选择很重要)
- 计算器
- 增加常量
流程步骤简介
流程步骤是用来控制数据流的步骤。一般不对数据进行 *** 作,只是控制数据流。
例子:
过滤步骤
输出步骤简介
既然有输入和过滤,那么一定也要有输出了。输出步骤是输出数据的步骤,常见的输出包括文本文件输出、表输出等,可以根据应用的需求开发插件以其他形式输出。
例子:
表输出等,如下图
总结
String firstnameField;
String lastnameField;
String nameField;
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{
// 获取输入
//
Object[] r = getRow();
// 输入为空,直接false
//
if (r == null) {
setOutputDone();
return false;
}
// 处于性能考虑,parameter只查一次
//
if (first) {
firstnameField = getParameter("FIRSTNAME_FIELD");
lastnameField = getParameter("LASTNAME_FIELD");
nameField = getParameter("NAME_FIELD");
first=false;
}
// 用 createOutputRow() 来保证output的数组够大,能够装下任何新的域
//
Object[] outputRow = createOutputRow(r, dataoutputRowMetasize());
String firstname = get(FieldsIn, firstnameField)getString(r);
String lastname = get(FieldsIn, lastnameField)getString(r);
// Set the value in the output field
//
String name = firstname+" "+lastname;
get(FieldsOut, nameField)setValue(outputRow, name);
// putRow will send the row on to the default output hop
//
putRow(dataoutputRowMeta, outputRow);
return true;
}
以上就是关于Kettle手册(八)- 循环全部的内容,包括:Kettle手册(八)- 循环、Kettle入门之四 Kettle定时任务(后台任务)、使用Kettle工具进行增量数据同步等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)