kettle笔记-java脚本的使用


title: kettle笔记-java脚本的使用
tags: 新建,模板,小书匠
renderNumberedHeading: true
grammar_cjkRuby: true

java脚本

使用kettle进行ETL过程中不能避免一些复杂类型数据的处理,如json解析,数据转换...,这些kettle中也存在一些相应的组件可以使用,但是作为开发人员,最相信的还是自己编写的代码。所以这里简单的使用java脚本进行简单的处理一些数据,给读者提供一个思路。有什么建议和问题欢迎留言。

例子

  • 创建一个转换

  • 使用java脚本创建一个json格式的数据
    N4VugnZH-1612358437417)(./images/1612323199621.png)]

  • 要点

    • 开发过程中技巧:将逻辑代码放在自己的IDE中开发完成后复制到脚本组件中
    • Main 主程序下面是去除多余注释的代码片段
      public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
      	  if (first) {
      		first = false;
      	  }
            //获取行数据
      	  Object[] r = getRow();
      
      	  if (r == null) {
      		setOutputDone();
      		return false;
      	  }
      
      
      	  r = createOutputRow(r, data.outputRowMeta.size());
      
            //将处理后的数据重新放回行数据中
      	  putRow(data.outputRowMeta, r);
      
      	  return true;
      }
      
      
    • 脚本右侧的类与代码片段
      • 类就是正在编写的脚本
      • 代码片段Common use(常用)
        • Main主程序
        • getVariable 获取线程中变量
      • Step logging 打印日志
        • 不同的日志级别
      • input field 输入字段
      • out field 输出字段
  • 实例:
    在这里插入图片描述

  • 生成json

       import com.alibaba.fastjson.JSON;
       import com.alibaba.fastjson.JSONObject;
    
       public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
       	  if (first) {
       		first = false;
       	  }
    
       	  Object[] r = getRow();
    
       	  if (r == null) {
       		setOutputDone();
       		return false;
       	  }
       	   String sex = getVariable("sex","");
       	   logBasic(sex);
       	   String json = "{\"name\":\"kettle\", \"age\":16}";
       	   JSONObject jsonObject = JSON.parseObject(json);
       	   jsonObject.put("sex",sex);   
       	   logBasic(jsonObject.getString("sex"));
    
       	  r = createOutputRow(r, data.outputRowMeta.size());
    
       	  logBasic(jsonObject.toJSONString());
       	  get(Fields.Out, "json").setValue(r, jsonObject.toJSONString());
       	  putRow(data.outputRowMeta, r);
    
       	  return true;
       }
    
    
  • 打印json

      public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
      	  if (first) {
      		first = false;
      	  }
    
      	  Object[] r = getRow();
      	  if (r == null) {
      		logBasic("_____________");
      		setOutputDone();
      		return false;
      	  }
    
      	  r = createOutputRow(r, data.outputRowMeta.size());
    
      	  String json = get(Fields.In, "js").getString(r);
    
      	  logBasic("_____________"+json);
    
      	  putRow(data.outputRowMeta, r);
    
    
      	  return true;
      }
    
    
  • 日志

2021/02/03 21:08:34 - Spoon - Running transformation using the Kettle execution engine
2021/02/03 21:08:34 - Spoon - 转换已经打开.
2021/02/03 21:08:34 - Spoon - 正在打开转换 [java-dome]...
2021/02/03 21:08:34 - Spoon - 开始执行转换.
2021/02/03 21:08:34 - java-dome - 为了转换解除补丁开始  [java-dome]
2021/02/03 21:08:34 - 设置变量.0 - We didn't receive a row while setting the default values.
2021/02/03 21:08:34 - 设置变量.0 - Set variable sex to value []
2021/02/03 21:08:34 - 设置变量.0 - Finished after 0 rows.
2021/02/03 21:08:34 - Excel输入.0 - 完成处理 (I=1, O=0, R=0, W=1, U=0, E=0)
2021/02/03 21:08:34 - 生成json.0 - 男
2021/02/03 21:08:34 - 生成json.0 - 男
2021/02/03 21:08:34 - 生成json.0 - {"sex":"男","name":"kettle","age":16}
2021/02/03 21:08:34 - 打印json.0 - _____________{"sex":"男","name":"kettle","age":16}
2021/02/03 21:08:34 - 生成json.0 - 完成处理 (I=0, O=0, R=1, W=1, U=0, E=0)
2021/02/03 21:08:34 - 字段选择.0 - 完成处理 (I=0, O=0, R=1, W=1, U=0, E=0)
2021/02/03 21:08:34 - 打印json.0 - _____________
2021/02/03 21:08:34 - 打印json.0 - 完成处理 (I=0, O=0, R=1, W=1, U=0, E=0)
2021/02/03 21:08:34 - 空操作 (什么也不做).0 - 完成处理 (I=0, O=0, R=1, W=1, U=0, E=0)
2021/02/03 21:08:34 - Spoon - 转换完成!!
  • 逻辑代码可以在IDE中开发
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ou17qmS-1612358437420)(./images/1612358041484.png)]

  • fastjson的引入
    将fastjson jar复制在安装目录的lib目录下,重启软件

    注意:

    java脚本只能用来处理行数据

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Kettle是一款国外开源的ETL工具,它可以通过使用Java脚本来完成对数据流的操作。Java脚本使用Java语言编写的代码,内置了许多可以直接使用的函数。在Kettle中,Java脚本的主程序入口是processRow()函数,它类似于Java中的main方法,用于处理数据流。Kettle中有两种脚本文件,分别是transformation和job。transformation用于完成针对数据的基础转换,而job则用于完成整个工作流的控制。因此,你可以在Kettle使用Java脚本来实现各种数据操作和转换。\[1\]\[2\] #### 引用[.reference_title] - *1* [Kettle8.2脚本组件之Java脚本](https://blog.csdn.net/sujiangming/article/details/115843390)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [JAVA调用Kettle脚本](https://blog.csdn.net/BUGdeQD/article/details/117733258)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [kettleJAVA脚本使用](https://blog.csdn.net/fsp88927/article/details/24380299)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值