使用脚本组件进行数据清理

4.3.1 使用JavaScript代码组件清理数据

实验背景:

JavaScript 代码
· 提供了大量的关于字符串、数字、日期、逻辑、文件和一些特殊功能的函数以供我
们创建自己的脚本。
· 可以在这个步骤编写 JavaScript, 访问 Java 包。但在性能上存在缺陷,因为它需
要解释 JavaScript 代码。
该步骤的配置界面主要分为三个面板:
·  Java script functions :提供可用脚本、函数、输入字段和输出字段的树形视图
·  Java Script :编辑 JavaScript 代码的地方
·  Fields :字段表包含脚本中的变量列表

实验步骤:

(1)转换图

(2)步骤的配置添加”Data Grid”步骤,输入如图所示的图书借阅信息

现有如下要求:
借书时长为一周之内的记录,将其状态标为“OK
借书时长是一周至二周之间的标为“DELAYDE”
借书时长超过二周标为“LATE”
 
新建一个“JavaScript 代码”步骤
双击打开该步骤的配置页面,在目录“Transform Functions/Date Functions/”
找到函数 dateDiff
如果不清楚怎么用这个函数,可以在该步骤左边的树状图中找到该函数,右击该
函数,选择示例”Sample”子菜单,代码编辑界面显示出该函数的用法及使用示
该示例非常简单,只需要使用该函数计算出两个日期相差的周数,然后赋值给一
个状态变量就可以了。
最后在该步骤的“Fields”表格里添加要输出的字段及类型就可以了。
配置完“JavaScript 代码”步骤后,预览“JavaScript 代码”步骤的结果

 

4.3.2 使用正则表达式组件清理数据

(1)转换图

 

(2)步骤的配置

第一步,导入日志文件,将日志文件的每一行读成一条记录。
新建转换 regex_op,添加“文本文件输入(Text file input)”步骤,做如下设置:
文件(File)页面:添加日志文件
内容(Content)页面:选中“Rownum is output”,并设置行号的字段为“LineNo”,
分隔符(Separator)设为“\n”,并将格式(Format)选项设置成“Unix”。
字段(Fields)页面:设置字段名为“Info”,类型为“String”,该字段用来 存储日志文件的每一行记录。

 

第二步,正则匹配。
使用“正则表达式”步骤匹配日志,并提取相关子字符串:
由于这里的正则表达式可能比较复杂,如果写成一行且不加注释可能很难维护。
需要能有一种方式:允许将正则表达式写成多行,并且为每行增加注释。
因此,在“正则表达式”步骤的”Content”页面,选中“Permit whitespace and comments in pattern”, 以允许正则表达式中有空白和注释模式
 
第三步,筛选匹配记录。
使用“过滤记录(Filter rows)”步骤来筛选正则表达式匹配到的记录 只需要设置筛选条件:“result = Y”
 
第四步,输出。
使用“Excel 输出”步骤输出筛选后的结果
选择输出我们关心的字段:“LineNO”、“InfoDate”、“User”、“IP”和“Port”

4.3.3 使用其他脚本组件清理数据

(1)转换图

(2)步骤的配置

1. ”公式”步骤
添加“公式”步骤,打开配置面板
现在添加一条记录,在“Fields”表格里添加一个新的字段”Total”,选择类 型为“Number”。当编辑”Formula“字段时,会打开一个公式编辑窗。
 
在公式编辑窗,可以点击左边面板的某一公式显示其具体说明及样例。
当输入有语法错误时,Kettle 会标红相应位置,并在下方给出错误说明,使得 非常易于使用。
在编辑公式时,如果需要引用输入字段的值,比如“Price”字段,写成“[Price]” 形式。
编 辑 完 成 后 , 点 击 ” OK “ 回 到 ” 公 式 “ 步 骤 的 设 置 界 面 。

 

设 置 完 成 后 , 预 览 “ 公 式 ” 步 骤 , 可 以 看 到 如 图 所 示 的 结 果 。
2. ”用户自定义 Java 表达式”步骤
添加一个”用户自定义 Java 表达式”步骤,从”Data Grid“步骤创建跳到该 步骤,数据发送方式选择”Copy“形式。
打开该步骤的配置面板,会发现它与”公式“步骤的设置十分类似。
如果你有一个形如” C=A+B“这样的表达式,你只需要填写表达式右边的部分” A+B“就可以了。
本示例只需要使用 Java 的 IF 表达式即可。
设置完后,可以预览该步骤,生成的结果与”公式“步骤的结果一致。
3. ”UDJC”步骤(”用户自定义 Java 类“)
这里是”UDJC“步骤的一个配置截图。
红色方框里配置的是该步骤计算完成后输出的字段。
该步骤要求有一定的 Java 基础,示例只是给出了一个简单的示范,在实际应 用中,可以用它来解决很多复杂的问题。

实验总结:

        面对一些复杂的问题的时候,前面讲的清洗步骤就有点无能无力,这时就需要借助 Kettle 提供的脚本组件步骤来解决问题。
        是否使用脚本组件开发?对于 ETL 的开发,我们对脚本是又爱又恨:一方面,希望开发出一个不需要编写任何代码的 ETL 流程,易于后期维护。另一方面,面对复杂问题,不得不用脚本组件步骤。
        随着 Kettle 的不断更新,很多以前需要使用脚本才能实现的功能,现在都变成了可以直接使用的步骤,但是这并不能够满足用户所有的需求,所以脚本步骤总有需要的地方。
        如何抉择:用户在开发速度、运行效率、易于使用、后期维护等多个因素之间权衡。
        本次实验很有收获,不仅复习到了文本文件的输入和相关的配置方法,同时学习了如何利用java 脚本与数据的清理相结合的方式。在实验过程中都遇到了一些小困难,比如第一个实验,要设置好正确的数据类型,转换才能正常启动;第二个实验由于不熟悉“公式”步骤的操作,不断尝试才找到该步骤的正确打开方式和相关公式的使用方法的查看;第三个实验需要完成相关的 java脚本的编写来进行指定数据的输出。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值