1、使用命名参数、全局变量

  • 在.kettle/kettle.properties中可以定义全局变量,在转换中可以定义命名参数和位置参数,如果需要在转换的步骤设计中使用变量,可以通过${param_name}或者%%param_name%%的形式来获取值。(目前只在表输入的sql中使用成功,而且如果作为select和from之间的变量,需要放到双引号“”之间)
  • 在自定义插件的步骤中,可以通过BeseStep的getVariable(param_name)来获取值。

2、通过命令行运行转换或者任务

trans:    

windows: pan /rep etl /user admin /pass admin /trans transName,如果是ktr文件则使用/file参数

linux:./pan.sh /rep etl /user admin /pass admin /trans transName

job:

Linux: ./kitchen.sh-file:job.kjb -param:files.dir=/opt/files -param:max.date=2010-06-02 

Windows: Kitchen.bat -file:job.kjb “-param:files.dir=/opt/files”“-param:max-date=2010-06-02″

    关于传参数:

  • 在windows下需要使用双引号包含起来,比如:"/param:name=abc″或者/param:"name=abc″,否则不生效,这种方式传入的参数会替换job或者转换中定义的参数默认值
  • job上定义的命名参数可以传到子job或者转换中,如果是命令行运行job,命名参数(或者变量)必须至少在job的属性中定义才能有效
  • 通过命令行运行job:通过命名参数${paramName}方式,以及Java和js的getVariable("paramName")方式获取命名参数值时,转换中的同名参数默认值会覆盖父job中同名参数的默认值
  • 通过Kettle的UI桌面端运行job:通过命名参数${paramName}方式,以及Java和js的getVariable("paramName")方式获取命名参数值时,job中中的同名参数默认值会覆盖子转换中同名参数的默认值

3、【插件开发】Kettle数据类型及其java对象的映射关系

  •      * Number==1
  •      * String==2
  •      * Date==3
  •      * Boolean==4
  •      * Integer==5
  •      * BigNumber==6
  •      * Binary==8
  •      * Timestamp==9
  •      * Internet Address==10

4、关于windows下bigdata组件的配置文件路径问题

    如果在windows下的kettle中使用bigdata组件(比如hbase)时需要填写配置文件路径,则需要在具体文件路径的前面加上file:///,否则会报“java.net.UnknownHostException: E(具体盘符)”的错误,比如:

    file:///E:/Kettle/data-integration6.1/plugins/pentaho-big-data-plugin/hadoop-configurations/cdh55/hbase-site.xml

5、kettle操作hive

  •     首先必须启动HiveServer2服务。
  •     可以通过表输入输出插件来操作,如果用了Impala映射Hive,则可以用impala来做。
  •     表输入输出时,连接类型选择Hadoop Hive 2
  • 用户名需要是hdfs上hive仓库目录所有者权限的用户,密码可以不填

6、kettle的json解析插件使用

    kettle解析json使用的jsonpath语法,具体可以参考jsonpath官方介绍

  • 如果json字段不完整,可以用多个json插件来分别解析,这样不会因为不完整而出错
  • 如果解析数组,使用$.result[*]的形式

7、连接Oracle

连接Oracle时,如果是SID,则数据库的地方填写dbName即可;如果是ServiceName模式,则数据库的地方填写:/dbName(对于4.x版本kettle,可能ip前面也要加上两个斜杠//)。不然可能报如下类似的错误:

ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connection descriptor 

8、Kettle Java API调用无法加载 Karaf 类插件的问题

对于bigdata类,MongoDB类插件,Json解析类插件无法正常加载的问题,可以尝试:

在KettleEnvironment.init();之后,添加插件注册代码:

// 注册原生类型和各个所需的插件
PluginRegistry.addPluginType(RowDistributionPluginType.getInstance());			
PluginRegistry.addPluginType(LogTablePluginType.getInstance());	        
PluginRegistry.addPluginType(CartePluginType.getInstance());
PluginRegistry.addPluginType(CompressionPluginType.getInstance());
PluginRegistry.addPluginType(AuthenticationProviderPluginType.getInstance());
PluginRegistry.addPluginType(AuthenticationConsumerPluginType.getInstance());			
PluginRegistry.addPluginType(StepPluginType.getInstance());
PluginRegistry.addPluginType(PartitionerPluginType.getInstance());
PluginRegistry.addPluginType(JobEntryPluginType.getInstance());
PluginRegistry.addPluginType(RepositoryPluginType.getInstance());
PluginRegistry.addPluginType(DatabasePluginType.getInstance());
PluginRegistry.addPluginType(LifecyclePluginType.getInstance());
PluginRegistry.addPluginType(KettleLifecyclePluginType.getInstance());
PluginRegistry.addPluginType(ImportRulePluginType.getInstance());
PluginRegistry.init();
StepPluginType.getInstance().getPluginFolders().add(new PluginFolder("/home/kettle8.0/data-integration/plugins/kettle-json-plugin",false,true));

// 初始化读取的变量列表。
KettleVariablesList.init();
// 初始化生命周期监听器
initLifecycleListeners();
initialized = true;

9、javamail发送邮件附件中文乱码的解决方案

修改spoon.bat,在 set OPT=xxx 这一行末尾添加如下内容:

"-Dmail.mime.encodefilename=true" "-Dmail.mime.charset=UTF-8" "-Dfile.encoding=UTF-8"