kettle利用参数遍历执行指定目录下的所有对象
使用kettle设计ETL设计完成后,我们就需要按照我们业务的需要对我们设计好的ETL程序,ktr或者kjb进行调度,以实现定时定点的数据抽取,或者说句转换工作,我们如何实现调度呢?
场景:在/works/wxj/test目录下放着两个ktr模型,我们需要每天晚上24点定时抽取数据
如图所示:

方法一:最简单的方法就是设计一个kjb,拖两个ktr控件,把两个ktr模型串起来,然后定时的调度这个kjb文件即可实现每天定时的抽取数据。
方法二:如果随着业务的增多,ktr文件原来越多,那么上面的情况操作起来就很麻烦,我们在目录下新增加一个ktr模型我们就要去修改总的kjb,把新增加的ktr串进去,这样才能保证新增加的ktr被执行到,那么下面我们来尝试另一种方法,只要把新设计好的ktr文件放入指定目录,调度程序就会遍历执行该目录下面的所有程序。
2.1:整体描述:
大概需要的控件有:
(1)Get repository names根据指定目录得到所有ktr或者kjb的列表

(2)复制记录到结果

(3)从结果获取记录

(4)设置环境变量

(5)表输入与表述出job中的ktr与kjb
2.2:设计过程
step1:新建tran_getall.ktr(读取指定目录下的对象,将数据写入到内存)

控件1设计如下

控件2设计如下

step2:新建tran_set_variable.ktr(从内存读取结果集,并设置环境变量)
、
控件3设计如下

控件4设计如下

step3:新建job_exec.kjb(传参并执行所有指定目录对象)

1处的详细设计为

2处的详细设计为

step4:创建job_runall.kjb(调度所有对象,根据逻辑设计执行顺序)

从上面可以大概的看出,tran_getall是从资源库得到目录下面的所有内容,job_exec这个是传参赋值并且执行所有对象,这样的顺序是正确的。
1处的详细设计为

2处的详细设计为

2处需要注意的是

一定要勾上对每个输入行执行一次,这样才会循环覆盖一次变量值不然会报参数重复错误
job_exec的作用也就在这个地方,否则就可以讲job_exec省去,把所有的逻辑放在job_runall里面来实现了,OK 设计完毕运行job_runall.

执行成功,看结果

看遍历排序

OK,效果实现,这样无论目录/works/wxj/test下有多少个ktr或者kjb都会被遍历执行了,不必一个一个的去串起来
PS:需要注意的是如果遇到特殊的业务逻辑比如涉及到ktr执行先后顺序的,必须先跑ktr1才可以跑ktr2的需要单独拿出来处理。因为遍历目录的时候的顺序不是我们手工可以改变的,至少现在我还没有发现可以控制顺序来执行的方法。
kettle利用参数遍历执行指定目录下的所有对象的更多相关文章
- c++ 指定目录下的文件遍历
要实现指定目录下文件的遍历需要执行一下的部分: 第一步获取当前路径的名字:(MAX_PATH是在windows定义的所有的路径名字不超过其,调用该函数会使得得到当前的目录) #include < ...
- java-IO流(File对象-深度遍历指定目录下的文件夹和文件)
需求:遍历这个树状结构 File(String pathname) '\\'为了转义'\' // 通过抽象路径pathname 创建一个新的文件或者目录 File parent = new File( ...
- C#.NET中遍历指定目录下的文件(及所有子目录及子目录里更深层目录里的文件)
//遍历一个目录下所有的文件列表,代码实例 DirectoryInfo dir = new DirectoryInfo(folderName);var list = GetAll(dir); /// ...
- delphi遍历指定目录下指定类型文件的函数
遍历指定目录下指定类型文件的函数// ================================================================// 遍历某个文件夹下某种文件,/ ...
- 利用 FilesystemIterator 获取指定目录下的所有文件
/** * 获取指定目录下的所有文件 * @param null $path * @return array */ public function getFileByPath($path = null ...
- 微软BI 之SSIS 系列 - 在 SSIS 中将指定目录下的所有文件分类输出到不同文件夹
开篇介绍 比如有这样的一个需求,旧的一个业务系统通常将产出的文件输出到同一个指定的目录下的不同子目录,输出的文件类型有 XML,EXCEL, TXT 这些不同后缀的文件.现在需要在 SSIS 中将它们 ...
- [No000073]C#直接删除指定目录下的所有文件及文件夹(保留目录)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- java利用WatchService实时监控某个目录下的文件变化并按行解析(注:附源代码)
首先说下需求:通过ftp上传约定格式的文件到服务器指定目录下,应用程序能实时监控该目录下文件变化,如果上传的文件格式符合要求,将将按照每一行读取解析再写入到数据库,解析完之后再将文件改名. 一. 一开 ...
- Java基础---Java---IO流-----File 类、递归、删除一个带内容的目录、列出指定目录下文件夹、FilenameFilte
File 类 用来将文件或者文件夹封装成对象 方便对文件与文件夹进行操作. File对象可以作为参数传递给流的构造函数 流只用操作数据,而封装数据的文件只能用File类 File类常见方法: 1.创建 ...
随机推荐
- python中%r和%s的区别
%r用rper()方法处理对象 %s用str()方法处理对象 有些情况下,两者处理的结果是一样的,比如说处理int型对象. 例一: print "I am %d years old.&quo ...
- JavaSE基础之JDBC
JavaSE基础之JDBC 1.JDBC 的步骤: ①加载数据库驱动: a.MySQL:com.mysql.jdbc.Driver: b.SQLServer:com.microsoft.jdbc.sq ...
- 【持续更新】NOIP注意事项
1.无根据的乱搞不可能对 2.必须造极限数据跑一下 3.必须测空间 4.不管用不用都把cstring加上 5.开文件测样例 6.删一长串代码最好注释 7.到10:00先敲暴力 8.题读三遍 9.先做好 ...
- 2018-2019-20172329 《Java软件结构与数据结构》第二周学习总结
2018-2019-20172329 <Java软件结构与数据结构>第二周学习总结 教材学习内容总结 <Java软件结构与数据结构>第三章 集合概述--栈 一.集合 1.我们印 ...
- 电子助视仪 对比增强算法 二十种色彩模式(Electronic Video Magnifier, 20 color mode)
电子助视仪 是一种将原始彩色图像转换为某种对比度高的图像,例如将原始图像变换为黑底白字,红底白字,白底红字,蓝底黄字,黄字蓝底等等.电子助视仪的主要应用场景为为老人或者特殊弱视人群的阅读.国内国外均有 ...
- 华为S5300系列升级固件S5300SI-V200R001C00SPC300.cc
附带web,V200版本的第一个固件. 附件: 链接:https://pan.baidu.com/s/1QyXIIVho9AkhxUFYJYAkcw 密码:gaxm
- MVC对集合筛选,不使用Where(),而使用FindAll()
当想对集合筛选的时候,经常想到用Where过滤,而实际上List<T>.FindAll()也是不错的选择. 如果有一个订单,属性有下单时间.区域等等.如何使用List<T>.F ...
- 再次理解多线程线程安全问题(理解java内存模型后)
1.多线程访问的共享资源存在线程安全问题, 无外乎访问两种共享资源. 1)多线程访问方法区数据.存在线程安全问题,通过加锁 2)多线程访问实例变量:被访问对象是单例时存在线程安全,被访问对象是多例时, ...
- springboot2.X集成HttpClient 发送HTTPS 请求
1)jar <!--httpclient 发送外部https/http 请求--> <dependency> <groupId>org.apache.httpcom ...
- android NDK 开发环境搭建
基于 Android NDK 的学习之旅-----环境搭建 工欲善其事必先利其器 , 下面介绍下 Eclipse SDK NDK Cygwin CDT 集成开发环境的搭建. 1.Android 开发环 ...