kettle spoon创建带参数定时任务并关闭它

2024-02-07 12:28

本文主要是介绍kettle spoon创建带参数定时任务并关闭它,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • ETL是什么
    • 下载安装kettle和mysql8
      • 资源下载
    • 数据库连接方式
      • 已定义的数据库类型进行连接
      • Generic Database方式连接
      • JNDI方式
    • 运行方式
    • 使用案例教程
      • 定时job执行增量插入转换
        • 新建转换
        • 新建定时任务job
        • 关闭定时任务job
    • 命令行运行定时任务job
      • 命令行执行任务
      • 后台运行脚本文件
      • 设置系统变量和获取系统变量
        • 获取系统变量
        • 设置带参数的转换任务
    • 参考文章

ETL是什么

ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库;

通俗讲:将数据从一种存储介质或者格式转换为另一种存储介质或者格式的过程;

下载安装kettle和mysql8

两种下载方式

  • 官网下载kettle,需要在官网填写注册信息,下载的会是最新版本的kettle,2021.3.19日官网最新9.1版本。官网地址
  • 百度搜索下载kettle的地址,可能版本不是最新。下载kettle地址。最新版本8.2。

安装步骤

Kettle是纯Java编写的ETL开源工具,目前Kettle7和Kettle8都需要Java8或者以上才能正常运行。所以开运行Kettle前先检查Java环境是否正确配置,Java版本是否是8或者以上。

  • Kettle可在linux、windows上安装,本文基于windows安装
  • 直接解压缩到指定目录下,双击Spoon.bat运行
  • 如果需要连接数据库。下载连接指定数据库需要的jar文件。直接搜索下载即可。比如连接oracle数据库,搜索下载 java连接oracle的jar包,数据库官网一般都有的下载。

资源下载

kettle的安装与连接mysql(包含mysql8)简单使用,
kettle安装下载地址:
官网地址:
https://community.hitachivantara.com/s/article/data-integration-kettle

下载地址:
https://sourceforge.net/projects/pentaho/files/

  • 下载mysql8.0的jar驱动
    https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.19

  • 将下载好的mysql的驱动放到kettle安装文件中的lib下面,然后重启Spoon

使用kettle之前要确保jdk安装配置环境变量完成。

新版本的可以支持mysql8了,但是我这里是服务器上已经有7.0的版本了默认只支持mysql8以下的版本驱动,主要是驱动名称无法手动修改,因此需要mysql8只能通过其他方式;
这里主要使用通用数据库方式和JNDI方式;个人推荐第一种

数据库连接方式

除了系统已经提供的数据库类型选择进行数据库连接外,通常有些数据库没有已有定义,但是系统提供了通用连接可以创建未曾加入的数据库类型。

已定义的数据库类型进行连接

已经定义的数据库类型是已经默认设置了驱动名称的,只需要手动输入数据库地址和账号密码即可。但是如果是低版本的,mysql数据库只支持mysql7以下的(包括mysql7),不支持mysql8。这里就不适用已定义的数据库类型了,需要选择其他方式创建连接。
在这里插入图片描述

Generic Database方式连接

  • 创建kettle数据库连接
    数据库类型选择Generic Database

注意:
驱动这里填写mysql8的版本是:com.mysql.jdbc.Driver
在这里插入图片描述

JNDI方式

这钟方式我没有连接成功,配置还是明文方式不太建议
参考原文
https://www.cnblogs.com/sakura–/p/11443491.html

运行方式

名称功能
Spoon.bat / spoon.sh(重点)通过图形接口,允许你通过图形界面来设计 ETL 转换过程(Transformation)
Pan.bat / pan.sh运行转换的命令行工具-命令行模式运行
Kitchen.bat / kitchen.sh运行作业的命令行工具-命令行模式运行
Carte.bat / Carte.shCarte是一个轻量级别的 Web 容器,用于建立专用、远程的 ETL Server

大多数我们都是使用GUI界面图标先执行一遍,没问题之后会使用命令行模式做定时任务执行

使用案例教程

已经有其他博主写了详细的使用案例教程
https://www.jianshu.com/nb/19605161

插入
插入更新:https://www.jianshu.com/p/720529e627c0

执行成功发送邮件:https://blog.csdn.net/qq_42025798/article/details/127263507

高级-自定义插件
https://blog.csdn.net/u013468915/category_8043286.html

定时job执行增量插入转换

这里以mysql为例,创建一个表log,复制该表为log_1
给log插入N条数据;
目的是从log表中获取增量数据插入到log_1表中

  • 先创建转换任务
  • 再创建定时任务job
新建转换
  1. 新建-转换:输入选择-表输入
    数据库连接选择前面创建的数据库连接;
    在这里插入图片描述
    SELECT * FROM log limit 5//这里模拟5条每次

  2. 新建输出:目标表直接填写log_1的表名
    在这里插入图片描述

  3. shift+连接,ctrl+s保存文件
    在这里插入图片描述

4.测试点击下面的在这里插入图片描述箭头运行:运行完成没有报红色异常,则可以看到log_1表中有五条数据了
在这里插入图片描述

新建定时任务job
  1. 新建-作业(J): 添加通用-START组件,配置调度为重复时间间隔为5分钟一次=每5分钟执行一次
    在这里插入图片描述
    还可以下拉选择按天重复执行;按天则天数可以编辑,否则就是按可编辑的时间重复

  2. 添加通用-转换:选择上一步创建的增量任务文件
    在这里插入图片描述

  3. shift+连线:保存job到本地
    在这里插入图片描述

  4. 点击箭头执行,它会不停的5分钟一次执行,查看执行结果,绿色START开始-黑色START结束
    在这里插入图片描述

关闭定时任务job

一旦启动它会一直再进程中运行,如果要关闭只能在进程中选择右键-结束进程来关闭它
这里带来一个问题就是,我无法从进程中判断它是哪个java项目的进程(因为开的java服务比较多),因此还是推荐有窗体的更直观,除非服务很稳定之后不需要再关闭了

在这里插入图片描述

命令行运行定时任务job

前面我们介绍了 Kettle的Spoon的转换和作业定时任务GUI设计方式以及运行,但是在实际应用中,我们需要计划任务是在服务器后台运行。

首先我们需要了解Kettle的Kitchen和Pan

  • Kitchen——作业(job)执行器 (命令行方式)
  • Pan——转换(trasform)执行器 (命令行方式)

重点讲解经常会用到的 ***作业执行器 Kitchen.bat *** 。参数项使用 /rep:参数值 或者 -rep=参数值 这两种方式都可以。

Kitchen 参数说明:
-rep:Repository name 任务包所在存储名
-user:Repository username 执行人
-pass:Repository password 执行人密码
-job:The name of the job to launch 任务包名称
-dir:The directory (don''t forget the leading / or )
-file:The filename (Job XML) to launch
-level:The logging level (Basic, Detailed, Debug, Rowlevel, Error, Nothing) 指定日志级别
-log:The logging file to write to 指定日志文件
-listdir:List the directories in the repository 列出指定存储中的目录结构。
-listjobs:List the jobs in the specified directory 列出指定目录下的所有任务
-listrep:List the defined repositories 列出所有的存储
-norep:Don''t log into the repository 不写日志 

命令行执行任务

Windows编写Bat脚本文件
1、新建一个bat文件,命名job.bat,然后编辑,输入内容如下:

:: Kitchen.bat所在路径盘符
d:  
:: Kitchen.bat所在目录
set ROOT_DIR=D:\workspace\IDE\kettle
cd %ROOT_DIR%:: 作业(job)文件路径和日志文件路径
:: 执行kitchen执行job,并写入日志
kitchen /file:%ROOT_DIR%\spd-job.kjb /level:Base>>%ROOT_DIR%\logs\test.log

双击运行,可以看到我们之前被清空的log_1中有数据进来了

注意:确保路径的正确性。windows bat文件中注释符为:: 使用notebook编辑时,记得编码改为ANSI编码,否则会乱码。

后台运行脚本文件

我们已经建立了命令行运行的bat文件,并且已经可以正确执行我们的ETL任务了,但是现在我们在运行bat后,桌面上面会一直存在一个控制台的黑窗口,我们可以使用bat命令中的隐藏窗口的命令。

在上面的脚本文件头部加入如下内容即可

@echo offif "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
:begin:: Kitchen.bat所在路径盘符
d:  
:: Kitchen.bat所在目录
set ROOT_DIR=D:\workspace\IDE\kettle
cd %ROOT_DIR%:: 作业(job)文件路径和日志文件路径
:: 执行kitchen执行job,并写入日志
kitchen /file:%ROOT_DIR%\spd-job.kjb /level:Base>>%ROOT_DIR%\logs\test.log

启动后可以看到是没有黑色的命令行窗体的,但是进程中有个Java进程在运行
在这里插入图片描述

设置系统变量和获取系统变量

如果我们要查询的是前一天的数据,比如 jf_dattime = ‘2024-01-02’,这个日期每次运行的时候都是变化的,怎么设置变参;
获取参数方式

  • 或许系统参数,可选项比较少基本都是日期类型而且不一定符合比如yyyy-mm-dd就没有这种格式,而且不支持格式转换
  • 使用脚本设置变量获取,支持java,javaScript脚本
获取系统变量

在作业中创建-输入-获取系统信息,设置为获取昨天
在这里插入图片描述

同时加入如下组件,这里设置变量是从javascript中获取的day值给系统变量day;

在这里插入图片描述

脚本:

Date.prototype.Format = function (fmt) { //author: meizz var o = {"M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "h+": this.getHours(), //小时 "m+": this.getMinutes(), //分 "s+": this.getSeconds(), //秒 "q+": Math.floor((this.getMonth() + 3) / 3), //季度 "S": this.getMilliseconds() //毫秒 };if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));for (var k in o)if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));return fmt;
}
//前一天的时间
var dtNew=new Date(new Date().getTime()-1*24*60*60*1000).Format("yyyy-MM-dd");

从js中获取的dtNew值重命名为本地变量day,为的是下一步赋值给系统变量day;为了少走弯路我这里没注意有没有什么要重命名;先这样
在这里插入图片描述

最后添加获取变量主要是为了展示当前的系统变量值是多少
在这里插入图片描述

运行看结果:可以看到这里的值既不是系统变量中获取的0000结尾的格式也不是默认值111,说明获取正确
在这里插入图片描述

设置带参数的转换任务

修改转换任务输入的sql脚本如下,可以看到day是参数模式,需要勾选下面的替换sql变量选项;

SELECT * FROM his_qnz_jf_log WHERE  DATE_FORMAT(Jfsj,'%Y-%m-%d') ='${day}'

在这里插入图片描述

接着把上面一步中设置环境变量和或许环境变量的图直接拷贝过来如下图;
在这里插入图片描述

运行结果可以看到把昨天日期的数量导入到log_1表中了,如果中间day的结果不是yyyy-mm-dd格式,这个个sql都查不到数据,log_1也会没有数据;

而job中不需要设置参数,保存仍然可以自己跑就行了;当然还有一些情况是job中需要携带 配置信息的,这种;目前没用到资料我就不找了。

参考文章

命令行运行kettle任务:https://blog.csdn.net/qq_22310551/article/details/115163517
获取系统变量和js设置系统变量脚本: https://blog.csdn.net/m0_69235938/article/details/127528576

这篇关于kettle spoon创建带参数定时任务并关闭它的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/687729

相关文章

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Python Flask实现定时任务的不同方法详解

《PythonFlask实现定时任务的不同方法详解》在Flask中实现定时任务,最常用的方法是使用APScheduler库,本文将提供一个完整的解决方案,有需要的小伙伴可以跟随小编一起学习一下... 目录完js整实现方案代码解释1. 依赖安装2. 核心组件3. 任务类型4. 任务管理5. 持久化存储生产环境