首页 > 其他分享 >kettle数据抽取入门

kettle数据抽取入门

时间:2023-07-19 23:04:37浏览次数:42  
标签:抽取 转换 入门 -- 步骤 kettle 作业 NULL latin1

一、 编译和运行

地址:

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

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

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

kettle数据抽取入门_字段

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数据抽取入门_字段_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数据抽取入门_ci_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数据抽取入门_字段_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数据抽取入门_ci_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数据抽取入门_字段_20

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

进入“表输入”:

kettle数据抽取入门_字段_21

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

kettle数据抽取入门_字段_22

点“测试”按钮:

kettle数据抽取入门_数据_23


标签:抽取,转换,入门,--,步骤,kettle,作业,NULL,latin1
From: https://blog.51cto.com/u_5526964/6781100

相关文章

  • 错误连接数据库 [mysql] : org.pentaho.di.core.exception.KettleDatabaseExcepti
    错误连接数据库[mysql]:org.pentaho.di.core.exception.KettleDatabaseException是一种常见的错误,通常在使用PentahoDataIntegration(PDI)工具连接到MySQL数据库时出现。本文将介绍这个错误的原因,以及如何解决它。在使用PDI工具连接到MySQL数据库时,经常会遇到数据库连接失败的......
  • IDEA代码重构技巧 – 抽取+内联
    IDEA代码重构技巧--抽取+内联1.抽取在做代码重构时,可能发现我们需要将变量,参数做抽取,或者某个方法过长,需要将这个方法中相同逻辑的代码块抽取出一个独立的函数,这时候就需要使用抽取,抽取有三类:抽变量,IDEA快捷键CTRL+ALT+V抽参数,IDEA快捷键CTRL+ALT+P抽函数,IDEA快捷键CTRL+......
  • 打造独具匠心的UI设计组件库:设计师入门必读!
    今天给大家分享一篇关于组件化设计的总结,希望可以带给大家更多设计思考。 什么是组件化⬇⬇⬇点击获取更多设计资源https://js.design/community?category=design&source=bky&plan=bbqbky772   组建化是构成界面的最基础元素和重复出现控件的集合体,也就是常说的组件......
  • QT从入门到实战完整版 P30
    自定义封装控件smallWidgt.h#ifndefSMALLWIDGET_H#defineSMALLWIDGET_H#include<QWidget>namespaceUi{classSmallWidget;}classSmallWidget:publicQWidget{Q_OBJECTpublic:explicitSmallWidget(QWidget*parent=nullptr);~SmallWid......
  • Node-框架NestJS入门使用
     前言介绍Nest是一个用于构建高效,可扩展的Node.js服务器端应用程序的框架。它使用渐进式JavaScript,使用TypeScript构建(保留与纯JavaScript的兼容性),并结合了OOP(面向对象编程),FP(功能编程)和FRP(功能反应编程)的元素。注意请确保你的操作系统上安装了 Node.js(版本>=16)和 npm官......
  • 拦截器入门案例
           ......
  • QT从入门到实战完整版 P24 P25 P26 P27 P28
    #include"widget.h"#include"ui_widget.h"#include<QDebug>Widget::Widget(QWidget*parent):QWidget(parent),ui(newUi::Widget){ui->setupUi(this);//设置单选按钮男默认选中ui->radioButtonman->setChecked(......
  • Power BI外挂级辅助工具 - DAX Studio 入门 第一篇(共两篇)
    今天早上又是美好的一天,进公司刚落座。隔壁部门的Tony哥直接杀了过来,“米高米高,我们组开发了一个PBI报告,但是现在有点小问题,帮我们看下怎么解决?”是否有方法非常灵活把PBI报告里面的基础数据导出成平面文件分享给其他同事?是否有方法非常方便的查询和验证PBI报告中的数据准确性?......
  • Java基础入门
    一、注释方式标识符单行注释//多行注释/**/文档注释/***/二、基础1、进制进制前缀二进制0b八进制0十进制无十六进制0x2、数据类型typevarName[=value][{,varName[=value]}];bytenum1=127;shortnum2=32767;intn......
  • llvm pass pwn 入门学习
    llvmpasspwn入门学习对于没有学习过C++的人来说很不友好,仿佛让我回到学习java的时候(java烂的一批),各种包,函数,实现类,什么迭代器,红黑树什么的,看来抽点时间学习一下c++是有必要的环境说实话这个环境搞了两天,老是报Erroropening'LLVMHello.so':LLVMHello.so:cannotope......