首页 > 其他分享 >Kettle

Kettle

时间:2024-09-14 16:27:20浏览次数:10  
标签:转换 Kettle Excel 表中 组件 执行

一、Kettle简介

Kettle(又名:Pentaho Data Integration)是一款国外开源的ETL工具。

  • Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。
  • kettle 是纯 java 开发,开源的 ETL工具,用于数据库间的数据迁移 。可以在 Linux、Windows、Unix 中运行。有图形界面,也有命令脚本,还可以二次开发。

Kettle_SQL

二、环境搭建

2.1.安装 java jdk 环境

  • 环境变量:JAVA_HOME
  • 环境变量:PATH
  • 验证:打开 cmd,执行 java –version

参考网址:

2.2.解压 Kettle 软件

  • windows:spoon.bat(双击)
  • mac/linux:spoon.sh
  • cd 解压目录下
  • ./spoon.sh

Kettle_SQL_02

三、Kettle数据转换

3.1.Kettle 的基本开发步骤

基本步骤:

①.新建转换

②.构建Kettle的数据流图

  • 数据从哪来(Extract)?
  • 经过什么处理(Transform)?
  • 最终数据到哪去(Load)?

③.配置数据流图中的各个组件

  • Kettle内置各种组件

④.保存并启动执行

Kettle_数据_03

3.2.Txt转Excel

3.2.1.需求说明

需求:将 user.txt 文件的数据抽取转换输出到 user_by_kettle.xls 文件。

Kettle_SQL_04

在Kettle中将 user.txt 文件的数据抽取转换输出到 user_by_kettle.xls 文件中:

Kettle_数据_05

关键要点:

①.文本文件输入组件

  • 配置输入的 user.txt 文件:注意分隔符的设置

②.Excel输出组件

  • 配置输出的 user_by_kettle.xls 文件

3.2.2.Kettle实现

创建Kettle数据流图:
  • 输入:找到文本文件输入
  • 输出:Excel输出
  • 连接:shift 键 + 鼠标拖动

Kettle_数据_06

文本文件输入组件配置

①.添加需要转换的文件

Kettle_数据_07

②.指定多列之间的分隔符和编码格式

Kettle_SQL_08

 ③.点击获取字段,即可查看数据

Kettle_SQL_09

Excel输出组件配置

指定Excel数据组件文件

Kettle_SQL_10

获取指定,可以指定输出的字段类型

Kettle_数据流图_11

保存当前转换,并启动执行

Kettle_SQL_12

Kettle_数据流图_13

Kettle_数据流图_14

3.3.Excel转MySQL

3.3.1.需求

需求:将 users.xls 文件中的数据,抽取转换输出到 MySQL 的 tb_user 表中。

 

Kettle_数据流图_15

3.3.2.Kettle实现

①.先需要创建mysql数据库kettle_demo用于存储表格:

drop database if exists kettle_demo;
create database if not exists kettle_demo charset=utf8;

②.kettle中的lib目录中加入mysql的jar文件

  • 将资料中的 MySQL jdbc 驱动包mysql-connector-java-5.1.41-bin.jar、mysql-connector-java-8.0.16.jar 放置到 data-integration/lib 中
  • 找到 data-integration\simple-jndi\jdbc.properties 文件编辑,在末尾加上连接信息(见PPT备注信息)
  • 注意:配置之后,kettle软件一定要重新启动!!!

③.创建Excel输入和输出

Kettle_SQL_16

④.配置输入组件

Kettle_数据流图_17

选择需要转换的sheet

Kettle_数据流图_18

获取字段信息,调整字段类型和格式

Kettle_SQL_19

⑤.配置表输出

Kettle_数据流图_20

创建数据库连接:

Kettle_数据_21

保存后,点击SQL修改字段类型,然后执行SQL语句创建表

Kettle_数据流图_22

⑤.保存,执行转换操作

Kettle_SQL_23

执行会发现,报错了,这是因为id字段设置为int类型,长度只能为11,而数据超出字段长度:

Kettle_SQL_24

要解决这个问题,只需要修改表中id字段的类型和长度

Kettle_数据流图_25

在此执行转换,发现已经成功:

Kettle_数据流图_26

3.4.MySQL表间转换

需求:将 tb_user 表中的数据,抽取转换输出到 tb_user1 表中

Kettle_数据_27

①.共享数据连接,共享数据连接后,就不用每次都创建新的数据连接了

Kettle_数据流图_28

②.创建数据流图

Kettle_数据_29

③.配置表输入组件

Kettle_数据流图_30

④.预览数据如下:

Kettle_数据流图_31

⑤.配置表输出组件

Kettle_数据流图_32

⑥.执行SQL创建表

Kettle_数据_33

⑦.保存配置,并执行:

Kettle_数据流图_34

四、常见组件使用

Kettle中有很多常见组件,本小节主要介绍几个常用的组件:

  • 插入-更新组件
  • switch-case组件
  • SQL脚本组件

4.1.插入-更新组件

Kettle(Pentaho Data Integration,PDI)中,插入-更新组件(Insert/Update)用于实现对数据库的插入更新操作,具体是根据特定的条件来判断是向数据库表中插入新记录,还是更新已有的记录(保证两种表的数据一致性)。这个组件通常用于在ETL(Extract, Transform, Load)流程中处理数据库的数据同步。

4.1.1.需求说明

示例需求:将 tb_user 表中的更新/新增的数据,抽取更新/新增到 tb_user1 表中

Kettle_SQL_35

4.1.2.插入更新和表到表的区别

插入更新和表到表区别

  • t_user_to_t_user1 : 只进行全量追加.
  • 插入更新 : 对比关键字段,更新所有数据. (不会删除)

4.1.3.案例实现

①.创建数据流图

Kettle_数据_36

②.配置表输入组件

Kettle_数据流图_37

③.配置插入更新组件,需要指定目标表(需要先创建)

Kettle_数据_38

④.执行SQL创建表

Kettle_数据流图_39

⑤.保存并运行,会发现能同步数据到tb_user1中了,但是由于t_user表中中张三数据有两条,ID相同,所以只显示了一条

Kettle_SQL_40

修改t_user表中李四的age字段修改为26,然后执行转换,发现数据t_user1中李四的age被修改为了26

Kettle_数据流图_41

4.2.switch/case组件

4.2.1.需求说明

需求:将 tb_user 表中的数据,抽取并按照性别输入到 3 个不同的 Excel 文件中

Kettle_数据_42

效果如下:

Kettle_数据_43

4.2.2.实现

①.创建数据流图

Kettle_数据流图_44

②.新建后,男和女Excel输出选择,create a new target case for this step(为此步骤创建一个新的目标案例),而其他Excel则输出选择The default target step

Kettle_数据流图_45

③.配置表输入组件

Kettle_SQL_46

④.配置switch组件

Kettle_SQL_47

⑤.配置excel输出组件

  • Excel输出-男

Kettle_SQL_48

Kettle_SQL_49

  • Excel输出-女

Kettle_SQL_50

Kettle_数据流图_51

  • Excel输出-其他

Kettle_SQL_52

Kettle_数据流图_53

⑥.取消数据库连接设置中取消勾选Supports the timestamp data type,用于支持timestamp 类型

Kettle_数据流图_54

⑦.保存并执行转换,查看生成的Excel

Kettle_数据流图_55

4.3.SQL脚本组件

SQL 脚本组件 是一种用于执行 SQL 查询的工具,通常用于以下用途:

  • 从多个数据源中提取数据。
  • 在数据转换前清理或预处理数据库中的数据。
  • 将转换后的数据加载回数据库。
  • 对数据表执行批量更新或删除操作。

4.3.1.需求说明

需求:使用Kettle执行SQL脚本,将 t_user1 表中的数据清空

Kettle_数据_56

4.3.2.Kettle的SQL脚本

①.创建数据流图

Kettle_数据流图_57

②.配置SQL组件

Kettle_SQL_58

③.保存并执行,会发现t_user1表中的数据已经被清除掉了

Kettle_数据_59

五、转换参数设置

5.1.需求

需求:使用Kettle执行SQL脚本删除 tb_user1 表中指定省份的用户,启动时可以指定具体省份

Kettle_SQL_60

关键要点:

  • 配置 Kettle 转换参数
  • 双击转换文件空白处,在弹出的窗口选择命名参数,进行设置即可,参数在这个转换的组件中可以被使用。
  • 组件中使用参数的语法:${参数名}
  • 执行SQL脚本组件
  • 配置执行的 SQL 语句,使用转换参数

5.2.详细设置

①.配置转换参数

Kettle_数据_61

Kettle_SQL_62

②.配置sql组件: 转换参数使用格式 **${参数名}**

Kettle_数据_63

③.保存并执行(执行时需要设置参数值)

Kettle_数据_64

④.执行会发现北京市的数据被删除了

Kettle_数据_65

六、作业(job)开发

"作业(Job)" 是一种控制流程的机制,主要用于管理和调度一系列步骤和任务的执行顺序。它与"转换(Transformation)"不同,后者专注于具体的数据处理,而"作业"则更加侧重于流程控制和任务调度。

6.1.现实问题

问题:如果kettle的转换,需要定期执行该怎么办?

Kettle_数据流图_66

注意:利用之前创建的Excel输出到表的转换设置定时执行

作业(job)的作用,就是可以把多个转换组合起来,并且可以根据需要设置定时周期性执行。

6.2.实现

创建数据流图,配置转换(加载之前的的Excel输出到表的转换)

Kettle_数据流图_67

设置定时策略

Kettle_SQL_68

保存并启动,会发现这个定时任务一直在执行,每隔5s钟就会执行一个转换

Kettle_数据_69

表中的数据在不断地增加

Kettle_数据_70

七、email邮箱服务

在我们上个章节中通过通过“作业”实现了定时任务将Excel表中数据添加到表中,可以在之前的基础上,添加任务成功或者失败的时候发送邮件通知

7.1.创建数据流图

在之前的基础添加发送邮件

Kettle_数据流图_71

7.2.设置发送邮件服务器

这里以126邮箱设置为例进行说明

下面对于126邮箱进行配置,后面座位Jenkins发送邮件的服务邮箱使用

7.2.1.登录网页版邮箱(https://mail.126.com/),进入126邮箱首页。

Kettle_SQL_72

7.2.2.点击上方“设置”,选择“POP3/SMTP/IMAP”选项。

Kettle_数据流图_73

7.2.3.在新弹出的弹窗中,点击“继续开启”。

扫码页面您可以选择扫码发送短信,或者点击下方“手动发送短信”。

Kettle_数据_74

7.2.5.点击“我已发送”后,如果系统检测到用户成功发送短信,即获取到授权码。

这个授权码你需要复制保存下来,以供后续使用

Kettle_数据_75

7.3.设置发送邮件

7.3.1.设置成功邮件

对于成功邮件进行设置:添加收件人和发件人邮箱

Kettle_数据_76

设置邮箱服务器和发件人信息,注意密码哪里需要使用授权码

Kettle_SQL_77

设置发送的邮件内容

Kettle_数据流图_78

7.3.2.设置失败邮件

跟成功邮件只有发送的内容不一致,故而未在列出

Kettle_数据_79

7.4.保存执行

这里修改定时任务,设置每天17:20定时执行任务

Kettle_SQL_80

然后运行,会发现任务执行后,收件人能收到邮件

Kettle_SQL_81



标签:转换,Kettle,Excel,表中,组件,执行
From: https://blog.51cto.com/u_13661275/12017674

相关文章

  • Kettle 发送Http请求获取数据,并保存到db
    布局图 1.Generaterows:设置请求参数 2.配置第一个接口(登录)- POST  2.1.往请求head中插入数据2.2.从响应的head中读取数据  2.3.对获取的数据进行处理 3.配置第二个接口(获取数据)-GET 3.1.从响应的结果中,反序列化数据  5.保存到DB Reference:......
  • Kettle: pentaho-server-ce-9.4 连接失败:ConnectionServiceImpl.ERROR_0009
    pentaho-server-ce-9.4 数据库连接MYSQL8.0.37 ,测试连接失败,提示:ConnectionServiceImpl.ERROR_0009-Connectiontodatabase[MYSQL8]failed. 在TOMCAT\LOGS\catalina.2024-08-27.log日志内容如下:  20:58:27,287ERROR[ConnectionServiceImpl]Errorend:21:0......
  • Kettle: create_sampledata_mysql
    USEsampledate;CREATETABLEsampledata.QUADRANT_ACTUALS(REGIONVARCHAR(50)NOTNULL,DEPARTMENTVARCHAR(50)NOTNULL,POSITIONTITLEVARCHAR(50)NOTNULL,ACTUALDECIMAL(18,4),BUDGETDECIMAL(18,4),VARIANCEDECIMAL(18,4));CREATETABLEsampledata.DEPARTME......
  • Kettle 9 加密与解密
    测试环境: win10+PDI9.0 (PentahoDataintegation 9.0.0.0-423)1、进入KETTLE的安装目录如:cd/dE:\DATA-INTERGRATION命令行执行:encr.bat-kettle 123可生成Encrypted2be98afc86aa7f2e4cb79ce10bec3fd89,即为123对应KETTLE生成的加密后的密码。   2、......
  • Kettle PDI小白新手/进阶/必备 大数据基础之一数据清洗(ETL)基础进阶总结 1.6万字长文
    Kettle是一个开源的数据集成工具,主要用于ETL(抽取、转换、加载)过程。它的全名是PentahoDataIntegration(PDI),而Kettle是其早期的名字,Kettle在2006年被Pentaho收购后,正式更名为PentahoDataIntegration(PDI),因此现在更常被称为PDI。PDI仍然是Pentaho产品套件中的一个重要......
  • kettle从入门到精通 第八十三课 ETL之kettle kettle调用python且接收返回值
    场景:kettle调用python执行脚本,处理之后,再把结果数据流发给下一个步骤。 看到有个qq群里有个小伙伴求助要实现kettle调用python脚本,然后接收python脚本执行的结果,最后将结果传递到下一个步骤。之前的课程里面介绍的是kettle通过shell步骤调用python脚本,没有接收python返回的结果......
  • kettle从入门到精通 第八十二课 ETL之kettle kettle中的【阻塞数据直到步骤都完成】使
     1、在使用步骤【阻塞数据直到步骤都完成】(英文为Blockthisstepuntilstepsfinish)之前,我们先来了解下什么是 CopyNr? CopyNr是指 “副本编号” 或 “拷贝编号”,也就是下图中的复制的记录行数,图中的两个步骤复制的记录行数都是0,表示只有一个副本。 2、写日志步骤右......
  • 数据集成工具之kettle
    Kettle是一个用于数据集成的开源工具,由Pentaho开发,现已由HitachiVantara维护。Kettle的全名是PentahoDataIntegration(PDI),主要用于数据提取、转换和加载(ETL)过程。1.核心组件Spoon:图形化的设计工具,用于创建和测试ETL作业和转换。用户可以通过拖放界面来设计......
  • kettle从入门到精通 第八十一课 ETL之kettle kettle中的json对象字段写入postgresql中
    1、上一节可讲解了如何将json数据写入pg数据库表中的json字段,虽然实现了效果,但若客户继续使用表输出步骤则仍然无法解决问题。正确的的解决方式是设置数据库连接参数stringtype=unspecified2、stringtype=unspecified参数的作用:当设置为 unspecified 时,pgJDBC驱动将根据数......
  • kettle从入门到精通 第八十课 ETL之kettle kettle中的json对象字段写入postgresql中的
    场景:源数据库表为mysql的其中有json字段,通过kettle查询出来插入到目标数据库postgresql中,对应的表中也有json字段。。但是报错,提示kettle查询出来是varchar的的字段,无法插入到目标数据库中。1、创建测试表。CREATETABLEt3(idint,nameJSON);2、测试mysql......