发布时间 : 星期一 文章ETL工具kettle学习总结更新完毕开始阅读6352122d915f804d2b16c193
6. Scripting
6.1 Execute SQL script
执行SQL脚本,应该避免使用这一步骤,尽可能的使用“table input(select)”,”table output(insert)”,”update”,”delete”等步骤来替代。
譬如动态创建表(表名是可变的,table1,table2,table3): SQL脚本是: CREATE TABLE? (
ID INTEGER );
6.2 Execute row SQL script
对Execute sql script的补充,增加了可以自定义sql语句的字段名
6.3 Formula
在数据流中执行公式
6.4 Modified Java Script Value
Modified Java Script Value应该说是转换步骤里最强大的一步,可以获取前一步的输入流的所有字段,调用Java api对数据做转换等操作,改变所有输出的值。还能通过设置转换状态常量对现有转换流程做改变,(忽略转换,设置为错误,继续转换)。
脚本是 Mozilla 的 Rhino,Rhino 是一个Java实现的Javascript解释器。现在已经加入到 JDK 1.6 的 javax.script 包中了。 对数据流进行修改等操作
提供了常量,函数,输入字段,输出字段的列表显示
1) 2)
Transformation scripts 已经创建的脚本 Transformation constants Transformation functions
已经预先定义好的静态常量,不可更改,例如
SKIP_TRANSFORMATION , ERROR_TRANSFORMATION, CONTINUE_TRANSFORMATION
3)
类型转换,操作函数: 字符串,数字,日期之间的转换,字符串截取等
逻辑判断函数: isDate(var) ,isNumber(var)等
特殊函数:LoadScriptFile(var),getProcessCount(var),print(var),writeToLog(var),
getVariable(var,var)
文件操作函数:createFolder(var),deleteFile(var),getLastModifiedTime(var,var),
moveFile(var,var,var)
Input fields 获取输入流中字段的值 field.getNumber() Output fields set输出流中字段的值 field.setValue(99)
例子:
1) 过滤Null字段
var a;
if ( fieldname.isNull() ){ a = '0'; }else{
a = fieldName.getString(); }
2) 字符串截取
将字符串“12345McDonalds”前面的数字部分分割出来 var str = field.getString(); var code = \var name = \
for (i = 0; i < str.length(); i++ ){ c = str.charAt(i);
if ( ! java.lang.Character.isDigit(c) ){ code = str.substring(0, i); name = str.substring(i);
Alert(\ break; } }
3) 过滤记录行,控制转换流程
trans_Status = CONTINUE_TRANSFORMATION
if (field.getString()==’123’) trans_Status = SKIP_TRANSFORMATION
4) 使用java类库
var mydate = \
var parser = java.text.SimpleDateFormat(\
var dateObj = parser.parse(mydate); //just like how you would do in java Alert(dateObj);
6.5 Regex Evaluation
通过正则表达式验证输入字段
6.6 User Defined Java Expression
执行一些简单的java代码
譬如表达式:firstname+\也可以用Java代码:
new StringBuffer(firstname).append(\
7. Lookup
7.1 Call DB Procedure
执行存储过程并获得返回值,返回值只有一个,参数可以多个。
7.2 Check if a column exists
检查数据库表是否存在某列
7.3 Database join
改步骤允许查询等操作利用上一步的数据,譬如参数动态绑定的查询语句,可以被上一步某个字段的值替换掉
7.4 Database lookup
和database join功能类似,从数据库查询数值,作为新的字段添加到数据流中。可将前面的输出流的值作为查询比较参数