kettle 通过java脚本对数据进行标注

9 篇文章 1 订阅

在项目当中遇到一种情况:我需要根据不同字段的值综合判断该数据属于我划分的哪种类型。

如果是单个字段我们可以根据kettle提供的switch / case 组件进行判断并赋值,但是如果通过多个字段或者是添加某种限定条件对数据整体进行处理,该组件的功能不足以支持。这种时候我开始怀念以前用java进行数据清洗,内存崩了的时候。java为我们数据清洗提供了更加广泛的维度,恰巧kettle提供的多种脚本工具当中就有java脚本

 本次转换实现的功能:根据班级编码、班级名称、上课地点、授课教室四个字段综合判断是否排课、是否该排课

本次转换的主要流程:

1、从excel当中获取数据;

2、获取数据处理当天的时间;

3、从excel当中选取需要字段;

4、java脚本对选取字段处理;

5、将处理完的数据插入本地数据库;

 

 

接下来,配置详细图进行流程的演示

0、各种安装、配置环境请看鄙人文章(kettle安装

1、从excel当中获取数据

    该步骤主要是通过转换--->输入--->Excel输入 完成

    Excel输入需要注意的几点

(1)、选择相对应的表格类型(引擎),一般情况下选择Excel 2007 XLSX (Apache POI Streaming)或者Excel 2007 XLSX (Apache POI )即可。

(2)、文件或目录。浏览找到之后,需要点击添加按钮。(此目录可以通过正则表达式对目录下的文件进行筛选)

(3)、工作表需要选取读取的sheet。

(4)、获取字段,并对字段进行相关操作(类型修改、去除空格、格式化、长度、精度)。(此处截图非实际项目截图,参考而已)

2、获取数据处理当天的时间

    部分数据在处理时需要根据具体的时间获取部分数据进行处理,此处我的时间精度为天,因此我采用的组件为:获取系统信息

    

3、从excel当中选取需要字段

    该步骤需要对excel当中的字段进行筛选,只需要筛选出我们需要的字段就可以。选择字段选择(转换—>字段选择)组件即可。该组件可以对字段的长度、类型、名称、格式等进行规范化。具体操作可以在元数据当中自己摸索。本步骤只需要进行选择和删除。

4、java脚本对选取字段处理

     该脚本当中对数据是按照行处理的,很类似easyexcel的处理方式。

     在获取数据时我们主要通过的方法为:get(Fields.In,"列名").getString(r);

     处理完之后对数据进行保存、更新操作的方法为:get(Fields.Out,"列名").setValue(r,处理完之后的字段名);

     在处理过程如果需要引用类,该类属于jdk自带的直接 import 即可。

     如果引用的类为其他jar内,我们将相关jar放到D:\kettle\data-integration\lib路径下即可使用。

    所有的处理内容需要放在 processRow 方法中。

    获取变量和处理之后保存变量的方法如下

//获取变量名
String str = get(Fields.In,"班级名称").getString(r);
String str2 = str ;
//处理完成之后输出结果
get(Fields.Out,"新年级").setValue(r,str2);

5、将处理完的数据插入本地数据库

放入数据库的方法很多,如果不需要查重可以使用组件表输出(输出——>表输出),如果需要查重可以使用组件插入/更新。

使用时注意事项:

(1)、需要链接数据库,需要将制定数据库的驱动文件(jar)放入到D:\kettle\data-integration\lib当中,不然会报错。

(2)、部分表需要增加一些选项,增加读写速度、插入速度、编码格式等。

1. 增加批量写的速度:
              useServerPrepStmts=false    rewriteBatchedStatements=true  
              useCompression=true            
cachePrepStmts = true                    rewriteBatchedStatements = true
           2. 增加读的速度:
              useServerPrepStmts=true      cachePrepStmts=true

参数说明:

1)useCompression=true,压缩数据传输,优化客户端和MySQL服务器之间的通信性能。

2)rewriteBatchedStatements=true  ,开启批量写功能

             这样测试就成功了

(3)、根据表内字段和流内字段的关系设置查重标准。当该数据查重并未查到,则会插入一条新的数据,该数据取决于流入的数据。如果查询到重复数据将会执行(4)当中的更新操作。

(4)、设置更新字段。

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 ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值