一、Kettle 简介
1.1、Kettle是什么
Kettle是一款国外开源的ETL工具,纯Java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。
Kettle 中文名称叫水壶,该项目的主程序员MATT希望把各种数据放到一个壶里,然后以一种指定的格式流出。
Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。
Kettle中有两种脚本文件,Transformation和Job,transformation完成针对数据的基础转换,Job则完成整个工作流的控制。
Kettle,现在已经更名为PDI(Pentaho Data Integration-Pentaho,即数据集成)。
1.2、Kettle的特点
- 无代码拖拽式构建数据管道
Kettle采用拖拽组件、连线、配置的方式来构建数据管道,透过超过200个不同的组件,用户可以在不编写一句代码就能轻松完成对数据源读取,对数据进行关联、过滤、格式转换、计算、统计、建模、挖掘、输出到不同的数据目标。极大程度地降低开发技术门槛和有效减低开发和维护成本。
- 多数据源对接
- 关系型数据库支持类型包括:AS/400,DB2,Google BigQuery,Greenplum,Hive,Impala,MS SQL Server,MySQL,Oracle,PostgreSQL,SAP,Snowflake,SparkSQL,Sybase,Teradata, Vertica等。
- 大数据源支持包括:Avro,Cassanddra,HBase,HDFS,MongoDB,ORC, Parquet, Splunk等。
- 文件格式支持包括:CSV, TXT, JSON, Excel, XML等。
- 流数据支持包括:AMPQ,JMS,Kafka,Kinesis,MQTT。
- 其他数据源对接包括:HL7,S3,SAS,Salesforce,HCP,REST等。
- 数据管道可视化
Kettle支持用户在数据管道任何一个步骤对当前数据进行查看(Examine),并可以在线以表格和图表(例如:柱状图、饼图等)输出步骤的数据,甚至可以支持不落地直接把任何一个步骤的数据以JDBC的方式提供给第三方应用访问。
- 模板化开发数据管道
Kettle提供了一个叫MDI的功能,MDI全称是Metadata Injection元数据注入,用户可以透过MDI把数据转换模板化,然后把像数据表名、文件路径、分隔符、字符集等等这些变量放在一个表或者文件里,然后利用MDI把这些变量注入数据转换模板,Kettle就能够自动生成所需要的数据转换了。这个功能为很多客户节省了大量的开发时间。
- 可视化计划任务
- Kettle提供可视化方式配置任务计划(Schedule),用户可透过Spoon或网页端的Pentaho User Console来配置和维护任务具体的执行时间、间隔、所使用的参数值、以及具体运行的服务器节点。
- 用户亦可以透过Spoon或Pentaho User Console查看任务计划列表;当然,用户也可以透过Spoon或Pentaho User Console对任务执行情况进行实时监控。
- 深度Hadoop支持
- Kettle针对Hadoop主流厂家预置专用的对接插件,支持的Hadoop版本包括Cloudera,Hortonworks,AWS EMR,Google Dataproc等,用户除了可以透过插件轻松对接Hadoop集群的数据源(HDFS,Hive,HBase,Impala等)以外,Pentaho还提供与Kerberos、Sentry和Ranger等Hadoop企业级安全机制对接,以满足企业安全要求。
- 另外,Pentaho Data Integration的Pentaho MapReduce提供用户以无编码方式定义MapReduce任务;同时,用户亦可以在作业中执行Sqoop、Pig、MapReduce、Oozie和Spark任务。
- 数据任务下压Spark集群
Kettle提供了把数据转换任务下压到Spark来执行的AEL(Adaptive Execution Layer)功能,搭建好的数据管道会被AEL转成Spark任务来执行,这样数据就不需要离开集群,而是在集群里透过Spark强大的分布式处理能力来进行处理。
- 数据挖掘与机器学习支持
- 最新版的Pentaho9.1预置了超过20种数据挖掘算法类的转换步骤,用户可以轻松把把机器学习集成到数据管道里,用来做数据模型训练和进行预测分析。
- 预置算法包括:决策树、深度学习、线性回归、逻辑回归、Naive贝尔斯、随机森林等等,用户也可以利用Pentaho Data Integration作数据预备,然后把数据以dataframe的方式输入到Python或R中进行模型训练或预测。
1.3、Kettle核心组件
- Spoon
Spoon是构建ETL Jobs和Transformations的工具。Spoon以拖拽的方式图形化设计,能够通过spoon调用专用的数据集成引擎或者集群。
- Pan
Pan是一个后台执行的程序,没有图形界面,类似于时间调度器。
- chef
任务通过允许每个转换,任务,脚本等等,更有利于自动化更新数据仓库的复杂工作。
- Kitchen
批量使用由Chef设计的任务。
二、Kettle 安装与部署
2.1、下载
Kettle官方网址:Home - Hitachi Vantara,目前最新是9.2版本的。
进入官网后选择 –>Data Integration,找到Downloads,看到稳定版本为Data Integration 8.2,选择进行下载即可。
2.2、安装
- 下载好的压缩包进行解压
- 打开解压之后的data-integration文件夹
- Windows系统,点击Spoon.bat运行;Linux系统点击Spoon.sh运行
2.3、环境变量配置
因为Kettle是纯Java开发的,因此下载以后需要配置一下环境变量。需要先安装JDK,准备好Java软件的运行环境,安装jdk1.8版本即可,具体操作可参考百度。
2.4、常见问题
- 启动Kettle后,页面右上角不出现Connect。
解决方法:打开系统盘用户目录下的repositories.xml配置文件,将乱码内容删除,并删除.spoonrc文件,重启Kettle。
2、可视化界面spoon.bat打不开,JVM提示不能正常启动
解决方法:
- 检查环境变量的配置
- 检查JDK版本,新版本最好用1.6以上
- 新安装了高版本jdk,环境变量也没问题,但是java -version 版本还是老的,那就检查一下原版本的的快捷方式java.exe还在不在,在的话就删掉。
- 以文本方式打开spoon.bat ,修改内存配置
3、连接数据库找不到驱动问题(以MySQL为例)
提示错误:
[mysql] : org.pentaho.di.core.exception.KettleDatabaseException:
Error occured while trying to connect to the database
Driver class ‘org.gjt.mm.mysql.Driver’ could not be found, make sure the ‘MySQL’ driver (jar file) is installed.
org.gjt.mm.mysql.Driver
解决办法:把mysql-connector-java-5.1.37-bin.jar拷贝到 \\pdi-ce-6.0.1.0-386\data-integration\lib下面,然后重新启动spoon即可。
三、Kettle 运行界面与基本概念
3.1、运行界面
3.2、基本概念
1)可视化编程
Kettle可以被归类为可视化编程语言(Visual Programming Languages,VPL),因为Kettle可以使用图形化的方式定义复杂的ETL程序和工作流。
Kettle里的图就是转换和作业。
可视化编程一直是Kettle里的核心概念,它可以让你快速构建复杂的ETL作业和减低维护工作量,它通过隐藏很多技术细节,使IT领域更贴近与商务领域。
2)转换(Transformation)
- 转换是ETL解决方案中最主要的部分,它处理抽取、转换、加载各种对数据行的操作。
- 转换包含一个或多个步骤(step),如读取文件、过滤数据行、数据清洗或将数据加载到数据库。
- 转换里的步骤通过跳(hop)来连接,跳定义一个单向通道,允许数据从一个步骤向另一个步骤流动。
- 在Kettle里,数据的单位是行,数据流就是数据行从一个步骤到另一个步骤的移动。
- 数据流有的时候也被称之为记录流。
3)步骤(Step)
Kettle里面的,Step步骤(控件)是转换里的基本的组成部分。一个步骤有如下几个关键特性:
- 步骤需要有一个名字,这个名字在转换范围内唯一。
- 每个步骤都会读、写数据行(唯一例外是“生成记录”步骤,该步骤只写数据)。
- 步骤将数据写到与之相连的一个或多个输出跳,再传送到跳的另一端的步骤。
- 大多数的步骤都可以有多个输出跳。一个步骤的数据发送可以被被设置为分发和复制,分发是目标步骤轮流接收记录,复制是所有的记录被同时发送到所有的目标步骤。
4)跳(Hop)
Kettle里面的跳即步骤之间带箭头的连线,跳定义了步骤之间的数据通路。
- 跳实际上是两个步骤之间的被称之为行集的数据行缓存(行集的大小可以在转换的设置里定义)。
- 当行集满了,向行集写数据的步骤将停止写入,直到行集里又有了空间。
- 当行集空了,从行集读取数据的步骤停止读取,直到行集里又有可读的数据行。
5)数据行——数据类型
数据以数据行的形式沿着步骤移动。一个数据行是零到多个字段的集合,字段包含下面几种数据类型。
- String:字符类型数据
- Number:双精度浮点数。
- Integer:带符号长整型(64位)。
- BigNumber:任意精度数据。
- Date:带毫秒精度的日期时间值。
- Boolean:取值为true和false的布尔值。
- Binary:二进制字段可以包含图像、声音、视频及其他类型的二进制数据。
6)数据行——元数据
每个步骤在输出数据行时都有对字段的描述,这种描述就是数据行的元数据。通常包含下面一些信息。
- 名称:行里的字段名应用是唯一的。
- 数据类型:字段的数据类型。
- 格式:数据显示的方式,如Integer的#、0.00。
- 长度:字符串的长度或者BigNumber类型的长度。
- 精度:BigNumber数据类型的十进制精度。
- 货币符号:¥。
- 小数点符号:十进制数据的小数点格式。不同文化背景下小数点符号是不同的,一般是点(.)或逗号(,)。
- 分组符号:数值类型数据的分组符号,不同文化背景下数字里的分组符号也是不同的,一般是点(.)或逗号(,)或单引号(’)。
7)日志——I O R W U E
(I=669, O=0, R=0, W=668, U=0, E=0)
I 是指当前 (步骤) 生成的记录(从表输入、文件读入)
O 是指当前 (步骤) 输出的记录数(输出到文件、表)
R 是指当前 (步骤) 从前一步骤读取的记录数
W 是指当前 (步骤) 向后面步骤抛出的记录数
U 是指当前 (步骤) 更新过的记录数
E 是指当前 (步骤) 处理的记录数
四、Kettle 读取CSV文件
4.1、输入
就是用来抽取数据或生成数据的操作。是ETL操作的E(Extraction)。
4.2、CVS文件
是一种带有固定格式的文本文件。
假设我们的目的是读取 CSV 文件,在 Excel 中输出。当然,这种简单操作完全不需要 Kettle,Excel 直接就可以打开并转换。练习的目的是从易到难,逐步掌握 Kettle 的用法。
CSV 文件是一种常见的文本文件,一般含有表头和行项目。大多数数据处理型软件都含有对 CSV 格式的支持。进入 Spoon 的主界面,通过菜单 [文件] –> [新建] –> [转换] 新建一个转换。
在左边的核心对象中,找到输入文件夹下面的CSV文件输入,将其拖到右边的工作区。双击CSV文件输入图标,通过浏览按钮找到 想要读取的 CSV 文件:
点击对话框中的 “获取字段” 按钮,自动获得 CSV 文件各列的表头。之所以可以这样,是因为 “包含列头行” 默认选中。点击 “预览” 按钮可以预览数据。如果是中文,注意文件的编码。
在左边导航区的 “输出” 文件夹下,将 “Excel输出” 步骤拖放到右边的工作区。选中步骤 “CSV文件输入”,通过 shift+鼠标拖动,连接两个步骤,此时界面如下:
双击 “Excel输出”,设置文件名和扩展名:
切换到 “字段” 页签,点击 “获取字段” 按钮,获取需要输出的字段,可以删除不想要的字段,然后点击 “确定” 按钮:
运行之前保存,转换被保存为扩展名为 ktr 的文件,这个文件是 xml 格式的文本文件,可以用 spoon 打开。然后点击 “运行”,即可以将 CSV 文件转换成 Excel 文件。
4.3、多个文件输入
在导航区 “核心对象” 中,找到 “输入” 文件夹下 “获取文件名”,拖到工作区。设置如下:
点击 “预览记录” 按钮,查看包含的文件,两个文件都被读取到。filename 是在下一步要使用的文件路径,属于输出的变量。
将 “获取文件名” 步骤连接至 “CSV文件输入” 步骤。此时,“CSV文件输入” 步骤的界面中,文件名字段为数据来源于前一步骤,选择 filename。其他相同。
运行,可以把两个 CSV 文件中的数据加载并输出到 Excel 文件中。输入的文件格式,比如文本文件、Excel 文件大体类似。
五、Kettle 导入文件夹下的多个文件
5.1、任务描述
在一个文件夹下有几百个文本文件,每个文件内容的格式相同,都是有固定分隔符的两列,每个文件有几千行记录。
Kettle的转换处理数据流,其中有一个“文本文件输入”的输入对象,可以使用它在导入文件数据时添加上文件名字段,而且支持正则表达式同时获取多个文件名,正好适用此场景。
5.2、操作过程
1. 新建一个转换
包含“获取文件名”、“拆分字段2”、“拆分字段”、“表输出”四个步骤,如下图所示。
2. “文本文件输入”
如下图所示。 正则表达式.*test.* 意思是查找以test开头的文件。
3.拆分字段
按照分隔符“|”将字段field_1拆成field_000和field_111
5.表输出
6.启动运行
六、Kettle 创建数据库连接
6.1、任务描述书
抽取数据库数据,第一步是创建数据库连接,为数据操作提供桥梁。
为了方便抽取MySQL的“demodb”数据库中的数据表,需要创建一个数据库连接,访问“demodb”数据库。
6.2、实现思路
- 建立数据库连接
- 设置数据库连接参数
- 测试和预览数据库连接
- 建立共享/停止共享数据库连接
6.3、操作过程
1)建立数据库连接
数据库连接必须在转换工程或任务工程中才能创建,使用Ctrl+N快捷键,首先创建【demodb数据库连接】转换工程。
在【demodb数据库连接】转换工程中,单击【主对象树】选项卡,展开【转换】对象数(按钮表示收起状态,按钮表示展开状态),右键单击【demodb数据库连接】下的【DB连接】对象,弹出快捷菜单。如图所示:
6.4、设置参数
- 单击【新建】选项,弹出创建【数据库连接】对话框。
- 数据库连接参数包含【一般】【高级】【选项】【连接池】和【集群】5类参数。
- 其中,【一般】参数是必填项,多数情况只需进行【一般】参数设置,即可完成创建数据库连接,其他四项是可选项。
- 由于【高级】【选项】【连接池】绝大多数情况下采用默认值,一般不需要再设置其参数,本篇教程主要介绍【一般】参数和【集群】参数的设置。
1)【一般】参数
【一般】参数分为【连接名称】【连接类型】【连接方式】【设置】四部分参数设置。因为【连接类型】参数设置不同,【连接方式】【设置】参数设置也会有所不同,所以必须按照【连接类型】【连接方式】【设置】的顺序进行参数设置。
2)【集群】参数
指单个数据库连接能够连接抽取多个数据库的数据,单击【集群】参数项,进行【集群】参数设置。如图所示:
在【集群】参数设置中,勾选【使用集群】选项后,才能在【命名参数】表中设置集群参数。【分区ID】参数是指用不同的ID名称标识各个数据库,可以是英文字母、数字、中文等字符或组合。
参数设置完之后,单击【测试】按钮,弹出数据库连接测试是否成功的对话框。若正确,则显示正确连接到数据库信息;若错误,则显示错误连接到数据库的信息,需要重新设置正确的参数。
七、Kettle 建立共享/停止共享数据库连接
为了避免反复创建相同的数据库连接,在多个不同的转换工程或作业任务中共用相同的数据库,可以考虑建立共享的数据库连接。
7.1、建立共享
在建立好的数据库连接装换工程中,单击【主对象树】选项卡,展开【转换】对象树,单击>按钮,展开【DB连接】对象,右键单击数据库连接的名称。
单击【共享】选项,数据库连接共享成功,其他转换工程或任务工程即可共享使用。需要注意的是,共享后的数据库连接名称为粗体字体显示。
7.2、停止共享
数据库连接既可以共享,也可以停止共享。
与共享操作类似,单击【主对象树】选项卡,在【转换】对象树中,单击>按钮展开【DB连接】对象,右键单击显示为粗体字体的数据库连接名称,在弹出快捷菜单中单击【停止共享】选项,即可停止共享该数据库连接。
八、Kettle 表输入
8.1、任务描述
数据表是指具有统一名称,并且类型、长度、格式等元素相同的数据集合,在数据库中,数据是以数据表的形式存储的。
表输入的作用是抽取数据库中的数据表,并获取表中的数据。
为方便查看和统计学生的数学考试分数,需要通过表输入抽取某年级某次考试的数据成绩。
8.2、实现思路
- 建立【表输入】转换工程
- 设置【表输入】组件参数
- 预览数据
8.3、操作过程
1)建立表输入转换工程
在demodb数据库中的“数学成绩”表,字段说明如表所示。
使用Ctrl+N快捷键,创建【表输入】转换工程,对所使用到的表进行数据库连接创建操作,并测试结果为成功。
在【表输入】转换工程中,单击【核心对象】选项卡,展开【输入】对象,选中【表输入】组件,并拖拽到右边工作区中。
双击【表输入】组件,弹出【表输入】对话框,如图所示。
2)设置参数
在【表输入】对话框中,设置有关参数,获取MySQL的demodb数据库中的“数学成绩”表,步骤如下:
1)设置组件名称。设置【步骤名称】为默认值“表输入”。
2)设置数据库连接。单击【数据库连接】下拉框,选择所创建的链接。
浏览数据表。单击【获得SQL查询语句…】按钮,弹出【数据库浏览器】对话框,单击按钮展开数据库,再单击俺就展开【表】数据表,显示所需要浏览的表(本教程以demodbConn数据库中的数学成绩表为例)。选择【数学成绩】表。
查看选中的数据表信息。单击【动作】按钮,弹出快捷菜单选项,可以分别预览数据库表的数据、记录数、表结构、生成SQL语句、裁剪表和查看表的有关信息等,如图所示。
确认获取数据表的SQL查询语句。单击【确定】按钮,弹出【问题?】对话框,显示【你想在SQL里面包含字段名吗?】提示信息,如图所示。
单击【否】按钮,在【SQL】表达式参数中获取的是简单的SQL查询语句,如图所示,其他参数采用默认值,此时完成【表输入】组件参数的设置。
标签:单击,步骤,数据库,Kettle,工具,数据,连接,ETL From: https://www.cnblogs.com/wq-99/p/18153016