kettle spoon使用教程怎么批量使用正则表达式

非计算专业的自学程序员,所以底子薄,所以再怎么努力也不为过吧~
ETL之kettle使用总结:(批量、含常量)csv入库
本文实验的ktr文件:
18年开工第一天,做下Kettle的使用总结。
Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,数据抽取高效稳定。
关于kettle的下载及安装这里不赘述,此处仅介绍工作过程中最常见的三种使用场景:
单个csv文件入库;
增加一个常量字段的csv文件入库;
批量csv文件入库。
2.具体操作
2.1单个csv文件入库
这个是最简单的操作,下面我们通过实例进行说明:
2.1.1首先我们在数据库中建立需要入库的表ljb_test_kettle
create table ljb_test_kettle
session_id
varchar2(50),
varchar(4),
extension_id
varchar2(10),
similar_grade
这里一定要注意字段的类型,多数情况下的报错都是由字段类型不匹配或长度不够等引起的。
2.1.2打开spoon
双击kettle解压文件中的spoon.bat(windows是spoon.bat,Linux和Mac是spoon.sh)。
在主对象树右击转换-&新建,建立新的转换。并保存Ctrl+S,命名,这里随便写个。如下图:
2.1.3 创建数据库连接DB连接
右键图中DB连接-新建连接,填上相应的参数,除了数据表空间和索引表空间之外,其余均要填写。如下图:
填写完成,我们可以点击测试,如果没问题则表示成功,如果错误请根据具体信息解决(网络问题、jar包缺少、配置错误等)。
2.1.4 创建输入输出对象
点击核心对象树,分别找到输入-CSV文件输入,输出-表输出,并直接拖动到转换的图形视图(下图中的2视图)中。
2.1.5创建连接
按住Shift键,依次单击输入对象和输出对象,会在两者之间生成一个箭头,并选择主输出步骤。如下:
2.1.6 输入输出对象参数设置
通过双击两个对象,可以进行相关参数设置。
2.1.6.1 输入对象参数配置
步骤名称:可以使用默认,建议根据工作要求进行规范命名。
文件名:通过浏览选择对应需要导入的文件。
列分隔符:因为是CSV文件,所以采用默认的英文逗号。
对于字段这一列,我们可以自动获取字段,操作方式:
获取字段-取消,注意弹出框的时候一定选取消,不然相应的格式之类的会自动帮你填写,但这些往往我们并不需要。如下图:
我们可以通过预览查看是否是我们想要的结果。
2.1.6.2 输出对象参数配置
步骤名称:可以采用默认,推荐采用结果表名称。
数据库连接:采用之前创建的连接,如果没有创建,可在这里点击新建按钮进行创建。
目标表:数据库中的表名。
勾选指定数据库字段。
如果我们不勾选该选项的话,在我们选择数据库字段的时候,如下两个按钮就是灰色的,无法点击,如下图:
点击获取字段。然后观察顺序是否无误,确定。
2.1.7 运行转换
点击三角符号,运行这个转换。
并查看日志。
去数据库中查看数据,至此已完成。
2.2 增加新的常量字段的csv文件入库
我们有如下需求,三个csv文件入库,并添加一个flag字段,对于第一个csv文件,flag为0,第二个flag为1,第三个flag为2。
我们可以通过添加自定义常量的方式实现。
我们把刚才的对象复制一份,并点击连接箭头,可以看到,会变成灰色,这样,当我们运行的时候,灰色的转换就会被跳过。
2.2.1 增加常量
转换-增加常量
建立如下图的转换。
同样的我们建立测试表:
create table ljb_test_kettle_final
session_id
varchar2(50),
varchar(4),
extension_id
varchar2(10),
similar_grade
2.2.2 配置常量
双加增加常量,并进行下图所示配置。
2.2.3 配置输出对象
双击输出对象,更新配置,重新获取字段:
2.2.1 运行转换
运行转换,第二个第三个同理,只需要更改对象的flag值即可。
2.3 批量入库csv文件
有如下需求,我们需要把下图中的所有csv文件入库,这些csv文件字段类型完全一样。
这时,我们需要采用通配符进行批量入库。
2.3.1 首先把之前的转换全部点击为灰色。
2.3.2 修改输入对象
批量输入与单个输入不同点在于输入对象变为了文本文件输入。
输入-文本文件输入。
2.3.3 配置输入对象
2.3.3.1 配置文件项
浏览到目录,然后增加。
填写通配符:采用如下写法可以成功。
2.3.3.2 配置内容项
分隔符,英文逗号。
格式:Unix。
2.3.3.3 配置字段项
获取字段-取消
2.3.3.4 预览记录
预览记录没问题则表示配置成功。
2.3.4 运行转换
运行该转换即可。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!博客分类:
在进行文本处理时,有时候需要从多级目录的多个文件中取出某些数据。命令行难以处理较复杂的过程,而高级语言虽然可以实现这种算法,但代码比较难写,再加上可能存在大文件,处理起来会更加困难。集算器支持游标读取大文件、脚本递归调用,易于实现批量文件处理,下面通过例子来看一下具体作法。
目录“D:\files”包含多级子目录,每个目录下都有许多文本格式的文件,从这些文件中读取指定的行(比如第二行),并将这些数据写入新的文件result.txt。目录D:\files的部分结构如下:
集算器代码:
首先定义一个参数path,初始值设为“D:\files”,这样就可以从该目录开始抽取数据。如下图:
A1=directory@p(path)
函数directory用来读出参数path中根目录的文件列表,选项@p表示文件名带全路径,部分结果如下:
A2=A1.(file(~).cursor@s())
这句代码用来以游标的方式依次打开A1中的文件。A1.(…)表示对A1的成员依次进行计算,~用来表示当前成员,函数file用来建立文件对象,函数cursor表示根据文件对象返回游标对象。
函数cursor的默认分隔符是tab,默认列名是_1,_2…_n,选项@s表示忽略分割符并将文件内容读成单列字符串,列名是_1。值得注意的是,这句代码只是建立游标对象,并没有读入数据,实际的读入动作会在遇到函数fetch时触发。A2的计算结果如下:
A3=A2.((~.skip(1),~.fetch@x(1)))
这句代码可以从A2的每个文件游标中读取第二行。A2.(…)表示对A2中的每个游标依次计算,(~.skip(1),~.fetch@x(1))表示依次计算括号内的表达式,并返回最后一个表达式的结果。其中~.skip(1)表示跳过一行,~.fetch@x(1)表示从当前位置读取一行(即第二条)并关闭游标,选项@x表示取完数据后自动关闭游标,~.fetch@x(1)就是括号运算符要返回的结果。
函数skip可以跳过多行,也可以通过参数来决定需要跳过几行。函数fetch也可以取出多行,比如从第10行开始取2行,可以写作~.skip(10),fetch@x(2)。
A3的部分计算结果如下:
A4=A3.union()
这句代码将A3的计算结果合并。函数union执行并集操作,比如对两个集合[1,2]和[2,3]计算并集,代码是[12],[2,3]].union(),结果等于[1,2,3]。函数union会去除重复数据,如果想保留重复,应该使用函数conj(也叫合集)。A4的部分结果如下:
A5=file("d:\\result.txt").export@a(A4)
这句代码用来将A4追加到result.txt中。函数export执行写文件操作,选项a表示追加。
上述A1-A5已经完成了当前目录里文件的抽取,下面只要取出当前目录的子目录,并递归调用本脚本即可。
A6=directory@dp(path)
函数directory可以取出当前目录的所有子目录,选项d表示取目录名,选项p表示取全路径。对于目录D:\files,A6的计算结果如下:
A7=A6.(call("c:\\readfile.dfx",~))
这句代码依次对A6中的成员(各子目录)进行计算,算法是:调用集算器脚本c:\\readfile.dfx,并将当前成员(子目录)作为入口参数。注意:readfile.dfx就是本脚本的文件名。
通过A7的递归调用,集算器就可以对D:\files下的多级目录进行批量抽取,打开result.txt可以看到最终计算结果:
datamachine
浏览: 92507 次
不错,学习了!
说了半天加个字段就好了嘛。。。。。。
既然用mongodb 还是赶紧丢掉sql设计范式吧
m 写道收费的吧???不是开源的吧??有免费 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'使用kettle批量下载文件
使用kettle批量下载文件
最新有项目中需要批量下载文件并把结果导入到数据中,通过一些实验测试,kettle确实可以胜任。问题是关键是如果通过http批量下载文件,本文将详细说明,假设你已经了解了kettle的基本知识,如果需要可以查看我的系列入门教程。
本文的示例代码可以在这里下载.
kettle的转换中没有通过http下载文件的步骤,但是job的有对应的步骤,所以在主job调用子job(Download.kjb),需要下载的文件列表通过一个转换提供。
文件列表转换
这里我仅仅使用数据表步骤提供五条记录文件,有两个字段分别为&filename&和&url&(url的内容根据你的业务需要,这里使用一个示例供测试),为了让这些数据在download.kjb中可以访问,后面使用了job类别中&copy rows to result&步骤。&
下载的作业
download作业只下载一个单独的文件,但是我们需要针对文件列表中每条记录都要运行。这里需要在作业的高级设置,选中&Execute for every input row&,实现循环调用。
在http步骤中,我们需要设置filename和url,这两个字段内容来自输入后,我们使用变量${URL}和${FILENAME},为了使这些数据和变量关系对应,我们需要做两件事情。
1) 需要声明&URL&和&FILENAME&命名参数
在作业的属性设置,命名参数选项卡中设置。
2) 选要指定字段和变量(命名参数)的映射关系
在主作业中双击download作业步骤,然后再命名参数选项中配置映射关系。同时在主作业中定义了PATH变量,确定文件保存的位置,http步骤中使用该变量确定文件位置及名称。
运行完成后,可以在c:\temp目录中可以成功下载的文件,如果把文件的结果读入到,就不是难事了。有需要通过其他的文章讲解。&&taskctl如何调度kettle作业
taskctl如何调度kettle作业,是否需要在kettle服务器上还需安装agent?谢谢
[最后编辑于
taskctl的server或agent是需要有执行pan.sh或kitchen.sh&脚本的权限才行的如果已经把taskctl安装到kettle所在服务器了,就不再安装agent了。因为server本身都包含了一个agent组件的所有功能。如果没有,则需要安装magent主代理到kettle服务器上。下面简单介绍一下taskctl调度kettle中kjb作业(ktr同理)的一般步骤1、在designer中流程模块文件中添加如下代码片段:&serial&
&&&name&MainModul_rootnode&/name&
&&&&&&name&MainModul_beginjob&/name&
&&&/begin&
&&&!--&&用户模块代码自定义区开始&--&
&&&&&kjbjob&
&&&&&&&name&kjbjob&/name&
&&&&&&&progname&$HOME/mykettle/kjb/a.kjb&/progname&
&&&&&&&para&PDATE=$(workdate),DBNAME=$(db_name),DBUSER=$(db_name),DBPWD=$(db_passwd)&/para&
&&&&&&&exppara&$HOME/kettle/data-integration&/exppara&&&!--&替换成kettle的安装路径&--&
&&&&&&&jobdesc&执行kettle技术平台ktr转换范例&/jobdesc&
&&&&&/kjbjob&
&&&!--&&用户模块代码自定义区结束&--&
&&&&&&name&MainModul_endjob&/name&
&/serial&这里着重解释下progname、para、exppara三个参数的意义。progname--&ktr或kjb位于kettle服务器的文件位置para--&是ktr或kjb作业的参数,与Spoon中定义的参数名称对应。exppara--是kettle中kitchen.sh或pan.sh的环境参数。2、编译该流程3、在monitor中重载流程并运行该流程。
& &您好, 我的机器是windows的环境, 我的路径该如何写呢?kettle 程序路径 : G:\data-integration-5.4job 路径:&G:\data-integration-5.4\jobs\test.kjb下面这块代码对吗?&&&kjbjob&&&&&&&&name&myKettleJob&/name&&&&&&&&progname&&G:\data-integration-5.4\jobs\test.kjb&&/progname&&&&&&&&&exppara&&G:\data-integration-5.4\kitchen.bat &/exppara&&&&&&&&jobdesc&执行kettle转换&/jobdesc&&&&&&/kjbjob&
请问,我要在windows上开发,linux上部署,是不是要在linux服务器上安装服务端,win上装client?
我使用的【kettle数据库资源库】,如何用taskctl调度?
请登录后评论~
敏捷批量调度开拓者
电话:028-
qq群: 邮箱:
扫描关注TASKCTL公众号
成都塔斯克信息技术有限公司 版权所有 (C) 2017
工信部备案号:蜀ICP备号 公网安备案号:后使用快捷导航没有帐号?
查看: 6866|回复: 0
如何在Kettle里面实现如下的正则匹配?【已解决】
金牌会员, 积分 2500, 距离下一级还需 500 积分
论坛徽章:3
本帖最后由 yang.y.xu 于
07:57 编辑
需求是通过正则表达式(输入数据2),把非标准的数据源(输入数据1)进行标准化。Kettle不支持基于正则表达式的查询,哪位兄弟做过类似的项目?烦请分享思路!多谢!
输入数据1,非标准的医院名称&&Hospital Name&&
上海瑞金医院
上海第二医科大学附属瑞金医院
上海交通大学瑞金医院
上海交大医学院附属瑞金医院
上海交通大学医学院附属瑞金医院
瑞金医疗集团闵行中心医院
输入数据2,医院标准名称以及对应的正则表达式&&Standard Hospital Name&&
RegExpress
上海交通大学医学院附属瑞金医院
.*瑞金医院.*
希望实现的结果是,医院的非标准名称符合正则表达式,然后把该正则表达式对应的医院标准名提取出来,借此将非标准名称标准化;&&Hospital Name&&
Standard Hospital Name
上海交通大学医学院附属瑞金医院
上海瑞金医院
上海交通大学医学院附属瑞金医院
上海第二医科大学附属瑞金医院
上海交通大学医学院附属瑞金医院
上海交通大学瑞金医院
上海交通大学医学院附属瑞金医院
上海交大医学院附属瑞金医院
上海交通大学医学院附属瑞金医院
上海交通大学医学院附属瑞金医院
上海交通大学医学院附属瑞金医院
瑞金医疗集团闵行中心医院
上海交通大学医学院附属瑞金医院
日:学习的威力体现了,用第9周课程讲的 Script内容实现了如下,插曲是使用正则表达式步骤匹配的正则表达式内容可以通过变量传递但是不生效,最后想起来Java Script内容(Kettle课程第9周视频内容),尝试用Java Script配合正则表达式结果一举成功!学习的价值就是通过学习可以一直解决以前不能解决的问题!
JavaScipt正则表达式匹配.jpg (281.92 KB)
07:56 上传
07:57 上传
点击文件名下载附件
dataguru.cn All Right Reserved.}

我要回帖

更多关于 kettle7.1使用教程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信