开源ETL工具kettle系列之动态转换
副标题[/!--empirenews.page--]
摘要本文主要讨论使用Kettle来设计一些较为复杂和动态的转换可能使用到的一些技巧,这些技巧可能会让你在使用Kettle的时候更加容易的设计更强大的ETL任务。 动态参数的传递Kettle 在处理运行时输入参数可以使用JavaScript 来实现,大部分工作只是按照一个模板来处理的。 argument当你在运行一个转换的时候,不管这个转换是一个Job的一部分还是只有这个转换,你都可以传递参数给它,当你运行一个转换的时候,会弹出一个 Execution a Transformation 的对话框,让你选择执行转换的方式,本地执行,远程执行,分布式执行,下面就是日志记录的级别和回放时间,然后是argument 和 variables 的设定。Argument 和 variables 的区别在官方FAQ里面也有解释。你也可以参考一下官方的解释和下面解释的异同。 取得argument的值我们在转换之前设置了argument的值,需要用到的时候就使用get system info 步骤,这个步骤取得在运行时参数,需要注意的是我们是先设置get system info,然后在里面决定要使用多少个参数,最多10个,每个参数名叫什么,然后我们才能在运行时看到你设置了的参数名后面跟一个要你输入的值,并且参数类型是不能够指定,全部都当作字符串处理,如果你需要对参数类型有要求,你需要自己转换,使用一个Mapping步骤或者Select values步骤。 取得variable的值Variable 的值个数不受限制,你可以在kettle菜单的set environment里面设置,也可以使用文件储存这些值,在第一次运行kettle之后,kettle会在 使用脚本Kettle使用的是JavaScript来作为它的脚本实现,使用的是mozilla 的rhino 1.5r5版本实现,如果你打算实现一些复杂的计算过程,比如字符串分割,数据类型转换,条件计算等等,你都应该使用脚本语言来搞定。 var display; var displayHasToBeDisposed=false; var shell=null; try { display=Packages.org.eclipse.swt.widgets.Display.getCurrent(); shell=display.getActiveShell(); } catch(e) { // if it runs in batch mode (Pan or preview mode) no Display is available,so we have to create one display=new Packages.org.eclipse.swt.widgets.Display(); displayHasToBeDisposed=true; shell=new Packages.org.eclipse.swt.widgets.Shell(display); } // if we run in Pan we need to load the properties: if(!Packages.org.pentaho.di.ui.core.PropsUI.isInitialized()) { Packages.org.pentaho.di.ui.core.PropsUI.init(display,2); //2=TYPE_PROPERTIES_PAN } var dateDefaultFrom=DateFromProposal.getString().substr(0,10); //only the date and not the time var dialogDateFrom=new Packages.org.pentaho.di.ui.core.dialog.EnterTextDialog(shell,"Date from","Please enter the beginning date",dateDefaultFrom); var dateFromAsString=dialogDateFrom.open(); if(dateFromAsString!=null && dateFromAsString.length()>0) { var dateDefaultTo=DateToProposal.getString().substr(0,10); //only the date and not the time; var dialogDateTo=new Packages.org.pentaho.di.ui.core.dialog.EnterTextDialog(shell,"Date to","Please enter the ending date",dateDefaultTo); var dateToAsString=dialogDateTo.open(); if(dateToAsString!=null && dateToAsString.length()>0) { // here you could check or change formats a.s.o } else { // stop transformation when user cancels throw new Packages.java.lang.RuntimeException("Input canceled by the user."); } } else { // stop transformation when user cancels throw new Packages.java.lang.RuntimeException("Input canceled by the user."); } if(displayHasToBeDisposed) { display.dispose(); } (编辑:瑞安网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |