kettle 实用功能之三 ---- 使用 kettle 群发动态内容的邮件。
有个客户是做外贸生意的,经常需要群发邮件,要求邮件里商品名称,收信人称谓等内容是动态的。他一直找不到一个合适的免费的群发工具,于是我推荐他使用了 kettle,并帮他画了一个流程来群发邮件。(这位朋友不是IT 人员,不会开发,只会使用 Microsoft Office )。(转载请注明:http://pdi.itpub.net)在我做的群发邮件流程里,还用到了我以前开发的一个插件(就是把文件内容作为字段加入到数据流)。 发送邮件流程,插件,kettle 我都集中在一起发布了。大家可以从 这里下载 该 kettle 的版本(该版本是基于 kettle 3.2 stable,修改了ke
kettle modified javascript 步骤的一个例子
例子里用到的 org.htmlparser.Parser 是一个html 的解析器,可以在 sourceforge 上下载。这个例子使用 org.htmlparser.Parser 包来解析一个 html 格式的字符串,要解析的 html 字符串保存在conntentOld 字段里。解析过程去除了 html 格式里所有标签,并将结果保存在 content 字段里。注意事项:1. 需要事先将htmlparser.jar包 放在kettle 的 libext 目录,kettle 在启动时会自动加载libext 目录下的所有 jar 包。2. modified java script 步骤要选中 compatibility mode,并将 content 设置为输出的字段。代码如下:[@more@]var parser =
kettle 实用小功能(二),读取一个目录下文本文件的内容
kettle 的实用小功能 中介绍了如何批量读取二进制文件的内容,这里说一下批量读取文本文件的方法。第一步也是使用 Get File Names 步骤,根据正则表达式来获取一个路径下所有指定的文件名。第二步骤使用 modified javascript 脚本步骤,来读取这些指定的文本文件,脚本如下。[@more@]//code beginfile = new Packages.java.io.File(filename.getString()); fileInputStream = new Packages.java.io.FileInputStream(file);reader = new Packages.java.io.InputStreamReader(fileInputStream);var cbuf = Packages.com.xgn.ketl.trans.step
kettle 里的 variables, arguments, 和 parameters
kettle 3.2 以前的版本里只有 variable 和 argument, 所以在 GUI 上对这两个单词的汉化,分别是变量和参数。但是在 kettle 3.2 中,又引入了 parameter 概念http://jira.pentaho.com/browse/PDI-1381, [@more@]kettle 里新加的 parameters 全称是Named parameters,通过 Named parameters 是相对于以前的 Positional arguments 而言的,以前的 Positional arguments 就是最多能设置的 10 个命令行参数,通过在命令行参数的位置来区别。 而 Named parameters, 可以通过名称来区别,并可以在命令行中通过 /param:name=value 的方式设
kettle 的实用小功能
kettle 除了作为 ETL 工具外,还有很多数据处理方面的实用功能,本文介绍几个实用的小功能。1. 文件批量入库该功能可以将一个目录下的全部或部分文件加载到数据库中。流程图:[@more@]第一步: “获取文件名” 步骤获取一个目录下的文件名,使用一个正则表达式来指定文件名。如上图,指定了 E:/opensource/kettle-trunk/ui/images 目录下所有以 .png 结尾的文件名。在这个步骤里创建了下面几个字段来描述所有获取的文件:FILENAME, SHORT_FILENAME, PATH, TYPE, EXISTS, ISHIDDEN, ISREADABLE, ISWRITEABLE, LASTMODIFIEDTIME, SIZE, EXTE
使用 mondrian output job entry 输出图表
根据开发计划和项目的需要,最近又为 mondrian output job entry 增加了输出图形的功能,目前这个插件支持从 MDX 查询生成 excle 表格和图形,图形以图片的方式保存,并嵌入到excel 的工作簿中。[@more@]如果要输出带有图形的表格,至少要使用两次 mondrian output job entry,第一次是输出图形文件,第二次输出 excel 表格,同时将图形文件嵌入到表格内。 作业设计流程如下: 1. 在作业流程里加入一个 mondrian output job entry ,在这个作业项里输入相应的 mdx 查询,在 chart 选项卡里设置要输出的图形的名称,高度,宽度,是否显
PDI 的帮助都移到了 wiki 上
以前 Spoon 的帮助都是以 PDF 文件提供的, 现在都移到了 wiki 上, 这样用户可以直接在 wiki 上发评论: http://wiki.pentaho.com/display/EAI/Spoon+User+Guide[@more@]3.1 里所有的步骤的帮助: http://wiki.pentaho.com/display/EAI/Pentaho+Data+Integration+Steps3.1 里所有的作业项的帮助: http://wiki.pentaho.com/display/EAI/Pentaho+Data+Integration+Job+Entries
PDI 对 PostGreSQL 的一些特殊处理
PostGreSQL 和其它数据库(SQLServer, Oracle等)有一个很大的不同: 就是写数据时,如果有主键冲突或其它错误,PostGreSQL 会等待事务结束,错误语句后面的语句都将被忽略.[@more@]所以 PDI 在向 PG 数据库写数据时,关闭了批量提交,,这样做影响了性能. 不过 PDI 通过 setSavePoint 和 releaseSavepoint 方法尽量来挽回一定的性能损失.有同样问题的还有 GP (记不清了好像叫 GreePalm) 数据库.
一种特殊文本格式的输入
"1"|"99A1026164***01"|"1"|"张学友"|"香港市"|"200063"|"张学友"|"个人"|"00****72"|"99A102616400"|"xx证券"|"66800000030005119"|"身份证"|"313705197310******"|"133****0369"|""|""|""|"寄送"|""|""|""|""|""|""|""|"20080129"|"200801
Kettle 在应用中遇到的一些问题和解决方法
本文主要总结了 Kettle 在中文环境应用中遇到的一些问题, 问题列表还会不断增加. 这些问题都是 kettle fans 提供的,欢迎参与讨论.问题1:从excel 中抽取数据,插入到oracle 9 数据库中,报下面的错误.2008/06/25 13:30:57 - 插入更新数据表.0 - Insert row: ![field1=1.3965E8, field2=1,798, field3=2002/05/27 00:00:00.000]2008/06/25 13:30:57 - oracl - ERROR : java.sql.SQLException: ORA-01722: 无效数字2008/06/25 13:30:57 - oracl - ERROR : at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125) [@m
关于 PDI 性能的简单测试
PDI 使用了下面的技术来提高性能:1. 数据库连接池。2. 多线程并发进行数据转换: 转换步骤是并发执行的,使用生产者/消费者的模式,每个步骤由一个线程来执行,当前步骤将一次处理完的数据放在缓存里,由下一个步骤的线程读取并再处理这些数据。[@more@]3. 数据批量装载: 表输出步骤中设置批量装载。4. 对于某些数据库还利用了数据库自身提供的装载工具, 如 Oracle 的 SQLLoader. 在 PDI 3.1 中提供了该功能。5. 集群: 主服务器 (master server) 将大任务分解为多个小任务, 并将要处理的数据通过 soket 发送到从服务器(slave server), 由多个从
关于资源库
资源库是用来保存转换任务的,用户通过图形界面创建的的转换任务可以保存在资源库中。资源库可以是各种常见的数据库,用户通过用户名/密码来访问资源库中的资源,默认的用户名/密码是admin/admin[@more@]资源库并不是必须的,如果没有资源库,用户还可以把转换任务保存在 xml 文件中。如果用户需要创建一个资源库,在资源库的登录窗口(PDI 启动时的第一个窗口)中有 【新建】 按钮,点击该按钮弹出新建资源库窗口,在该窗口中选择一个数据库连接,如果没有事先定义的数据库连接,则还要点击【新建】按钮,来创建一个数据库连接。选择数据
记录集连接步骤
该步骤就是将两个表或记录集进行连接。可选的连接方式有INNER:内连接[@more@]LEFT OUTER:左连接RIGHT OUTER:右连接OUTER:外连接
合并记录步骤
该步骤用于将两个不同来源的数据合并,这两个来源的数据分别为旧数据和新数据,该步骤将旧数据和新数据按照指定的关键字匹配、比较、合并。需要设置的参数:[@more@]旧数据来源:旧数据来源的步骤新数据来源。新数据来源的步骤标志字段:设置标志字段的名称,标志字段用于保存比较的结果,比较结果有下列几种。1. “identical” – 旧数据和新数据一样2. “changed” – 数据发生了变化;3. “new” – 新数据中有而旧数据中没有的记录4. “deleted” –旧数据中有而新数据中没有的记录关键字段:用于定位两个数据源中的同一条记录。比较字
行转列步骤
行转列步骤实际上就是生成所谓的透视表(pivoted table)的步骤,在直观上也就是将属于同一组的多行数据变为一行数据。[@more@]分组字段:将所有记录分成不同组的字段名称。关键字段:在一个分组内区分不同记录的字段名称。关键字值:关键字段的值,一般是可以枚举的整数或字符。数据字段:保存实际数据的字段名称目标字段:由关键字段和数据字段组合而成的新字段名称,该字段名称可以自定义。例子:下面的数据人员编码职务选票数104115122206219221可以转换为人员编码第一职务第二职务第三职务145221691对应的设置分组字段:人员编码关键
数据库查询步骤
该步骤可以根据数据流里的数据来查询数据库表里的数据,并得到数据表里的指定字段。查询得到的字段也作为数据流里的字段,并转到下一个步骤。[@more@]需要设置的参数数据库连接:要查询的表所在的数据库连接.查询的表:要查询的表名.表字段:指定用来比较的表里的字段比较操作符:包括 =、 <、 >、 like、between 等操作符流字段1:指定用来比较的流里的字段流字段2:指定用来比较的流里的字段,仅适用于双操作数的操作符,如between。查询表返回的值字段:要获得的查询表里的字段新名称:可以为该字段指定一个新的名称默认值:查询
表输入步骤
表输入是从一个数据库表或数据库视图中获得数据。在表输入步骤里要选择数据库和数据库里的某个表或视图。也可以直接输入SELECT 语句来获得数据。配置窗口中选项说明:[@more@]1 替换脚本脚本里的变量:是否在SQL 语句里可以使用变量。如下面的SQL 语句使用了变量 minID。SELECTf1, f2FROM t1WHERE f1 >= ${minID}2 从步骤插入数据:除变量外,用户输入的SQL 语句在运行时还可以接收其它步骤的运行结果,也就是将其它步骤的运行结果作为一个SQL 语句的参数。如下面的SQL 语句,使用 ?作为接收参数的位置。(语句格式类似于JDBC规范里的
JavaScript 转换步骤
Kettle 里的 JavaScript步骤 是一个非常重要的转换步骤,一般来说其他步骤搞不定的事情,都可以由它来解决。 JavaScript步骤里使用的脚本是 Mozilla 的 Rhino,Rhino 是一个很流行的脚本语言。正因为它的出色,所以被 JDK 1.6 收编了,换了一身行头变成 javax.script 包了。不过 Mozilla 还一直在开发Rhino ,最近的一个 Realease1.7 是 08年3月份发布的。Rhino 作为一种脚本语言要遵守脚本语言的标准,对 Rhino 或脚本语言不熟悉的朋友可以参考下面的几个连接 Rhino介绍 javaScript 介绍 javaScript 规范 我们来看看 Kettle 里的 JavaScr
Excel 输入步骤
Excel 输入步骤用于从Excel 文件中按照指定的数据类型和格式获取数据。Excel输入步骤的设置包括五个部分: 1. 文件[@more@]选择一个Excel文件或保存有Excel 文件的目录。文件或目录:设置要读取的Excel文件的名称,或一个目录。可以使用【浏览】按钮来选择文件或目录。正则表达式:设置一个正则表达式来匹配一个目录下的部分Excel文件。选择的文件:列出所有选中的文件,可以使用【增加】按钮将【文件或目录】中的文件添加到文件列表中。2. 工作表选择工作薄中的一个或多个工作表,并通过指定工作表中的开始行号和开始列号来设要读取的内容
PDI(Kettle) 是什么?PDI(Kettle) 都能做什么?
PDI(Kettle) 是什么?PDI(Kettle) 是一款开源的、元数据驱动的 ETL (数据的抽取、转换、加载)工具,是开源 ETL 工具里功能比较强大的一个。 [@more@]PDI 的全称是Pentaho Data Integeration,Kettle 是 PDI 以前的名称,Kettle 本意是水壶的意思,表达了数据流的含义。Kettle 的主作者是 Matt ,他在 2003 年就开始了这个项目,在 PDI 的代码里就可以看到最早的日期大概在2003年4月。 从版本2.2开始, Kettle 项目进入了开源领域,并遵守 LGPL 协议。 在 2006年 Kettle 加入了开源的 BI 组织 Pentaho, 正式命名为PDI, 加入Pentaho 后Kettl