一、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 查询语句,如图所示,其他参数采用默认值,此时完成【表输入】组件参数的设置。
8.4、预览结果数据
单击【预览】按钮,在弹出【输入预览记录数量】对话框中,预览记录数量采用默认值,单击【确认】按钮。弹出【预览数据】对话框,展示表输入的数据,如图所示。
九、Kettle Excel 输入
9.1、任务描述
Excel 采用表格的形式,数据展示直观,操作方便。
与文本文件不同,Excel 文件中采用工作表存储数据,一个文件有多张不同名称的工作表,分别存放相同字段或不同字段的数据。
为方便浏览表中的明细数据,需要通过 Excel 输入抽取相应的数据。
9.2、实现思路
- 建立【Excel 输入】转换工程。
- 设置【Excel 输入】组件参数。
- 预览结果数据。
9.3、操作过程
1)建立 Excel 输入转换工程
本教程以 “物理成绩. xls” 文件为例,字段说明如下表所示:
字段名称 | 说明 | 字段名称 | 说明 |
序号 | 表示记录的顺序号 | 物理 | 表示物理考试分数 |
学号 | 表示学生在学校的唯一编号 | 考试时间 | 表示考试的日期和时间 |
使用 Ctrl+N 快捷键,创建【Excel 输入】转换工程,单击【核心对象】选项卡,展开【输入】对象,选中【Excel 输入】组件,并拖拽到右边工作区中,如图所示。
2)设置参数
双击【Excel 输入】组件,弹出【Excel 输入】对话框,其中显示默认的【文件】对话框,如图所示。
在【Excel 输入】对话框中,包含组件的基础参数,以及【文件】【工作表】【内容】【错误处理】【字段】【其他输出字段】6 个选项卡的参数。
在组件的基础参数中,【步骤名称】参数表示【Excel 输入】组件名称,在单个转换工程中,名称必须唯一,采用默认值 “Excel 输入”。
【文件】【工作表】【字段】选项卡的参数是必填项(没有设置参数时,选项卡名称签名会显示 “!”,表示是必填项,设置参数后“!” 会消失),并且必须按照【文件】【工作表】【字段】选项卡的顺序设置,其他为可选项。
- 【文件】选项卡参数
在【文件】选项卡中,设置参数,并导入 “物理成绩. xls” 文件,步骤如下:
a)浏览导入 Excel 文件。单击【浏览 (B)…】按钮,在计算机上浏览并导入“物理成绩. xls” 文件,如图所示。
b)添加并编辑 Excel 文件。单击【增加】,将浏览导入至【文件或目录】输入框中的 “E:\data \ 物理成绩. xls” 文件,添加至【选中的文件】表中,如图所示。
如果选中的文件有问题,那么单击【删除】或【编辑】按钮,可对选中的 Excel 文件进行编辑。其中,单击【选中的文件】表的行号,再单击【删除】按钮,即可删除选中所在行的文件。
c)查看被选中的文件名称.。单击【显示文件名称…】按钮,弹出【文件读取】对话框,查看被选中读取的文件,如图所示。
重复上述 a)~ c)个步骤可添加多个 Excel 文件,并查看读取的文件名称。
另外,如果需要导入同一个目录下的多份名称类似的文件,如导入同一个目录下名称分别为 “物理成绩. xls”“物理成绩 1.xls” 和“物理成绩 2.xls”的文件,可以使用通配符的方式导入。
具体操作为,在【选中的文件】参数表中,在【文件或目录】输入框中键入 “E:\data”,在【通配符号】输入框中输入 “物理成绩 *.\xls”,可以一次性读入这 3 个文件,如图所示。
- 【工作表】选项卡参数
单击【工作表】选项卡,如图所示。
在【要读取的工作表列表】表中设置工作表参数,获取导入的 Excel 文件的工作表,【工作表】选项卡参数的说明如表所示。
参数名称 | 说明 |
工作表名称 | 表示 Excel 文件的工作表名称。可以是一个 Excel 文件、多个工作表,也可以是多个 Excel 文件、多个工作表。不同的文件,工作表名称可以相同。默认值为空。 |
起始行 | 表示要读取的工作表中的开始行,行号是从 0 开始。默认值为空。 |
起始列 | 表示要读取的工作表中的开始列,列号是从 0 开始。默认值为空。 |
如果导入的 Excel 文件中的每个工作表的字段结构都相同,那么在【要读取的工作表列表】表中的第 1 行,不设置任何工作表名称(即【工作表名称】输入栏留空),只需设置第 1 行的【起始行】和【起始列】输入栏参数,这样的设置是读取所有的工作表,即第 1 行
将用于所有工作表。
在【工作表】选项卡中,设置导入的 Excel 文件的工作表参数,步骤如下:
a)获取选中文件的工作表。单击【获取工作表名称…】按钮,弹出【输入列表】对话框,左边【可用项目】列表列出选中文件的所有工作表,如 “物理成绩. xls” 文件的 “Sheet1” 工作表,而右边【你的选择】列表列出被选中的工作表,如图所示。
b)选择工作表。在【输入列表】对话框中,单击中间的【>】【>>】【<】【<<】按钮,可以在左、右列表中,选中或移除工作表,有关按钮说明如表所示
按钮 | 说明 |
> | 表示右移按钮,选择左边【可用项目】列表中一个工作表,移到右边【你的选择】列表中。 |
< | 表示左移按钮,将右边【你的选择】列表中的一个工作表移回到左边【可用项目】列表中,与【>】按钮操作相反。 |
>> | 表示右移批处理按钮,将左边【可用项目】列表中的所有工作表,移到右边【你的选择】列表中。 |
<< | 表示左移批处理按钮,将右边【你的选择】列表中的所有工作表,移回到左边【可用项目】列表中,与【>>】按钮操作相反。 |
在【输入列表】对话框中,将左边【可用项目】工作表 “Sheet1” 选中移到右边【你的选择】表中。
c)设置选中的工作表参数。单击【确定】按钮,将【你的选择】列表选中的 “Sheet1” 工作表添加至【要读取的工作表列表】表中进行参数设置,【起始行】和【起始列】参数都设置为“0”,此时完成【工作表】选项卡参数的设置,如图所示。
- 【字段】选项卡参数
单击【字段】选项卡如图所示。
在【字段】选项卡中,设置 “物理成绩. xls” 文件中字段的参数,步骤如下。
a)获取字段。单击【获取头部数据的字段…】按钮,添加字段到【字段】表中设置字段参数,如图所示。
b)设置字段参数。对字段参数进行设置,如图所示,此时完成【字段】选项卡参数的设置。
需要说明的是,如果有些 Excel 文件的文件头部没有字段数据,那么系统会自动生成默认的字段名称,也可以重新编辑字段名称,字段的类型、长度等,字段的属性也可以进行编辑。
当获取字段后,【Excel 输入】对话框下方【预览记录】按键的字体显示为黑色,说明此时可以预览数据。
- 【内容】选项卡参数
单击【内容】选项卡,如图所示。
对读取 Excel 文件内容进行参数设置,一般按照缺省值配置,参数的说明如表所示。
参数名称 | 说明 |
头部 | 表示对选中的工作表是否包含表头行。默认值为√。 |
非空记录 | 表示是否在输出中不出现空行(记录)。默认值为√。 |
停在空记录 | 表示当读取记录遇到空行时,选择是否停止读取文件的当前工作表。默认值为空。 |
限制 | 表示限制生成的记录数量。当设置为 0 时,结果不受限制。默认值为 0. |
编码 | 表示读入的文本文件编码。第一次使用时,Kettle 会在系统中搜索可用的编码。使用 Unicode 的,请指定 UTF-8 或 UTF-16。默认值为 Kettle 系统的编码。 |
- 【错误处理】选项卡参数
单击【错误处理】选项卡,如图所示,可对获取 Excel 文件时产生的错误处理参数进行设置,检查和定位错误位置,一般按照缺省值配置。
- 【其他输出字段】选项卡参数
单击【其他输出字段】选项卡,如图所示。
对 Excel 文件的其他输出字段参数进行设置,用于指定处理文件的附加信息,默认值为空,一般按照缺省值配置,有关参数的说明如表所示。
字段参数 | 说明 |
文件名称字段 | 表示指定完整的文件名称和扩展名的字段。默认值为空。 |
工作表名称字段 | 表示指定要使用的工作表名称的字段。默认值为空。 |
表单的行号列 | 表示指定要使用的当前工作表行号字段。默认值为空。 |
行号列 | 表示指定写入行数的字段。默认值为空。 |
文件名字段 | 表示指定文件名但没有路径信息、但有扩展名的字段。默认值为空。 |
扩展字段 | 表示指定文件名扩展名的字段。默认值为空。 |
路径字段 | 表示指定以操作系统格式包含路径的字段。默认值为空。 |
文件大小字段 | 表示指定文件数据大小的字段。默认值为空。 |
是否为文件隐藏字段 | 表示文件是否为隐藏的字段(布尔值)。默认值为空。 |
Uri 字段 | 表示指定包含 Uri 的字段。默认值为空。 |
Root Uri 字段 | 表示指定仅包含 Uri 的根部分的字段。默认值为空。 |
设置好字段参数后,单击【预览记录】按钮,弹出【预览数据数量】对话框,要预览的行数采用默认值,并单击【确定】按钮。
弹出【预览数据】对话框,展示 Excel 输入的数据,如图所示。
十、Kettle 生成记录
10.1、任务描述
在数据统计中,往往要生成固定行数和列数的记录,用于存放统计总数。
为方便记录 1-12 月份商品的销售总额,需要通过生成记录,生成一个月销售总额的数据表,包括商品名称和销售总额两个字段,记录销售的商品和当月商品统计销售总额,共生成 12 条记录。
10.2、实现思路
- 建立【生成记录】转换工程。
- 设置【生成记录】组件参数。
- 预览结果数据。
10.3、操作过程
1、建立【生成记录】转换工程
使用 ctrl+N 快捷键,创建【生成记录】转换工程,单击【核心对象】,展开【输入】对象,选中【生成记录】组件,并拖拽到右边工作区中,如图所示:
2、设置参数
双击【生成记录】组件,弹出创建【生成记录】对话框,如图所示:
该组件参数包含两种,分别是基础参数:步骤名称、限制、“Never stop generating rows” 和【字段】:名称、类型、格式、长度、精度、货币类型、小数、分组、值、设为空串?。
根据需要设置好相关参数后,生成 12 条记录的商品销售总额表,步骤如下:
1)确定组件名称。【步骤名称】参数保留默认值。
2)确定表的记录数。【限制】参数设置为 “12”。
3)设置字段参数。在【字段】表中,对个字段的参数进行设置,如图所示,此时完成【生成记录】组件参数的设置。
3、预览数据结果
单击【预览 (P)】按钮,弹出【输入预览记录数】对话框,预览记录数采用默认值,单击【确定】按钮。弹出【预览数据】对话框,展示生成记录的数据,如图所示:
十一、Kettle 生成随机数
11.1、任务描述
在工作中,往往需要生成随机数验证码,作为数据或文件的验证码。
为方便给授权用户验证文件,需要通过生成随机数,生成一组 MD5 信息授权码,作为数据文件的认证授权码。
11.2、实现思路
- 建立【生成随机数】转换工程
- 设置【生成随机数】组件参数
- 预览结果参数
11.3、操作过程
1、简历生成随机数转换工程
使用 ctrl+N 快捷键,创建【生成随机数】转换工程,单击【核心对象】,展开【输入】对象,选中【生成随机数】组件,并拖拽到右边工作区中,如图所示:
2、设置参数
双击【生成随机数】组件,弹出【生成随机值】对话框,如图所示:
【生成随机数】组件的参数,包含组件的基础参数和【字段】表参数。
在【生成随机值】对话框中,设置参数,随机生成一组 MD5 信息授权码,步骤如下:
1)确定组件名称。【步骤名称】参数保留默认值 “生成随机值”。
2)设置字段参数。在【字段】表中第 1 行,设置字段名称和类型。
①点击【名称】参数输入框,键盘键入 “授权码”。
②单击【类型】参数输入框,弹出【选择数据类型】对话框,选择【Random Message Authentication Code(HmacMD5)】类型,如图所示。
3、预览结果数据
在【生成随机数】转换工程中,单击【生成随机数】组件,再从工作区上方调出【转换调试窗口】对话框,展示生成随机数的数据,如图所示。
单击【快速启动】按钮,弹出【预览数据】对话框,展示生成随机数的授权码数据,如图所示。
十二、Kettle 获取系统信息
12.1、相关概念
系统信息是指 Kettle 系统环境的信息,包括了计算机系统的日期、星期等时间类型信息,计算机名称、IP 地址等设备信息,Kettle 系统转换过程中的信息等。
为方便读取计算机上到本月最后一天的交易数据文件,需要通过获取系统信息,获得当月最后一天的时间以及当前计算机名称与 IP 地址等系统信息。
12.2、实现思路
- 建立【获取系统信息】转换工程。
- 设置【获取系统信息】组件参数。
- 预览结果数据。
12.3、操作过程
1)建立获取系统信息转换工程
使用 Ctrl+N 快捷键,创建【获取系统信息】转换工程,单击【核心对象】选项卡,展开【输入】对象,选中【获取系统信息】组件,并拖拽到右边工作区中,如图所示:
2)设置参数
双击【获取系统信息】组件,弹出【获取系统信息】对话框,如图所示:
【获取系统信息】组件的参数包含组件的基础参数,以及【字段】表参数。
在【获取系统信息】对话框中,设置参数,获取当月最后一天的时间,以及当前的计算机名称与 IP 地址等系统信息,步骤如下:
1)确定组件名称。【步骤名称】参数保留默认值。
2)设置字段参数。在【字段】表中,设置字段参数。
①设置第 1 行参数。【名称】参数设置为 “当月最后一天”。单击【类型】输入框,弹出【选择信息类型】对话框。选择“本月最后一天的 23::59:59” 类型,如图所示,并单击【确定】按钮。
②设置第 2 行参数。与设置第 1 行参数类似,第 2 行参数的【名称】参数设置为 “计算机名称”,【类型】参数设置为 “主机名”。
③设置第 3 行参数。与设置第 1 行参数类似,第 3 行参数的【名称】参数设置为 “IP 地址”,【类型】参数设置为 “IP 地址”,如图所示,此时已完成【获取系统信息】组件的参数设置。
3)预览结果数据
单击【浏览记录】按钮,弹出【Enter preview size】对话框,预览记录数采用默认值,单击【确定】按钮。弹出【预览数据】对话框,展示获取系统信息的数据,如图所示。
十三、Kettle 排序记录
13.1、任务描述
排序是对数据中的无序记录,按照自然或客观规律,根据关键字段大小递增或递减的次序,对记录重新排列的过程。
为了得出学生的成绩排名,需要对 “2019 年 11 月月考数学成绩. xls” 文件,使用【排序记录】组件,对学生的成绩从低到高排序。
13.2、实现思路
- 建立【排序记录】转换工程。
- 设置【排序记录】组件参数。
- 预览结果数据。
13.3、操作过程
1)建立排序记录转换工程
使用 Ctrl+N 快捷键,创建【排序记录】转换工程,接着创建【Excel 输入】组件,设置参数,导入 ““2019 年 11 月月考数学成绩. xls” 文件,预览数据,如图所示,其中 “数学” 字段数据处于无序状态。
在【排序记录】转换工程中,单击【核心对象】选项卡,展开【转换】对象,选中【排序记录】组件,并拖拽至右边工作区中。由【Excel 输入】组件指向【排序记录】组件,建立节点连接,如图所示:
2)设置参数
双击【排序记录】组件,弹出【排序记录】对话框,如图所示:
【排序记录】组件的参数包含了组件的基础参数和【字段】表参数,有关参数的说明如表所示。其中,【字段】表参数是设置参与排序的字段参数,可以对多个字段设置参数。
在【排序目录】对话框中,设置参数,将 “数学” 字段的数据按照从低到高进行排序,步骤如下:
1)确定组件名称。【步骤名称】参数保留默认值 “排序记录”。
2)确定排序目录。【排序目录】参数保留默认值 “%%java.io.tmpdir%%”。
3)设置排序字段参数。在【字段】表中,对各字段的参数进行设置,此时完成【排序目录】组件参数的设置,如图所示:
3)预览结果数据
在【排序记录】排序工程中,单击【排序记录】组件,再点击预览数据,展示排序后的数据,如图所示:
十四、Kettle 去除重复记录
14.1、任务描述
由于输入或其他错误的原因,数据文件中可能出现两条或多条数据完全相同的记录,这些相同的记录成为重复记录。
重复的记录属于 “脏数据”,会造成数据统计和分析不正确,必须清洗掉重复记录。
由于在 “期考成绩. xls” 文件中,发现存在序号不同,但是学号、各科考试成绩完全相同的记录,所以需要使用【去除重复记录】组件,去除这些重复的数据。
14.2、实现思路
- 建立【去除重复记录】转换工程。
- 设置【去除重复记录】组件参数。
- 预览结果数据。
14.3、操作过程
1)建立去除重复记录转换工程
- 在去除重复记录(简称 “去重”)之前,必须使用关键字段对数据记录进行排序,确定哪些记录属于重复记录。
- 使用 Ctrl+N 快捷键,创建【去除重复记录】转换工程。接着创建【Excel 输入】组件,设置参数,导入 “期考成绩. xls” 文件。
- 接着创建【排序记录】组件,并由【Excel 输入】组件指向【排序记录】组件,简历节点连接,如图所示:
-
双击【排序记录】组件,对 “学号” 字段按照升序进行排序后预览数据,如图所示,除了 “序号” 字段数据外,“学号”分贝为 “201709023”“201709028” 的数据各有两条记录,并且对应的 “语文”“数学” 等考试科目和 “创建时间” 的数据也相同。
-
在【去除重复记录】转换工程中,单击【核心对象】选项卡,展开【转换】对象,选中【去除重复记录】组件,并拖拽至右边工作区中,并由【排序记录】组件指向【去除重复记录】组件,建立节点连接,如图所示:
2)设置参数
双击【去除重复记录】组件,弹出【去除重复记录】对话框,如图所示:
【去除重复记录】组件的参数包含了组件的基础参数和【用来比较的字段】表参数。
在【去除重复记录】对话框中,设置参数,去除学号相同的记录,步骤如下:
1)确定组件名称。【步骤名称】参数保留默认值 “去除重复记录”。
2)确定计数器字段。【增加计数器到输出】设置为 “√”,【计数器字段】设置为 “重复行数”。
3)确定错误描述。【重定向重复记录】设置为 “√”,【错误描述】设置为 “重复输入”。
4)设置用来比较字段参数,在【用来比较的字段】表中,【字段名称】设置为 “学号”,【忽略大小写】设置为 “N”,此时完成【去除重复记录】组件参数的设置,如图所示。
3)预览结果数据
在【去除重复记录】转换工程中,单击【去除重复记录】组件,点击预览去除重复记录后的数据,如图所示:
十五、Kettle 替换 NULL 值
15.1、任务描述
在 Kettle 转换过程中,默认情况下,会将控制当做 NULL 值处理。如果数据类型字段出现 NULL 值,那么在计算时就会出现错误。
在 “2019 年 11 月月考英语成绩. xls” 文件中,学号为 “201709007” 的同学没有参加考试,根据规定高考时分数将按零分处理,需要使用【替换 NULL 值】组件,使用 “0” 替换该同学的英语考试分数。
15.2、实现思路
1)建立【替换 NULL 值】转换工程。
2)设置【替换 NULL】组件参数
3)预览结果数据。
15.3、操作过程
1)建立替换 NULL 值转换工程
使用 Ctrl+N 快捷键,创建【替换 NULL 值】转换工程。接着创建【Excel 输入】组件,设置参数,导入 “2019 年 11 月月考英语成绩. xls” 文件,预览数据,“学号”字段数据为 “201709007” 所对应的 “英语” 字段数据为 “
在【替换 NULL 值】转换工程中,单击【核心对象】选项卡,展开【应用】对象,选中【替换 NULL 值】组件,并拖拽至右边工作区中。由【Excel 输入】组件指向【替换 NULL 值】组件,建立节点连接,如图所示:
2)设置参数
双击【替换 NULL 值】组件,弹出【替换 NULL 值】对话框,如图所示:
【替换 NULL 值】组件的参数包含了组件的基础参数和【替换所有字段的 null 值】【选择字段】【选择值类型】3 种方式设置的参数,每种方式有多个不同的参数,有关参数的说明如表所示。
基础参数名称 | 说明 |
作业名称 | 表示【替换 NULL 值】组件名称,在单个转换工程中,名称必须唯一,默认值是【替换 NULL 值】组件名称。 |
选择字段 | 表示对所有记录的、指定字段的 NULL 值进行值替换的方式。默认值为空。 |
选择值类型 | 表示对所有记录、指定的数据类型的 NULL 值进行替换的方式。默认值为空。 |
下图这 3 种方式只能三选一,默认是【替换所有字段的 null 值】方式,勾选【选择字段】参数后,通过【字段】表设置具体参数;勾选【选择值类型】参数后,通过【值类型】表设置具体参数。
参数名称 | 说明 |
替换所有字段的 NULL 值 | 表示对所有记录、所有字段的 NULL 值进行替换方式,默认的替换方式。具体如下: 1)值替换为:表示用来替换 NULL 的值,默认值为空。 2)设置空字符串:表示是否设置空字符串,默认值为空。 3)掩码(日期):表示日期字段的掩码格式,默认值为空。 |
字段 | 表示勾选【选择字段】参数后,使用【字段】表设置参数,具体如下: 1)字段:表示输入流的字段名称,单击下拉框选择设置。 2)值替换为:表示要替换 NULL 的值。 3)转换掩码(日期):表示日期字段的掩码格式,默认值为空。 4)设置空字符串:表示是否设置空字符串,选项有:是、否,默认值为空。 |
值类型 | 表示勾选【选择值类型】参数后,使用【值类型】表设置参数,具体如下: 1)字段:表示输入流的字段名称,单击下拉框选择设置。 2)值替换为:表示要替换 NULL 的值。 3)转换掩码(日期) :表示日期字段的掩码格式,默认值为空。 4)设置空字符串:表示是否设置空字符串,选项有:是、否,默认值为空。 |
在【替换 NULL 值】对话框中,设置参数,用 “0” 替换 “英语” 字段的数据“null”,步骤如下:
1)确定组件名称。【步骤名称】参数保留默认值 “替换 NULL 值”。
2)选择【选择字段】方式设置字段参数。【选择字段】设置为 “√”,并在【字段】表中,对字段的参数进行设置。此时完成【替换 NULL 值】组件参数的设置,如图所示。
3)预览结果数据
在【替换 NULL 值】转换工程中,单击【替换 NULL 值】组件,预览替换 NULL 值后的数据,如图所示:
十六、Kettle 过滤记录
16.1、任务描述
在数据处理时,往往要对数据所述类别、区域和时间等进行限制,将限制范围外的数据过滤掉。
为了统计 2 班的考试人数和成绩,需要对 “2019 年 10 月年级月考数学成绩. xls” 文件,使用【过滤记录】组件,过滤掉不是 2 班的数据。
16.2、实现思路
- 建立【过滤记录】转换工程。
- 设置【过滤记录】组件参数。
- 预览结果数据。
16.3、操作过程
1)建立过滤记录转换工程
使用 Ctrl+N 快捷键,创建【过滤记录】转换工程。接着创建【Excel 输入】组件,设置参数,导入 “2019 年 10 月年级月考数学成绩. xls” 文件,预览数据,如图所示,文件包括有 1 班、2 班的数据。
在【过滤记录】转换工程中,单击【核心对象】选项卡,展开【流程】对象,选中【过滤记录】组件,并拖拽至右边工作区中。由【Excel 输入】组件指向【过滤记录】组件,建立节点连接,如图所示:
2)设置参数
双击【过滤记录】组件,弹出【过滤记录】对话框,如图所示:
【过滤记录】组件的参数包含组件的基础参数和【条件】表达式参数,有关参数的说明如表所示。
参数名称 | 说明 | |
基础参数 | 步骤名称 | 表示【过滤记录】组件名称,在单个转换工程中,名称必须唯一,默认值为【过滤记录】组件名称。 |
发送 true 数据给步骤 | 表示当条件为 true 时,记录被发送到此组件(步骤)。此参数也可以在与下一个组件(步骤)进行节点连接是设置,默认值为空。 | |
发送 false 数据给步骤 | 表示当条件为 false 时,记录被发送到此组件(步骤)。此参数也可以在与下一个组件(步骤)进行节点连接是设置,默认值为空。 | |
条件 | 表示过滤条件的表达式,在【条件】表达式输入框中设置表达式中各个参数默认值为空。 |
条件表达式是由条件函数(运算符)构成的一个赋值语句,格式为:<字段>< 条件函数 >< 表达式 >,格式的中间为比较函数,左边为字段,右边是值表达式,如 a=5、a>(b+2)、a<=10 等。为了方便读者理解,在【条件】表达式输入框中,增加了条件表达式设置的指向说明,如图所示:
1)增加子条件
单击 + 图表可以增加子条件,这时在【条件】表达式输入框中,显示出增加的条件表达式,初次生成的是一条 “null=[]” 的空表达式,如图所示:
单击 “null=[]” 空表达式,可对该表达式进行设置,如图所示,点击 “向上” 按钮可以向上切换回条件表达式。
右键单击子条件表达式,弹出右键快捷菜单,可以对子条件进行编辑、删除、复制、粘贴、移动位置等操作,如图所示:
2)选择输入流的字段
单击 “选择输入流字段” 指向的【
3)选择比较函数
单击 “比较函数” 指向的【=】函数输入框,弹出【函数】对话框,并列出过滤比较函数,有关过滤比较函数的说明如表所示(部分):
函数名称 | 说明 |
REGEXP | 表示正则表达式,判断表达式字段是否与模式匹配。 |
IN NULL | 表示为空,判断表达式字段是否为空。 |
IS NOT NULL | 表示不为空,判断表达式字段是否不为空。 |
IN LIST | 表示在列表中,判断表达式字段是否在指定的 list 列表中。 |
CONTAINS | 表示包含,判断表达式字段是否包含右边的值。 |
STARTS WITH | 表示以什么开始,判断表达式字段是否以右边的值开始。 |
ENDS WITH | 表示以什么结束,判断表达式字段是否以右边的值结束。 |
LIKE | 表示包括,判断表达式字段是否包括右边的值。 |
TRUE | 表示真,判断表达式字段是否为真。 |
选择 “=” 的过滤比较函数,单击【确定】,确认过滤比较函数。
4)输入比较的值
单击 “输入要比较的值” 指向的【
- 有关【E 输入一个值】对话框中的参数的说明如表所示。需要注意,若设置 “输入要比较的值” 指向的【
】值参数,则不能设置 “选择要比较的字段” 指向的【 】字段参数,二者只能选其一。
参数名称 | 说明 |
类型 | 表示值的类型。类型选项有:BigNumber、Binary、Boolean、Date、Integer、Internet、Address、Number、String、Timestamp。默认值为 String。 |
值 | 表示值,可以是具体值或表达式,默认值为 1. |
转换格式 | 表示值的转换格式,默认值为空。 |
长度 | 表示值的长度,默认值为 - 1。 |
精度 | 表示值的精度,默认值为 - 1。 |
5)选择比较字段
单击 “选择要比较的字段” 指向的【
6)条件取反
鼠标移向 “条件取反” 指向的输入框,显示出黑底红字的“NOT”,单击该输入框并移开鼠标,此时显示白底黑字的“NOT”,表示条件取反,即若表达式为 true,则条件为 false。
若表达式为 false,则条件 true。“条件取反” 指向的输入框为一个奇偶输入框,单击取反,再次单击则取正。
在导入的 “2019 年 10 月年级月考数学成绩. xls” 文件中,过滤掉不是 2 班的数据,对条件表达式按照下表的设置。
输入流【<filed>】字段 | 【=】比较函数 | 【<Value>】输入一个值 |
班级 | = | 单击【<field>】输入框,弹出【E 输入一个值】对话框,对参数进行设置,如下图所示。 |
此时完成【过滤记录】组件参数的设置,如图所示:
3)预览结果数据
在【过滤记录】转换工程中,单击【过滤记录】组件,预览过滤记录后的数据,如图所示:
十七、Kettle 值映射
17.1、任务描述
- 在数据处理系统中,为了加快处理速度、减少内存和存储空间消耗,往往使用数字、字母,或他们的组合表示真实的数据含义,例如,用 “1” 和“0”分别表示性别,难以直接看懂。
- 在某校学生的 “学籍信息. xls” 文件中,性别字段数据分别用 “1” 和“0”表示。为了更加直观、一目了然地读懂学生的学籍信息,需要使用【值映射】组件,还原其对应的值 “男” 或“女”。
- kettle 值映射能够解决这一需求。
17.2、实现思路
- 建立【值映射】转换工程。
- 设置【值映射】组件参数。
- 预览结果数据。
17.3、操作过程
1)建立值映射转换工程
使用 Ctrl+N 快捷键,创建【值映射】转换工程。接着创建【Excel 输入】组件,设置参数,导入 “学籍信息. xls” 文件,预览数据,如图所示。
-
当前数据中,“性别”字段的数据,以 “0” 或“1”表示;
-
“学籍”字段的数据,以 “H” 或“J”表示;
-
“籍贯” 字段有一些数据前面有空格。
在【值映射】转换工程中,单击【核心对象】选项卡,展开【转换】对象,选中【值映射】组件,并拖拽至右边工作区中。由【Excel 输入】组件指向【值映射】组件,建立节点连接,如图所示。
2)设置参数
双击【值映射】组件,弹出【值映射】对话框,如图所示。
将 “性别” 字段中 “1”“0” 数据分别用 “男”“女” 映射替换,对参数进行设置。此时完成【值映射】组件参数的设置,如图所示。
3)预览结果数据
在【值映射】转换工程中,单击【值映射】组件,预览进行值映射操作后的数据,如图所示。
十八、Kettle 字符串替换
18.1、任务描述
字符串替换与值映射非常类似,不同之处在于字符串替换的字段值是字符串,值映射的字段可以是多种数据类型。
由于在 “学籍信息. xls” 文件中,学籍数据用 “H” 或“J”表示,需要使用【字符串替换】组件,分别还原其对应的值 “户籍生” 和“借读生”。
18.2、实现思路
- 建立【字符串替换】转换工程。
- 设置【字符串替换】组件参数。
- 预览结果数据。
18.3、操作过程
1)建立字符串替换转换工程
使用 Ctrl+N 快捷键,创建【字符串替换】转换工程。接着创建【Excel 输入】组件,设置参数,导入 “学籍信息. xls” 文件。
在【字符串替换】转换工程中,单击【核心对象】选项卡,展开【转换】对象,选中【字符串替换】组件,并拖拽至右边工作区中。由【Excle 输入】组件指向【字符串替换】组件,建立节点连接,如图所示。
2)设置参数
双击【字符串替换】组件,弹出【字符串替换】对话框,如图所示。
【字符串替换】组件的参数包含组件的基础参数和【字段】表参数,有关参数说明如表所示。
参数名称 | 说明 | |
基础参数 | 步骤名称 | 表示【字符串替换组件名称】,在单个转换工程中,名称必须唯一。默认值是【字符串替换】组件名称。 |
字段 | 表示对将要进行字符串替换的字段参数,使用一个【字段】表对字段参数进行设置,有关参数说明如下所示。 | |
输入流字段 | 表示要进行字符串替换的输入流字段。默认值为空。 | |
输出流字段 | 表示进行字符串替换后的输出流字段,为空时覆盖原来要进行替换的输入流字段,默认值为空。 | |
使用正则表达式 | 表示是否使用正则表达式,选项有:Y、N。默认值为空。 | |
搜索 | 表示是否搜索此次字符串的匹配值,默认值为空。 | |
使用… 替换 | 表示要替换匹配值的字符串数据,默认值为空。 | |
设置为空串? | 表示是否设置空字符串,选项有:Y、N。默认值为空。 | |
使用字段值替换 | 表示使用一个字段值替换字符串,默认值为空。 | |
整个单词匹配 | 表示是否要整个单词都匹配,选项有:Y、N,默认值为空。 | |
大小写敏感 | 表示是否区分大小写,选项有:Y、N,默认值为空。 | |
In Unicode | 表示是否设置 Unicode,选项有:Y、N,默认值为空。 |
在【字符串替换】对话框中,设置参数,对输入数据中 “学籍” 字段中数据 “H” 和“J”,分别使用 “户籍生” 和“借读生”进行替换,步骤如下:
1)确认组件名称。【步骤名称】保留默认值,设置为 “字符串替换”。
2)确定字段参数。对【字段】表的参数进行设置。此时完成【字符串替换】组件参数的设置,如图所示。
3)预览结果数据
在【字符串替换】转换工程中,单击【字符串替换】组件,预览字符串替换后的数据,如图所示。
十九、Kettle 字符串操作
19.1、任务描述
在数据输入过程中,有时候不小心输入的多余的空格、错误的字符等,字符串操作是指将数据中不需要的字符处理掉,Kettle 字符串操作可以解决这一需求。
由于在 “学籍信息. xls” 文件中,学生学籍信息的籍贯字段数据前后有多余的空格,需要使用【字符串操作】,去除这些空格,规范学籍信息。
19.2、实现思路
- 建立【字符串操作】转换工程。
- 设置【字符串操作】组件参数。
- 预览结果数据。
19.3、操作过程
1)建立字符串操作转换工程
使用 Ctrl+N 快捷键,创建【字符串操作】转换工程。接着创建【Excel 输入】组件,设置参数,导入 “学籍信息. xls” 文件。
在【字符串操作】转换工程中,单击【核心对象】选项卡,展开【转换】对象,选中【字符操作】组件,并拖拽至右边工作区中。由【Excel 输入】组件指向【字符串操作】组件,建立节点连接,如图所示。
2)设置参数
双击【字符串操作】组件,弹出【String operations】对话框,如图所示。
【字符串操作】组件的参数包含组件的基础参数和【The fields to process】表字段参数,有关参数的说明如表所示。
在【String operations】对话框中,设置参数,删除 “籍贯” 字段数据中的空格,步骤如下:
1)确定组件名称。【Step name】参数保留默认值 “字符串操作”。
2)设置字符串操作的字段参数。在【The fields to process】表中设置字段参数,在表第 1 行,单击【In steam field】输入框,在输入流字段中选中 “籍贯” 字段,单击【Trim type】输入框,在选项中选中“both”,其他参数使用默认值。此时完成【字符串操作】组件参数的设置,如图所示。
3)预览结果数据
在【字符串操作】转换工程中,单击【字符串操作】组件,预览进行字符串操作后的数据,如图所示。
二十、Kettle 分组
20.1、任务描述
在进行数据统计中,往往要对类别、区域、型号等范围进行统计,分组是对指定的字段或字段集合的数据进行分组统计,Kettle 分组组件可以解决这一需求。
为了了解各班级和学生的学业情况,需要对 “2019 年 10 月月考英语成绩. xls” 文件,使用【分组】组件,统计各班的人数和平均分数。
20.2、实现思路
- 建立【分组】转换工程。
- 设置【分组】组件参数。
- 预览结果数据。
20.3、操作过程
1)建立分组转换工程
在分组之前,必须使用关键字段对数据记录进行排序,确定哪些记录分组在一起。参考 Kettle 排序记录的操作过程,建立排序并浏览 “2019 年 10 月月考英语成绩. xls” 文件数据。
使用 Ctrl+N 快捷键,创建【分组】转换工程。接着创建【Excel 输入】组件,设置参数,导入 “2019 年 10 月月考英语成绩. xls” 文件。
再创建【排序记录】组件,并由【Excel 输入】组件指向【排序记录】组件,建立节点连接,如图所示。
双击【排序记录】组件,设置 “班级” 字段参数,按照生序排序,预览排序记录数据,如图所示,“1 班”和 “2 班” 分别被排序在一起。
在【分组】转换工程中,单击【核心对象】选项卡,展开【统计】对象,找到【分组】组件,并拖拽到右边工作区中,并由【排序记录】组件指向【分组】组件,建立节点连接,如图所示。
2)设置参数
双击【分组】组件,弹出【分组】对话框,如图所示。
【分组】组件参数包含组件的基础参数,以及【构成分组的字段】和【聚合】字段参数,参数说明如表所示。
参数名称 | 说明 | |
基础参数 | 步骤名称 | 表示分组的组件名称,在单个转换工程中,名称必须唯一。默认值是【分组】的组件名称。 |
包括所有的行 | 表示是否包括所有记录。使用勾选框设置参数,希望在输出中包含所有记录,则勾选,只想输出聚合记录,则不勾选。默认值为空。 | |
排序目录 | 表示指定存储临时文件的目录。分组的记录数超过 5000 个时,必须指定搞一个目录。此参数只有勾选【包括所有的行】参数后才能设置,默认值是系统的标准临时目录 %%java.io.tmpdir%%。 | |
临时文件前缀 | 表示命名临时文件的文件前缀,只有勾选【包括所有的行】参数后才能设置。默认值为 grp。 | |
添加行号,在每个组中重新启动 | 表示是否添加一个记录号,在每个组中从 1 重新启动。勾选此参数时所有记录都包含在输出中,且每个记录都有一个记录号。此参数在勾选【包括所有的行】参数后才有效。默认值为空。 | |
行号列名 | 表示要为每个新组添加记录的字段名称。默认值为空。 | |
总返回一个结果行 | 表示是否即使没有输入记录,也返回结果记录。当没有输入记录时,返回计数为 0。如果只想有输入时才输出结果记录,则此参数不勾选。默认值为空。 | |
构成分组的字段 | 表示分组的字段参数。分组的字段可以有多个,使用一个【构成分组的字段】表设置【分组字段】参数,可以设置多个分组子段。需要注意的是,如果没有分组的字段,那么该表留空来计算整个数据集的聚合函数。默认值为空。 | |
聚合 | 表示聚合字段的参数,使用一个【聚合】表来设置聚合字段名称、聚合方法和输出结果新字段名称,有关聚合字段的参数说明如下内容所示。 | |
名称 | 表示聚合字段的名称,输出结果的新字段名称,默认值为空。 | |
Subject | 表示对其使用聚合方法的对象字段,默认值为空。 | |
类型 | 表示聚合方法。在下拉框中选取聚合方法,默认值为空。 | |
值 | 表示聚合的值,默认值为空。 |
在【分组】对话框中,设置参数,分组统计各班的人数和平均分数,步骤如下:
1)设置组件名称。【步骤名称】参数采用默认值 “分组”。
2)确定分组字段。在【构成分组字段】表的第 1 行,【分组字段】设置为 “班级”。
3)确定聚合字段并设置参数。对【聚合】表的参数进行设置。此时完成【分组】组件参数的设置,如图所示。
3)预览结果数据
在【分组】转换工程中,单击【分组】组件,预览数据分组后的结果,如图所示。
二十一、Kettle 多线程数据优化
这篇文章重点介绍多线程使用同步的配置思想,希望对大家有所帮助。
21.1、 表输出的多线程实例。
步骤的多线程执行方法是通过设置步骤的 “更改开始复制数量” 属性来实现。如果是表格输出控件,选择”ChangeNunberofCopiestoStart..”,然后在 Numberofcopies 的输入框中填入并发的线程数量。
单向程测试:数据量 10W,单线程 14 分钟。
多线程测试:3 线程 7 分钟的运行,效率加倍。“TableOutput 这一步同时执行了 3 个线程,而 TableInput 则以轮询的方式将数据流按行发送到 3 个 “表输出” 线程。
通过以上示例,您可以清楚地看到多线程相对于单线程而言效率的提升。
但是,在多线程”insert/update” 场景中,如果更新的 key 并非惟一,则有可能产生死锁 (多个线程一次更新同一行的数据)
通过以上示例,您可以清楚地看到多线程相对于单线程而言效率的提升。
但是,在多线程”insert/update” 场景中,如果更新的 key 并非惟一,则有可能产生死锁 (多个线程一次更新同一行的数据)
21.2、 ODS 概要
是完全提取还是递增式提取,同步化使用?
配置的示例:
其中一种是增量式的增量条件,另一种是完全抽取,不需要抽取条件。
21.3、 实施步骤
1、从组态表中读取待提取的资料表。
2、job_ods_all_exe 同时执行 10 个线程,收到前一步传递的表名. 数据库名称. 提取类型等参数。
3、job_ods_all_exe,是否按 ETL_TYPE 分发数据是递增式提取还是完全抽取。
4、全量 ODS 和递增 ODS 实现逻辑:
二步是通过 “表输入” 步骤查询数据,全量是直接将表 truncate 为 truncate,然后插入数据;deltaODS 是使用插入更新的方式。
有两个必须插入一个更新控件:key. 更新的字段,key 可以将字段以传参的形式传递,需要扩展 etl_ods_table 表字段,配置源表的 key,通常配置三个 key 字段就足够了;kettle 自带的 “insert/update” 控件的 update 域是必选项,这是无法做到通用的,因为不可能所有同步表字段都是相同的,这需要定制插件,将 updatefield 变成必需项:
21.4、 其他配置项目
1、目标表配置:为 etl_ods_table 表中为每一个同步表配置一个目标表,用一个变量来表示目标表用:{taget_table_name},因此,可重复使用组件,提高总体灵活性。
2、资料库连结:设定源表与目标资料表使用资料表连结,以参数化方式,以资料库连结方式,设定资料表结构:
并且为 etl_ods_table 配置一个表,源表和目标表的数据量。据库连接的 ID,查询同步表的信息时,数据库连接的也同时通过参数传递。
二十二、Kettle windows 定时调度作业
本教程使用的 kettle 版本是 7.0,调度之前务必先执行验证作业或转换是可以成功执行的。
22.1、 编写 kettle.bat 脚本
(kitchen.bat 后面可以是 - 也可以是 / 然后再加 options,而 options 后面可以是 = 也可以是: 也可以是空格)
D:cd D:\kettle\pdi-ce-7.1.0.0-12\data-integration
kitchen.bat -rep=product -user=admin -pass=admin -dir=/ -job = 人才生产线 job -level=basic>D:\kettle\JOB.log
顺便解释一下:
1、首先 cd 是进入到 kettle 安装执行文件目录下
-rep 表示仓库名,也就是你的资源库的名称,我的资源库名称就是 product
-user 资源库用户名 这里就是 admin
-pass 资源库密码 默认是 admin ,为了安全我们可以更改密码
-dir 就是你的 job 在资源库中存放目录 支持中文的目录
-job job 的名称 这里我的 job 名称就是:人才生产线 job(job 名字不要带后缀,不然提示找不到 job 错误)
-level 日志的级别 我们普通的写 basic 就可以了,就是最基本的
最后面就是日志了,针对 job 跑起来的相关信息都会保存在 job.log 中
2、针对相关的更多参数如下(options):
/rep : Repository name
/user : Repository username
/pass : Repository password
/job : The name of the job to launch
/dir : The directory (dont forget the leading /)
/file : The filename (Job XML) to launch
/level : The logging level (Basic, Detailed, Debug, Rowlevel, Error, Nothing)
/logfile : The logging file to write to
/listdir : List the directories in the repository
/listjobs : List the jobs in the specified directory
/listrep : List the available repositories
/norep : Do not log into the repository
/version : show the version, revision and build date
/param : Set a named parameter
/listparam : List information concerning the defined parameters in the specified job.
/export : Exports all linked resources of the specified job. The argument is the name of a ZIP file.
注意:
保存 kitchen.bat 文件时,刚开始选的编码是 utf8,此时中文乱码(后改为 Unicode 也是乱码),最后改为 ANSI 就可以了。
22.2、 cmd 测试 bat 脚本
完成 bat 脚本以后,双击测试一下,会跳出 cmd 命令窗口,此时打开 JOB.log 日志记录,会发现已经在执行作业了,等待完成以后,cmd 窗口会自动关闭。接下来就是 Windows 的定时任务来管理调度 bat 脚本了。
22.3、 windows 下建立执行任务
(我的服务器是 Windows Server 2016 Datacenter)
打开控制面板–管理工具–任务计划程序
打开右侧的创建基本任务,填写作业名称,然后下一步打开触发器:
打开触发器,根据自己的需求选择执行频率,然后下一步打开具体的设置:
打开操作,下一步打开具体设置(选择需要执行的 bat 脚本),下一步完成:
至此,Windows 计划任务调度 kettle 作业完成。
二十三、Kettle 增量同步
增量同步的总体思路是:首先,获取此表的增量数据。
如何获得增量?源表需要一个时间字段来代表该记录的最新更新时间(只要该记录发生变化,时间字段就会更新)。
当然,最好有一个时间字段。如果没有,您可能需要进行全表比较等操作;通常,业务系统的表中有主键。在我们获得增量数据后,我们需要判断记录的新插入或更新记录。
如果是更新记录,我们需要先将数据加载到中间表,然后根据主键删除目标表中现有的数据,最后将此增量数据插入目标表。
本教程简单介绍了如何通过 kettle 实现简单的数据增量同步。
job 如下:
如下转换:获取区服列表,将 id 列表保存到结果(内存)
job: 同构数据库单表抽取(每个输入执行一次)
同构数据库单表抽取(job) 的具体实现如下:
转换:获取数据库连接 ID
从结果获取本次输入 id,并设置为变量 parmid
转换:获取数据库连接信息
转换:获取最大时间
获取目标的最大时间并设置变量
获取源表最大时间并设置变量,注(源数据库连接 dblink 为动态连接)
dblink:
转换:删除目标表最后时间点的数据(防止同一秒中出现多条记录,漏数据)
转换:抽取数据
转换:写入 ETL 日志
- 一、Kettle 简介
- 二、Kettle 安装与部署
- 三、Kettle 运行界面与基本概念
- 四、Kettle 读取 CSV 文件
- 五、Kettle 导入文件夹下的多个文件
- 六、Kettle 创建数据库连接
- 七、Kettle 建立共享 / 停止共享数据库连接
- 八、Kettle 表输入
- 九、Kettle Excel 输入
- 十、Kettle 生成记录
- 十一、Kettle 生成随机数
- 十二、Kettle 获取系统信息
- 十三、Kettle 排序记录
- 十四、Kettle 去除重复记录
- 十五、Kettle 替换 NULL 值
- 十六、Kettle 过滤记录
- 十七、Kettle 值映射
- 十八、Kettle 字符串替换
- 十九、Kettle 字符串操作
- 二十、Kettle 分组
- 二十一、Kettle 多线程数据优化
- 二十二、Kettle windows 定时调度作业
- 二十三、Kettle 增量同步
