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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/457431.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

位运算:进制

4982. 进制 - AcWing题库 给定两个整数 a,b 请你计算,在 [a,b] 范围内有多少个整数满足其二进制表示恰好有一个 0。 不考虑前导 0。 例如,当 a5,b10 时,[5,10]范围内的所有整数及其二进制表示如下: 可以看出,只有 5 和…

阿里云服务器centos_7_9_x64位,3台,搭建k8s集群

目录 1.环境信息 2.搭建过程 2.1 安装Docker源 2.2 安装Docker 2.3 安装kubeadm,kubelet和kubectl 2.4 部署Kubernetes Master(node1) 2.5 安装Pod网络插件(CNI) 2.6 加入Kubernetes Node 2.7 测试kubernetes集群 3.部署 Dashboard…

【Vitis】基于C++函数开发组件的步骤

目录 基本步骤 关键领域 • 硬件接口: 任务级并行度: 存储器架构: 微观级别的最优化: 基本步骤 1. 基于 设计原则 建立算法架构。 2. (C 语言仿真) 利用 C/C 语言测试激励文件验证 C/C 代码的逻辑。…

硬件工程师大师之道-EMC设计与诊断整改笔记1

什么是EMC EMC实质指的是多种用电设备在同一空间里同时工作时能够遵守“和平共处”的“多边主义”所谓你好我好大家好。 EMC包含EMS与EMI两个部分。 EMS: 任何用电设备在工作时都能通过空间合或者通过与其他设备的连接线,接收到四周的电磁波或者干扰电压电流&#…

【JS逆向六】(上)逆向模拟生成某网站的【sig】和【payload】的值 仅供学习

逆向日期:2024.02.07 使用工具:Node.js 加密方法:未知 / md5标准库 文章全程已做去敏处理!!! 【需要做的可联系我】 可使用AES进行解密处理( 直接解密即可):在线AES加解…

2024智慧城市新纪元:引领未来,重塑都市生活

随着科技的飞速发展和数字化转型的不断深入,2024年智慧城市领域迎来了全新的发展格局。 这一年,智慧城市的建设更加注重人性化、可持续性和创新性,为城市居民带来了前所未有的便捷与舒适。以下将重点关注智慧城市的几个核心内容,…

【大数据】Flink on YARN,如何确定 TaskManager 数

Flink on YARN,如何确定 TaskManager 数 1.问题2.并行度(Parallelism)3.任务槽(Task Slot)4.确定 TaskManager 数 1.问题 在 Flink 1.5 Release Notes 中,有这样一段话,直接上截图。 这说明从 …

【DDD】学习笔记-服务资源模型

在软件领域中,使用最频繁的词语之一就是“服务”。在领域驱动设计中,也有领域服务、应用服务之分。通常,一个对象被命名为服务,意味着它具有为客户提供某种业务行为的能力。服务与客户存在一种协作关系,协作的接口可以…

SpringBoot+随机盐值+双重MD5实现加密登录

🏡浩泽学编程:个人主页 🔥 推荐专栏:《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》 🛸学无止境,不骄不躁,知行合一 文章目录 前言一、salt…

【数据结构】二叉树的顺序结构及实现(堆)

1.二叉树的顺序结构 普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结 构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统 虚拟进程地址空间中的堆是两…

前端实现标题滚动点击导航

效果图 右边滚动的html代码 <div class"right-box"><el-tabs v-model"isScrollNow" tab-position"right" class"updateTab" tab-click"scrollTo"style"height: fit-content;"><el-tab-pane label…

STM32 硬件随机数发生器(RNG)

STM32 硬件随机数发生器 文章目录 STM32 硬件随机数发生器前言第1章 随机数发生器简介1.1 RNG主要特性1.2.RNG应用 第2章 RNG原理框图第3章 RNG相关寄存器3.1 RNG 控制寄存器 (RNG_CR)3.2 RNG 状态寄存器 (RNG_SR)3.3 RNG 数据寄存器 (RNG_DR) 第3章 RNG代码部分第4章 STM32F1 …