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

相关文章

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时