KETTLE-作业-条件组件
条件组件
Shell

- 执行shell脚本,日志可输出控制台或日志文件
- Insert script为不执行脚本文件,可以在Script区编写shell脚本内容
- Script file name为选择要执行脚本文件,$ {Internal.Job.Filename.Directory} 为当前作业的目录,默认:${user.dir}为data-integration安装目录
- Logging settings为定义日志文件,在${user.dir}生成日志文件,Append logfile?为日志追加,Extension of logfile为文件类型后缀(推荐.log/.txt)
- Copy previous results to args?为与转换的 Copy rows to result组件配合使用,将复制的result作为参数传递到shell
- Execute for every input row?为上个步骤返回多条流数据,每一行都执行一次shell脚本,且将这一行的数据作为参数传递
- Fields为传递到shell脚本的参数,window(%1、%2),linux($1、$2)
JavaScript
支持使用java类以及方法,如equals
变量用var声明
| 语法 | 描述 |
|---|---|
| parent_job | 当前作业,对应 org.pentaho.di.job.Job类 |
| new Number(var) | 数据类型转换 |
| parent_job.getVariable(var)、${var} | 获取变量 |
| parent_job.setVariable(var,value) | 设置变量 |
| true、false | 对应成功返回、失败返回 |
| is_windows | 是否为Window系统(boolean) |
| previous_result.getResult() | 上一个作业组件的执行结果状态(boolean,true:成功,false:失败) |
| previous_result.getExitStatus()、exit_status | 获取最近一个shell组件的执行结果状态(int,0:成功,1:失败) |
| previous_result.getEntryNr() 、nr | 获取前面组件总数(不包含某些组件:write to log等辅助性组件),发现在shell组件之前获取,总是返回0,在之后能正常获取到(int) |
| previous_result.getNrErrors()、errors | 获取上一个 作业组件返回的异常数,连线必须为异常连线;如果不连异常线而是成功线,可在write to log组件使用${nrErros}获取异常数(long) |
| previous_result.getRows() | 获取上一个转换组件的结果行,该转换需使用Copy rows to result组件(对应java类 RowMetaAndData,通过row[index].getString(key,normalValue)来获取属性值) |
| previous_result.isStopped() | 获取上一作业组件是否停止(boolean) |
| previous_result.getLogChannelId() | 获取上一个作业组件的日志通道ID,可以使用它来查找日志通道日志表中的具体信息,需要作业和转换配置日志记录功能(string) |
| previous_result.getLogText() | 获取上一个作业组件及其子子孙孙组件的日志文本,仅仅包含组件输出的信息(string) |
| previous_result.getResultFilesList() | 获取在此之前所有组件中使用的所有文件的列表(对应java类ResultFile) |
| lines_input、previous_result.getNrLinesInput() | 从数据库或文件读取的行数(long),实际无效 |
| lines_output、previous_result.getNrLinesOutput() | 写入数据库或文件的行数(long),实际无效 |
| lines_read、previous_result.getNrLinesRead() | 从上一个转换步骤读取的行数(long),实际无效 |
| lines_updated、previous_result.getNrLinesUpdated() | 数据库表中更新的行数(long),实际无效 |
| lines_written、previous_result.getNrLinesWritten() | 写入下一个转换步骤的行数(long),实际无效 |
| previous_result.getNrLinesDeleted()、lines_deleted | 数据库表中删除的行数(long),实际无效 |
| previous_result.getNrLinesRejected() | 拒绝的行数并通过错误处理传递给另一个步骤(long),实际无效 |
| files_retrieved、previous_result.getNrFilesRetrieved() | 从FTP服务器检索的文件数(int),待测试 |
遗留
- JavaScript组件中获取数据库、文件操作行数,测试不出效果,问题解决思路
本文深入探讨了Kettle作业中Shell组件与JavaScript组件的功能与应用。Shell组件允许执行shell脚本,并灵活控制日志输出。JavaScript组件则支持使用Java类及方法,进行变量操作与数据类型转换,实现作业的动态控制。文章详细介绍了各组件的参数设置、执行逻辑与数据交互方式,为Kettle作业的复杂场景提供了实用指南。

1454

被折叠的 条评论
为什么被折叠?



