kettle学习
一、什么是kettle
Kettle,也称为Pentaho Data Integration (PDI),是一个开源的ETL(Extract, Transform, Load)工具,由Pentaho社区开发。ETL工具主要用于数据仓库的构建过程,它能够从不同来源抽取数据,进行清洗、转换、集成,并将数据加载到目标数据库或数据仓库中。
Kettle的优点:
-
开源免费:Kettle是一个完全开源的工具,用户可以免费使用。
-
跨平台:Kettle可以在多种操作系统上运行,包括Windows、Linux和macOS。
-
强大的数据处理能力:Kettle提供了丰富的数据处理组件,可以进行数据转换、数据清洗、数据聚合等多种操作。
-
易于使用:Kettle提供了一个图形化的界面,用户可以通过拖拽组件来构建ETL流程,无需编写代码。
-
可扩展性:Kettle允许用户自定义开发插件,以支持更多的数据源和数据处理功能。
-
社区支持:作为一个开源项目,Kettle拥有一个活跃的社区,用户可以在社区中寻求帮助和分享经验。
-
集成能力:Kettle可以与其他Pentaho工具(如Pentaho BI服务器)集成,提供端到端的数据分析解决方案。
-
多线程支持:Kettle支持多线程处理,可以提高数据处理的效率。
1.1 找到适配的JDK版本
目前最新版本的好像从官网下载不了了,有发现新下载方式的可以留言。当然它的强大也是相对的,和好多商业化成型的产品在性能上是没有办法相比的(informatica、dataworks)
安装部署比较简单,安装包解压可用(但需要有java的可执行环境)
Pentaho Data Integration (PDI) 9.4 需要的 Java 版本是 JDK 11 (笔者目前使用的版本,我试了试 JDK 1.8 虽然可以打开操作界面但是无法添加数据源),有人说高版本的也可以,但是我试了高版本的无法创建数据库连接。
随便打开一个bat文件基本都写了适配的JDK版本。
以下链接是JDK21的下载地址
1.2 卸载已有的jdk
因为我电脑本身有低版本的jdk所以才有了这个步骤
打开控制面板卸载程序(该步骤会自动删除java之前的安装痕迹,如果是低版本建议自行删除java安装路径)
二、核心组件
组件 | 说明 | 举例 |
---|---|---|
步骤(Step) | 步骤是转换中的基本操作单元,用于执行具体的数据处理操作。 | Kettle提供了许多内置的步骤,如数据库输入、文本文件输出、字段计算 |
转换(Transformation) | 转换是Kettle中的基本单位,用于定义数据的抽取、转换和加载过程。一个转换由一系列的步骤(Step)组成,每个步骤执行特定的数据处理操作 | 一个转换可以包括从数据库中抽取数据、对数据进行清洗和转换,然后将数据加载到目标数据库中 |
作业(Job) | 作业是由一个或多个转换组成的高级任务。作业用于定义和控制转换的执行顺序和条件。一个作业可以包含多个转换,并且可以定义转换之间的依赖关系和触发条件。 | |
连接(Connection) | 连接用于定义数据源和目标的连接信息。Kettle支持多种类型的连接,如数据库连接、文件连接等。连接包括连接的URL、用户名、密码等信息,用于在转换中访问和处理数据。 | Kettle支持多种类型的连接,如数据库连接、文件连接等。连接包括连接的URL、用户名、密码等信息 |
参数(Parameter) | 参数用于在转换和作业中传递和共享数据。参数可以在转换和作业的配置中定义,并且可以在运行时动态地设置和获取。参数的使用可以增加转换和作业的灵活性和可重用性。 | |
调度器(Scheduler) | 调度器用于定时执行作业和转换。Kettle提供了一个内置的调度器,可以根据预定义的时间表或触发条件自动触发作业和转换的执行。调度器还可以监控作业和转换的执行状态,并提供日志和报告。 |
三、工具
工具 | 启动程序 | 功能 |
---|---|---|
勺子 | Spoon.bat / spoon.sh | 让使用者用图形化的方式开发转换和作业 |
煎锅 | Pan.bat /pan.sh | 用命令行的形式执行由Spoon编辑的转换和作业 |
厨房 | Kitchen.bat /kitchen.sh | 使用命令行调用由Spoon编辑好的Job |
菜单 | Carte.bat / Carte.sh | 一个轻量级的Web容器,用于建立专用、远程的ETL Server |
很明显这个工具是比较适配windows这种图形化的系统的,但同时支持命令用来批量化快速操作。
四、创建数据库连接
在进行连接前需要将数据库的jdbc驱动文件放到lib文件夹下
打开spoon 文件 新建 数据库连接
五、转换控件使用
5.1 输入控件
控件 | 功能 |
---|---|
文本文件输入 | 用于从文本文件中读取数据,可以指定文件路径、字段分隔符、文本编码等参数。 |
数据库输入 | 用于从关系型数据库中读取数据,可以指定数据库连接信息、SQL查询语句等参数。 |
Excel文件输入 | 用于从Excel文件中读取数据,可以指定文件路径、工作表名称、起始行等参数。 |
XML输入 | 用于从XML文件中读取数据,可以指定文件路径、XPath表达式等参数。 |
Web服务输入 | 用于从Web服务接口中读取数据,可以指定URL、请求方法、请求头等参数。 |
5.2 输出控件
控件 | 功能 |
---|---|
文本文件输出 | 将数据写入到文本文件中。 文件路径,字段分隔符,文本编码,是否追加写入,是否包含头部。 |
数据库输出 | 将数据写入到关系型数据库中。数据库连接信息,目标表名,字段映射关系,批量插入大小。 |
Excel文件输出 | 将数据写入到Excel文件中。文件路径,工作表名称,起始行,起始列,字段映射关系。 |
XML输出 | 将数据写入到XML文件中。文件路径,根节点名称,字段映射关系,是否包含头部。 |
Web服务输出 | 将数据通过HTTP请求发送到Web服务接口。URL,请求方法,请求头,请求参数。 |
JSON输出 | 将数据写入到JSON文件或API中。文件路径,JSON路径表达式,字段映射关系 |
数据流输出 | 将数据写入到另一个转换中的输入流中。转换名称,步骤名称,输入流名称 |
六、作业控件
6.1 基础控件
作业项 | 功能 |
---|---|
Start | 作业的起始点,表示作业的开始。通常将"Start"作业项作为作业的第一个作业项,用于标识作业的起始位置。可设置定时执行 |
Dummy | 虚拟作业项,用于连接作业中的不同作业项。在作业中,可以使用"Dummy"作业项来创建分支、合并分支或者连接不同的作业项。 |
成功 | 用于判断作业的执行结果是否成功。可以将"成功"作业项与其他作业项连接,根据前面的作业项的执行结果来判断作业的成功或失败。通常会在作业的最后面添加一个"成功"作业项,用于标识作业的结束。这是因为作业的执行结果需要有一个明确的标识,以便后续的处理或者监控。 |
设置变量 | 在Kettle作业中,可以使用变量来存储和传递数据。可以通过"设置变量"作业项来设置变量的值。在其他作业项中,可以使用变量来引用和操作数据。 |
转换 | 转换作业项用于执行一个独立的转换,可以是已经定义好的转换文件(.ktr)或者是动态生成的转换。转换作业项可以用于实现数据抽取、转换和加载(ETL)等任务。 |
6.2 作业跳
作业跳就是各个作业之间的连接线
1、无条件执行作业跳
2、结果为真时执行
3、结果为假时执行
五、初始案例
读取一个csv文件并成功写入mysql数据库
-
新建转换,打开输入并拖拽“CSV文件输入”然后双击进行编辑,点击获取字段
-
打开输出并将表输出拖拽到转换画布
-
按住shift健将两部分连接起来
-
双击表输出进行设置
字段对接
-
点击运行执行任务
这里需要注意我因为创建数据库连接的时候给数据库取名为中文名了,所以在保存转换以及执行的时候都有报错,用中文名就好了。