kettle数据抽取入门
  OlVMtA4u3dhT 2023年11月02日 49 0

一、 编译和运行

地址:

https://github.com/pentaho/maven-parent-poms.git

https://github.com/pentaho/pentaho-kettle.git

切换到9.5.0.0-240版本,JDK使用11版本,编译成功如下图:

kettle数据抽取入门_ci

kettle数据抽取入门_字段_02

构建成功后的文件目录:

D:\mywork\pentaho-kettle\assemblies\client\target

文件名:

pdi-ce-9.5.0.0-240.zip


解压到:D:\data-integration

执行Spoon.bat(windows下)。

启动界面:

kettle数据抽取入门_字段_03

启动后首页:

kettle数据抽取入门_字段_04

二、使用基础

1、功能类型

Kettle功能有两个类型:Job(作业)和Transformation(转换),Transformation完成针对数据的基础转换,job则完成整个工作流的控制。

一个Transformation包含两个部分:Step(步骤)和Hop(跳),Step和Hop在一个Transformation中可以是多个,Step可以将数据发送到Hop,Hop同时可以将数据传递给另一个Step,这样组成了一个Transformation。

一个job可以执行Transformation对数据进行ETL,除了ETL外,job还可以检测数据表、文件是否存在,执行Shell脚本,执行SQL脚本,获取数据,发送邮件等。

kettle数据抽取入门_ci_05

2、Kettel转换 Transformation

转换(transformtion)是ETL解决方案中最主要的部分,它处理抽取、转换、加载各阶段各种对数据的操作。转换包含一个或多个“Step-步骤”,例如读取文件,过滤数据,数据加载等操作都是步骤。转换里的步骤通过“Hop-跳”来连接,跳定义了一个单向通道,允许数据从一个步骤向另一个步骤流动。此外,转换中的每个步骤还可以注释,目的主要是使转换文档化。每个“Transformation-转换”对应的保存文件名称为“xx.ktr”。

kettle数据抽取入门_数据_06

3、Step

Step是转换里的基本组成部分,“CSV文件输入”和“Excel输出”显示了两个Step步骤。每个Step都有唯一的一个名字,一个Step可以有多个输出跳,一个“步骤”的数据有多个输出跳时可以设置数据“分发”或者“复制”,如下图所示,“分发”是目标“步骤”轮流接收数据,“复制”是所有的记录被同时发送到所有的目标“步骤”。

4、Hop

“Hop”就是步骤之间带箭头的连线,连接(或者跳)定义了步骤之间的数据通路。在转换中“Hop”不能循环,因为每个步骤都依赖前一个步骤获取字段值。

“Hop”实际上是两个“Step”之间的记录行的缓存,缓存数据量可以在转换配置中设置,当缓存记录数满了,写数据的步骤停止写入,直到缓存中有空间,当缓存清空后,读取数据的步骤停止读取数据,直到缓存中又有数据。当单机“Hop”时,连线变灰色,代表不使用,再次单机变蓝使用。

5、并行

当“Transformation”启动后,所有“Step”都同时启动,这些“Step”都是并发方式运行,各自从对应的输入跳中读取数据,并把处理过的数据写到输出跳,直到输入跳里不再有数据,就终止步骤的运行,当所有的步骤都终止了,整个转换就停止了。

“Transformation”里的步骤几乎是同时启动的,所以不可能判断出哪个步骤是第一个启动的步骤。如果想要一个任务沿着指定的顺序执行,那么就要使用“Job”。

6、数据类型

数据以数据行的形式沿着步骤移动。一个数据行是零到多个字段的集合,字段包括下面几种数据类型:

String: 字符类型

Number: 双精度浮点数

Integer: 带符号长整型

BigNumber: 任意精度数值

Date: 带毫秒精度的日期时间值

Boolean: 取值为true和false的布尔值

Binary: 二进制字段可以包括图形、声音、视频及其他类型的二进制数据

7、Job

大多数ETL项目都需要完成各种各样的操作,而且这些操作要按照一定顺序完成。因为转换以并行方式执行,就需要一个可以串行执行的作业来处理这些操作。

作业是步骤流,转换是数据流,这是作业和转换的最大区别。

作业的每个步骤必须等到前面的步骤都跑完了,后面的步骤才会执行,而转换会一次性把所有的控件全部先启动(一个控件对应启动一个线程)然后数据流会从第一个控件开始,一条记录,一条记录的流向最后的控件。

一个作业包括一个或多个作业项,这些作业项以某种顺序来执行。作业执行顺序由作业项之间的跳和每个作业项的执行结果来决定。 可以单机作业跳来改变作业跳的状态,有三种状态(锁-必须执行、对号-执行成功时、错号-执行失败时)。

kettle数据抽取入门_ci_07

上图中的“Start”是“job”的起点,一个作业只能定义一个“Start”。上图中每个“转换”就是作业的作业项,作业项是作业的基本构成部分。默认情况下作业中作业项都是以串行的方式制定,只是在特殊的情况下以并行方式执行。

当作业中有多条路径时,会采用回溯算法来执行作业项,如下图:

kettle数据抽取入门_数据_08

回溯算法就是:假设扫行到了图里的一条路径的某个节点时,要依次扫行这个节点的所有子路径,直到没有再可以执行的子路径,就返回该节点的上一节点,再反复这个过程。

上图中的三个作业的执行顺序如下:

1) 首先“开始”作业项搜索所有下一个节点作业项,找到了“A”和“C”

2) 执行“A”

3) 搜索“A”后面的作业项,发现了“B”

4) 执行“B”

5) 搜索“B”后面的作业项,没有找到任何作业项

6) 回到“A”,也没有发现其他作业项

7) 回到Start,发现另一个要执行的作业项“C”

8) 执行“C”

9) 搜索“C”后面的作业项,没有找到任何作业项

10) 回到Start,没有找到任何作业项

11) 作业结束。

以上执行过程就是Start->A->B->C,也有可能是Start->C->A->B。

作业除了以上串行执行外,还可以并行执行:

kettle数据抽取入门_数据_09

每个“Job-作业”对应的保存文件名称为“xx.kjb”。

三、实验

我们的目标是把两张表的性别转换后存在另外一张表中。

数据库创建脚本:


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for person1
-- ----------------------------
DROP TABLE IF EXISTS `person1`;
CREATE TABLE `person1`  (
  `id` int(11) NULL DEFAULT NULL,
  `name` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
  `age` int(11) NULL DEFAULT NULL,
  `gender` int(11) NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of person1
-- ----------------------------
INSERT INTO `person1` VALUES (1, 'zs', 18, 1);
INSERT INTO `person1` VALUES (2, 'ls', 19, 0);
INSERT INTO `person1` VALUES (3, 'ww', 20, 1);

-- ----------------------------
-- Table structure for person2
-- ----------------------------
DROP TABLE IF EXISTS `person2`;
CREATE TABLE `person2`  (
  `id` int(11) NULL DEFAULT NULL,
  `name` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
  `age` int(11) NULL DEFAULT NULL,
  `gender` varchar(10) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of person2
-- ----------------------------
INSERT INTO `person2` VALUES (4, 'ml', 21, 'f');
INSERT INTO `person2` VALUES (5, 'tq', 22, 'f');
INSERT INTO `person2` VALUES (6, 'zb', 23, 'm');

-- ----------------------------
-- Table structure for person3
-- ----------------------------
DROP TABLE IF EXISTS `person3`;
CREATE TABLE `person3`  (
  `id` int(11) NULL DEFAULT NULL,
  `name` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
  `age` int(11) NULL DEFAULT NULL,
  `sex` varchar(10) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

1、新建一个转换。

2、在输入里面拖动两个表输入图标。

(1)新建数据库连接:

双击表输入图标,点“数据库连接”后面的“新建按钮”,如下图,设置数据库连接。


kettle数据抽取入门_字段_10

点测试按钮:

kettle数据抽取入门_数据_11

(2)输入sql语句

SELECT id,name,age,gender FROM kettle.person1

如下图:

kettle数据抽取入门_数据_12

3、在输出里面拖动一个表输出图标。

(1)目标模式

填写数据库名称

(2)目标表

填写表名称

(3)数据库字段

点获取字段,删除gender字段后剩四个:

kettle数据抽取入门_ci_13

4、在转换里面拖动两个value mapper图标。

(1)建立连线

方法是选中一个图标按住shift连接到另外一个图标。

最终效果如下:

kettle数据抽取入门_数据_14

(2)使用的字段名:选择gender

(3)目标字段名(空=覆盖):sex

(4)不匹配时的默认值:无性别

(5)字段值映射

如下图:

kettle数据抽取入门_数据_15

5、保存转换并运行

工具栏第四个按钮就是保存按钮,保存为test1

然后点转换test1标签的第一个按钮,就是运行

kettle数据抽取入门_字段_16

查看数据库kettle中person3的记录:

kettle数据抽取入门_字段_17

和预计中的一样,成功。

四、找不到build-helper-maven-plugin: jar: 3.1.0-pentaho

编译maven-parent-poms时在POM.xml上有红点(STS),提示:

org.codehaus.mojo:build-helper-maven-plugin:jar:3.1.0-pentaho was not found in https://maven.aliyun.com/repository/public during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of aliyunmaven has elapsed or updates are forced

解决:

使用https://github.com/pentaho/pentaho-kettle.git的readme.md所提供的settings.xml,注意把本地仓库路径指定为以前使用的路径。

五、syslog4j无法找到

编译时报错Could not find artifact

解决:版本改为:

<syslog4j.version>0.9.30</syslog4j.version>

六、snmp4j无法找到

编译时报错:

Could not find artifact org.snmp4j:snmp4j:jar:1.9.30 in pentaho-public (https://repo.orl.eng.hitachivantara.com/artifactory/pnt-mvn/

解决:

<snmp4j.version>1.9.30</snmp4j.version>

改为:

<snmp4j.version>1.10.1</snmp4j.version>

七、要求JAVA11

在windows下执行Spoon.bat提示:

DEBUG: Using JAVA_HOME
DEBUG: _PENTAHO_JAVA_HOME=D:\Java\jdk1.8.0_172
DEBUG: _PENTAHO_JAVA=D:\Java\jdk1.8.0_172\bin\javaw.exe
ERROR: Spoon UI requires Java 11 to function on Windows 11

kettle数据抽取入门_ci_18

解决:

修改环境变量JAVA_HOME=D:\Java\jdk-11.0.13

kettle数据抽取入门_数据_19

八、mysql的JDBC驱动找不到

新建数据库连接时测试报错:

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

kettle数据抽取入门_ci_20

拷贝mysql-connector-java-5.1.49.jar到D:\data-integration\lib目录下,重新启动spoon.bat,

进入“表输入”:

kettle数据抽取入门_ci_21

点“数据库连接”后面的“编辑”按钮

kettle数据抽取入门_ci_22

点“测试”按钮:

kettle数据抽取入门_ci_23


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
OlVMtA4u3dhT
最新推荐 更多

2024-05-31