首页 > 其他分享 >ETL处理工具-kettle使用

ETL处理工具-kettle使用

时间:2023-11-10 11:57:54浏览次数:31  
标签:kettle 数据库 配置 Kettle 组件 工具 数据 ETL

ETL处理工具-kettle使用

一、Kettle介绍

kettle是一个ETL工具,ETL的全称为(Extract-Transform-Load),用来描述将数据从来源端经过 抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL是将业务系统的数据经过抽取、清洗、转换之后加载到数据仓库的过程,目的是将业务系统分散、零乱、标准不统一的数据整合到一起。

image-20231109102403592

数据仓库是一个很大的数据存储集合,出于企业的分析性报告和决策支持目的而创建的,对多样的业务数据进行筛选与整合。它为企业提供一定的BI能力,指导业务流程改进,监视时间成本、质量以及控制。

image-20231109102515818

Kettle是什么

  • Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装

  • Kettle中文名称叫水壶,该项目的主程序员MATT希望把各种数据放到一个壶里,然后以一种指定的格式流出

  • Kettle允许管理来自不同数据库的数据,提供一个图形化的用户环境来描述想做什么,无需关心

使用kettle之前必须先安装好JDK,配置好系统环境变量

使用kettle操作mysql数据库,也配置好mysql驱动包,在kettle的lib文件夹中导入mysql驱动包

二、txt文件抽取到excel

需求:将一个txt文件中内容抽取到excel文件中

txt文件内容:

image-20231109104033097

1、首先构建kettle数据流图:用可视化操作像排积木的方式,把要做的事情排列出来

image-20231109104451265

新建一个转换,在输入一栏选择文本文件输入,在输出一栏选择excel输出,按住shift使用鼠标将两个组件连接起来

2、配置文本文件输入组件:

image-20231109105111935

注意:选择好文本文件之后一定要点击添加,否则将不会抽取数据

image-20231109105523360

在内容一栏,设置编码格式以及分隔符,分割符是文本文件分割数据的符号,注意区分中文和英文符号

image-20231109105823191

在字段一栏,点击获取字段可以获取txt文件中的所有字段(第一行数据);点击预览记录查看是否能读取txt文件中数据,最后点击确定保存

3、配置excel输出组件

image-20231109110423494

这里设置将生成的excel输出到指定路径

image-20231109110953317

点击获取字段,然后可以设置数据的输出格式以及类型

image-20231109111223819

保存并执行转换;保存这个转换我们下次可以继续使用,不需要重新配置,保存的是一个ktr文件。

执行结束后,在刚刚设置保存的指定路径可以找到输出的excel文件,点击可以查看从txt抽取的数据

三、Kettle实现excel输入-MySQL表输出

1、使用MySQL,首先需要先要创建一个数据库

create database if not exists kettle_demo default charset=utf8;

2、kettle中的lib目录中加入mysql的jar文件

3、构建kettle数据流图(输入选择excel输入,输出选择表输出)
img
4、配置excel输入组件:

双击Excel输入组件,点击浏览按钮,选择要抽取的Excel文件,并点击添加按钮,将选中的excel文件移动到选中的文件区域

img

点击工作表选项,选中Sheet1, 点击>, 将Sheet1移动到右侧:

img
在这里还可以设置输入文件的数据格式:
img
5、配置表输出组件:
img

依次配置目标数据库的ip地址, 数据库名称, 用户名,密码, 然后点击测试,成功后点确定:

img

创建目标表:

img

执行SQL语句创建目标表:

img

  • 执行完sql语句之后,我们在datagrip中可以查看到一个tb_user数据表了,但是里面还没存放抽取的数据。

6、在确认保存表输出组件后,点击保存(ctrl+ s)转换,保存到指定路径。最后点击播放键执行文件。
img

7、在数据库中查看tb_user表,数据已经成功入库了

四、共享数据库连接

在后续的Kettle中,我们需要多次用到上面的数据库连接,为了避免每次都要创建与配置数据库连接,Kettle中提供了数据库共享功能。

点击主对象树,选择转换中DB连接,找到刚刚配置好的数据库,双击打开选择共享,当数据库的字体变黑色了,说明已经共享成功。

image-20231109155214827

  • 在新建的转换中,都可以看到该数据库连接了。这样就避免了每次我们都需要配置该数据库连接了。

五、Kettle实现mysql表1到mysql表2的转换

需求:要将MySQL数据库中的 t_user 表中的数据抽取出来,装载到另外一张表 t_user2中

1、构建数据流图

image-20231109155754873

2、配置表输入组件:

image-20231109160105553

3、配置表输出组件:

image-20231109160539970

4、目标表结构创建:

image-20231109160858995

点击执行之后我们可以在mysql中查看到目标表的表结构

5、最后保存转换并点击运行,我们就可以在mysql中查询到插入的数据

六、Kettle的插入更新组件

插入/更新组件能够将Kettle抽取的数据,与某个表的数据进行对比,如果数据存在就更新,不存在就插入。

1、构建数据流图

image-20231109164132640

2、配置表输入组件

image-20231109164122338

3、配置更新插入组件

image-20231109163631453

4、执行sql语句创建表结构

image-20231109163911148

5、确定,保存,执行生成数据

  • 上述转换实际存在缺陷:只能在目标表中同步源表的插入/更新的数据,而源表删除的数据,目标表不会删除,即并没完全同步(目标表和源表完全一致)。若需要完全同步,可使用“数据同步”输出。

扩展:裁剪表

image-20231109164451147

裁剪表到底是干什么?

简单来说:就是使用truncate 数据表在执行任务前,先把数据表清空,然后再把Excel中的文件内容导入到MySQL的里面

七、Kettle中的switch/case组件

switch/case组件就是实现分组输出的功能,比如按性别分组将数据输出到男女两个表中。

switch/case组件在核心对象树中的流程一栏中可以找到

1、创建数据流图

image-20231109165039065

组件连接方式:

image-20231109165418212

2、配置表输入组件(与上述一样)

3、switch/case组件配置

此处要指定,按照性别来判断输出到Excel文件。需要设置 Switch字段为gender,在Case值列表中将值分别改为男、女。如果gender是男的话,则将数据装载到 Excel输出 - 男,如果gender是女的话,将数据装载到 Excel输出 - 女。

image-20231109165852171

4、配置excel表格输出组件(与上述一致)

5、保存,执行

八、Kettle的SQL脚本

需求:清空mysql_kettle_test中的t_user1中的所有数据。

  • 创建数据流图

image-20210830095131269

  • 配置SQL组件

image-20210830095157167

  • 保存并执行

九、设置转换命名参数

需求:让Kettle帮助我们删除指定省份的用户,具体删除哪个省份不确定,由执行Kettle时指定。

我们可以使用执行SQL脚本组件来删除某个省份的用户。

  • 配置转换参数(双击空白处)

image-20210830100426235

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

image-20210830100257706

  • 保存并执行(执行时需要设置参数值)--删除省份为北京市的数据

image-20210830100643037

案例:使用带参数的SQL脚本创建一个数据库的执行过程

1、构建数据流图:

image-20231110111724983

2、配置SQL脚本:

image-20231110111951483

3、配置转换属性(双击空白处打开)

image-20231110112151228

4、保存并执行SQL脚本

image-20231110112408250

十、Kettle的作业(job)

Job作业开发,主要实现定时任务,可以将之前开发后的抽取方案进行定时配置。

需求:每5秒钟将Excel中的数据抽取并装载到MySQL中

  • 创建数据流图

    创建一个新的作业,在通用选项中选择start、转换、成功,并将他们连接起来。

  • 配置转换

image-20210830105804774

在transformation选择我们之前已经配置好的转换

  • 配置start

image-20210830110325891

  • 保存并启动

image-20210830111044152

标签:kettle,数据库,配置,Kettle,组件,工具,数据,ETL
From: https://www.cnblogs.com/luoluoange/p/17823767.html

相关文章

  • 搭建一个高颜值的linux在线工具箱——IT TOOLS
    IT工具指的是在信息技术领域用于管理、创建、存储、保护和处理数据的各种软件和硬件解决方案。根据其功能,这些工具可以分为几种类型:开发工具:这些工具由软件开发人员使用,用于创建、调试、测试和维护应用程序。例如集成开发环境(IDE)如VisualStudio,代码编辑器如SublimeText,版本控......
  • Apache JMeter压力测试工具使用
    JMeter是Apache组织开发的基于Java的压力测试工具,用于对软件做压力测试。软件下载下载地址:https://jmeter.apache.org/download_jmeter.cgi最新版本5.6.2用浏览器下载发现慢得很,用迅雷下载非常快哟。测试使用在使用前需要先安装jdk下载完后将文件解压缩,找到bin目录下的jmeter.b......
  • 使用命令行工具获取Ubuntu22的公网IP和私有IP
    1.想在互联网冲浪,公网IP是必不可少的(一般是路由器的公网IP)$curlifconfig.me2.私有IP一般是路由器分配的IP,私有IP在局域网内的计算机通信,然后利用路由器的公网IP与互联网上的计算机通信#注意是ifconfig,而不是windows中的dos命令ipconfig$ifconfigor$hostname-I3.为......
  • Oracle工具类
    Oracle工具类publicabstractclassDbHelperOra{//数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.publicstaticstringconnectionString=PubConstant.Conn;publicDbHelperOra(){......
  • 当前大数据时代的一个流式日志采集工具——Flume
    1.什么是流式日志?大数据时代的数据大概的说可以分为流式的data以及批式的data什么意思呢?顾名思义就是,对data进行处理的方式不一样,流式就是像流水一样,不断流入,它是每时每刻都有的,实时的都需要进行收集然后处理;反观批式data,它是一批一批的来,等到收集到一批(达到某个阈值)data再统......
  • 获取随机数工具类
    1.通过Random获取随机数由System.Random中提供,它生成的数字被称为伪随机数,它是以相同的概率从一组有限的数字中选取的,所选的数字并不具有完全的随机性,但就实用而言,其随机程度已经足够了。实现思路:Randomr1=newRandom();inta1=r1.Next(1,100); 2.使用Guid生成随机......
  • Leangoo领歌免费敏捷工具中如何看到关于自己的所有任务?
    ​个人工作台个人工作台是个人最新待办工作的展示区域,它展示了个人所有的待办任务,最新访问的项目和工作动态,当一个人在多个项目和看板上工作时,它可以帮助个人快速看到个人在各个项目的工作,快速进入任务看板处理任务。 ​www.leangoo.com​......
  • 封装java导出Excel工具类使用
     基于POI的导入导出工具类使用背景快速引入基本excel导入成对象合并excel导入成为对象导出复杂excel表格最后 背景自己封装了一个excel工具类,方便以后使用和部分可能有相同需求的朋友使用,现在做一个简单的记录快速引入第一步导包,maven包仅包含poi依赖,导入时注......
  • 封装java导出Excel工具类使用(二)
    目录背景快速引入基本excel导入成对象和合并excel导入成为对象导出基本excel表格注:本次更新的列表1对多样式同样适用于导出异形表中的列表最后背景自己封装了一个excel工具类,方便以后使用和部分可能有相同需求的朋友使用,现在做一个简单的记录快速引入第一步导包,maven包仅包含......
  • 09_LCD1602调试工具
    LCD1602调试工具编写代码LCD1602.c#include<REGX52.H>//引脚配置:sbitLCD_RS=P2^6;sbitLCD_RW=P2^5;sbitLCD_EN=P2^7;#defineLCD_DataPortP0//函数定义:/***@briefLCD1602延时函数,12MHz调用可延时1ms*@param无*@retval无*/voidLCD_Delay(vo......