kettle入门教程

一、概述

1.什么是kettle

Kettle是一款开源的ETL(Extract-Transform-Load)工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。

image-20230312122610549

2.kettle工程存储方式

(1)以XML形式存储
(2)以资源库方式存储(数据库资源库和文件资源库)

3.kettle两种设计

  • Transformation(转换):完成对数据的基本转换
  • Job(工作):完成整个工作流的控制

区别:

(1)作业(Job)是步骤流,转换(Transformation)是数据流。

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

4.kettle的组成

  • **勺子(Spoon.bat/spoon.sh) 😗*是-个图形化的界面,可以让我们用图形化的方式开发转换和作业。windows选择.bat; Linux选择.sh。
  • 煎锅(Pan.bat/pan.sh) : 利用Pan可以用命令行的形式调用Trans。
  • 厨房(Kitchen batkitchen.sh) : 利用Kitchen可以使用命令行调用Job
  • 菜单(Carte.bat/ Carte.sh): Carte是一 个轻量级的Web容器,用于建立专用、远程的ETL Server。

5.kettle核心概念

5.1.可视化编程

  • kettle可以被归类为可视化编程语言,因为kettle可以使用图形化的方式定义复杂的ETL程序和工作流
  • kettle里的代码就是转换和作业

5.2.转换

  • 转换负责数据的输入、转换、校验和输出的工作.
  • kettle中使用转换完成数据ETL全部工作.
  • 转换由多个步骤组成.
  • 各个步骤使用跳(Hop)来链接,跳定义了一个数据流通道,即数据由一个步骤流(跳)向下一个步骤,在kettle中数据的最小单元是数据行,数据流中流动其实是缓存的行集(RowSet).

5.3步骤

​ 步骤(控件)是转换里的基本的组成部分.

  1. 步骤需要有一个名字,这个名字在同一个转换范围内唯一.
  2. 每个步骤都会读、写数据行(唯一例外是生成记录步骤,该步骤只写数据).
  3. 步骤将数据写到与之相连的一个或多个输出跳(Hop),再传送到跳的另外一端的步骤.
  4. 大多数的步骤都可以有多个输出跳.一个步骤的数据发送可以被设置为分发和复制.分发是目标步骤轮流接收记录,复制是所有的记录被同时发送到所有的目标步骤.

image-20231018211715453

5.4.跳(Hop)

跳就是步骤之间带箭头的连线,跳定义了步骤之间的数据通道

image-20231018212032496

跳实际上是两个步骤之间的被称为行集的数据行缓存,行集的大小可以在转换的设置里定义.当行集满了,向行集写数据的步骤将停止写入,直到行集里又有了空间.当行集空了,从行集读取数据的步骤停止读取,直到行集又有可读的数据行.

image-20231018212454505

5.5.元数据

每个步骤在输出数据行时都有对字段的描述,这种描述就是数据行的元数据.

  1. 名称:数据行里的字段名是唯一的.
  2. 数据类型:字段的数据类型.
  3. 格式:数据显示的方式.
  4. 长度:字符串的长度或者BigNumber类型的长度.
  5. 精度:BigNumber数据类型的十进制精度
  6. 货币符号:¥
  7. 小数点符号:十进制数据的小数点格式.
  8. 分组符号:数值类型数据的分组符号,
image-20231019105001047

5.6数据类型

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

  1. String:字符类型数据
  2. Number:双精度浮点数
  3. Integer:带符号长整形(64位)
  4. BigNumber:任意精度数据
  5. Date:带毫秒精度的日期时间值.
  6. Boolean:取值为true和false的布尔值.
  7. Binary:二进制字段可以包含图像、声音、视频以及其他类型的二进制数据.

5.7.并行

跳的这种基于行集缓存的规则允许每个步骤都是由一个独立的线程运行,这样并发程度最高.

5.8.作业(Job)

负责定义一个完成整个工作流的控制,比如转换的结果发送邮件给相关人员.因为转换以并行方式执行,所以必须存在一个串行的调度工具来执行转换.这就是kettle中的作业.

6.kettle的组建

6.1.kettle输入控件

输入是转换里面的第一分类,输入控件也是转换中的第一大控件,用来抽取数据或者生成数据.输入是ETL里面的E,主要做数据抽取的工作.

6.1.1.CSV文件输入
6.1.2.文本输入
6.1.3.Excel输入
6.1.4.Xml输入
6.1.5.JSON输入
6.1.6.Data Grid

Data Grid组件允许用户以网格形式输入静态的数据行,这主要是为了测试、参考或演示目的.这些数据行可以来自多种来源,例如数据库表或文本文件。在创建复杂的转换流程时,Data Grid组件提供了一种直观的方式来设置和调整参数。此外,它还支持各种操作,如添加、删除和编辑数据行,以满足不同的数据处理需求。

image-20231022162427839

6.2.kettle输出控件

image-20231022120546436
6.2.1.Excel输出
6.2.2.文本文件输出
6.2.3.SQL文件输出
image-20231022114951421

6.2.4.表输出

  • 更新(需要更新emp1表,必须保证两张表的数据行数相同,根据id作比较进行更新)

    image-20231022115340717
  • 插入/更新(需要更新emp1表,两张表的数据行数可以不相同,更新字段添加id,把Y改成N)

image-20231022115502666

6.3.转换控件

6.3.1.Concat filelds

name就是拼接后新增的字段,下面获取得两个字段就是需要拼接的字段

image-20231022120746116
6.3.2.值映射
image-20231022121327390
6.3.3添加常量&增加序列
image-20231022121424603

字段选择是从数据流中选择字段,改变名称,修改数据类型
选择和修改:可以随意修改字段名称,长度
移除:只保留想要删除的字段
元数据:随意修改数据类型等

6.3.4.计算器
image-20231022122843245
6.3.5.字符串剪切&替换&操作
image-20231022124135373
6.3.6.排序记录

用于表连接时只保留重复的记录字段,意思是根据这个字段进行排序或连接,类似于两表之间得关联字段id
类似于根据id主键进行升序降序

6.3.7.拆分字段

image-20231022150950910

注意:根据空格拆分,拆分字段之后源字段name就失效了,取而代之得是firstname,lastname

6.3.8.拆分为多行

image-20231022151113256

6.3.9.行扁平化

把同一组数据得多行数据合并为一行,理解为:拆分多行得逆向操作
【注意】使用之前需要对数据进行排序
每个分组的数据条数要保证一致,否则会有错乱

image-20231022151201327

注意:拆分出来3列了,如果想要把3列合并为一列,需要使用Conncat filelds拼接控件

6.3.10.列转行
image-20231022151529382
  • 关键字段:从数据内容变成列名的字段
  • 分组字段:列转行,转变以后的分组字段
  • 目标字段:增加的列的列名字段
  • 数据字段:目标字段的数据字段
  • 关键值字段:数据字段查询时的关键字段,也可以理解为key; 相当于源数据字段的值
image-20231022151425225

注意】列转行之前数据流必须按照分组字段进行排序,否则数据会错乱

6.3.11.行转列
image-20231022151657552
  • Key字段:行转列,生成的列名字段
  • 字段名称:原本数据流中的字段名
  • Key值:Key字段的值,跟前面的字段名称一样
  • Value字段:对应的Key值的数据列的列名
image-20231022151633318

6.4.应用控件

6.4.1.替换null值
image-20231022152117796 image-20231022152139532
6.4.2.写日志

调试的时候使用,可以将数据流的每行数据打印到控制台,方便我们调试整个程序
1.选择日志级别
2.可以输入自定义输出的语句
3.选择要输出打印的字段

image-20231022152321889

6.5.流程控件

6.5.1.Switch/case

image-20231022152934590

6.5.2.过滤记录

过滤记录和Switch/case做对比的话,过滤记录相当于if-else,可以自定义输入一个判断条件,然后将数据流中的数据一路分为两路。

image-20231022153114177
6.5.3.空操作

空操作,什么也不做,此控件一般作为数据流的终点

image-20231022153209710
6.5.4.中止

中止是数据流的终点,如果有数据流到此处,整个转换程序将中止,并且在控制台输出报错信息。此控件一般用来校验数据或者调试程序。

image-20231022153332283 image-20231022153405016
6.5.5.Transformation Executor(转换执行器)

主要功能是执行子转换。当子转换需要配合使用的时候,例如从结果获取记录和复制记录到结果这两个步骤,Transformation Executor就会被调用。同时,它还可以用于实现ETL操作中的循环调用,通过设置Transformation的高级属性(“执行每一个输入行”)来实现。

需要注意的是,作业和转换是Kettle中的两种主要控件类型。作业是步骤流,每一个步骤必须等到前面的步骤都跑完,后面的步骤才会执行;而转换则是数据流,会一次性把所有控件全部先启动(一个控件对应启动一个线程),然后数据流会从第一个控件开始,一条记录、一条记录地流向最后的控件。因此,Transformation Executor的使用对于实现ETL过程中的数据流处理至关重要.

image-20231022163833143

6.6.查询控件

6.6.1.数据库查询

一般用于左连接,表输入是左表

image-20231022153558217
6.6.2.流查询
image-20231022153657996 image-20231022153732184

6.7.连接控件

6.7.1.合并记录

用于将两个不同来源的数据合并,这两个来源数据分别为旧数据和新数据,将旧数据和新数据按照指定的关键字匹配,比较,合并。

image-20231022153915769

6.7.2.记录集连接

对两个步骤中的数据进行左连接,右连接,内连接,外连接;使用此控件之前需要对记录集的数据进行排序,排序的字段一定是两个表关联的字段,否则数据错乱,出现null值

6.8.统计控件

6.8.1.分组

类似于group by,按照一个或几个分组之后其余字段可以按照聚合函数进行合并计算

image-20231022154220923

注意:在进行分组之前,数据最好先进行排序(按照分组的字段排序)

image-20231022154245111

6.9.映射控件

6.9.1.映射
image-20231022154421520

6.10.脚本控件(scripting).

6.10.1.执行SQL脚本
image-20231022154527726
6.10.2.用户定义的java类

6.11.Tranform(转换控件)

6.11.1.Select/Rename values

对input的值进行筛选,重命名等操作

image-20231022160424636

image-20231022161643036

6.11.2.增加常量(Add constants)

主要是添加常量到流中

image-20231022161959256

6.12.Job(任务)

6.12.1.Get rows form result

获取上游步骤生成的结果集数据。这些数据可以来自不同的源头,例如数据库查询、文本文件等。你可以指定要获取的元数据字段。需要注意的是,这个组件一次只能获取一组记录,而不能获取单个记录。如果需要对结果集中的每一行数据进行操作,可以使用循环或者复制多行到结果步骤。此外,根据获取的数据,可以通过设置变量的方式来实现数据的传递和处理。

image-20231022163314648

6.13.普通组建

6.13.1.start(开始组建)

,Start组件的主要功能是设置作业的执行方式和时间。它可以配置作业为手动执行或定时执行。当设置为定时执行时,可以指定作业的执行频率,例如每天、每周或每月执行一次。此外,Start组件还可以设置作业并行执行的数量,以及选择作业中各个步骤的执行顺序。

这种定时执行任务的功能在实际工作中非常有用,尤其是在需要定期获取、处理数据的情况下。例如,你可以设置每天晚上12点自动从数据库中抽取新的销售数据,然后对这些数据进行清洗和转换,以便第二天早上进行分析。这样不仅可以节省人力资源,也可以确保数据的及时性和准确性。

image-20231022164233302

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/183185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构树与二叉树(5)Huffman树

#include <iostream> #include <stack> #include <queue>using namespace std;struct Node {char name ;int code[200];int num 0;//code的下标int weight 0;//权重&#xff08;次数&#xff09;Node* lchild;//左孩子Node* rchild;//右孩子Node* parent;N…

力扣 --- 三数之和

目录 题目描述&#xff1a; 思路描述&#xff1a; 代码&#xff1a; 提交结果&#xff1a; 官方代码&#xff1a; 官方提交结果&#xff1a; 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k…

使用STM32 HAL库驱动烟雾传感器的设计和优化

STM32 HAL库是STMicroelectronics提供的针对STM32系列微控制器的一套硬件抽象层库&#xff0c;可以简化开发过程并提供对各种外设的支持。本文将介绍如何使用STM32 HAL库来驱动烟雾传感器&#xff0c;并对传感器数据采集和处理进行优化。将包括HAL库的初始化、模拟信号采集、数…

UE5、CesiumForUnreal实现加载GeoJson绘制多面(MultiPolygon)功能(支持点选高亮)

文章目录 1.实现目标2.实现过程2.1 数据与预处理2.2 GeoJson解析2.3 Mesh构建与属性存储2.4 核心代码2.5 材质2.6 蓝图应用测试3.参考资料1.实现目标 在之前的文章中,基于GeoJson数据加载,实现了绘制单面功能,但只支持单个要素Feature。本文这里实现对Geojson内所有面要素的…

Abaqus飞机起落架扭力臂拓扑优化

Abaqus飞机起落架扭力臂拓扑优化 Abaqus除了可以对结构进行强度分析&#xff0c;同样也自带强大的优化功能&#xff0c;下面通过一个简 单的实例演示在Abaqus中进行拓扑优化&#xff0c;另外&#xff0c;如果需要更加强大的拓扑优化仿真&#xff0c;可以 在TOSCA中进行。 定义接…

软件工程(九)

软件过程 定义 是软件生存周期中的一系列相关软件工程活动的集合&#xff0c;活动是任务的集合。 任务是将输入变换为输出的操作。 活动的执行可以是顺序的&#xff0c;重复的&#xff0c;并行的、嵌套的。 每一个软件过程由一组工作任务、项目里程碑、软件工程产品和交付…

最稳定的app分发平台怎么签到领取点数

第一步 登点击录《咕噜分发平台官网》 ●首页点击绿色箭头所指向的转盘 ●点击天数然后点击今日签到 ● 图下是我们的签到应该获得的点数 ● 图下是我们的签到累积获得的点数&#xff0c;以及连续签到的次数 控制台查看 查看签到获得点数通知 ●查看签到结果以及累积签到点数…

使用影刀指令+python实现简单的长文本乱序加密

本文意在利用影刀指令python代码&#xff0c;实现一种较为简单的长文本加密和解密&#xff0c;流程结构分为两步&#xff1a; 加密原理–是把字符转为列表&#xff0c;利用列表random模块中的shuffle函数做随机乱序。解密原理–是利用了列表的索引追踪&#xff0c;先前创建字典…

原神:夏洛蒂是否值得培养?全队瞬抬治疗量不输五星,但缺点也很明显

作为四星冰系治疗角色&#xff0c;夏洛蒂的实战表现可以说相当让人惊喜。不仅有相当有意思的普攻动作以及技能特效&#xff0c;而且她还有治疗和挂冰等功能性。下面就来详细聊聊夏洛蒂是否值得培养。 【治疗量让人惊喜&#xff0c;但也有缺点】 说实话&#xff0c;在使用夏洛蒂…

AcWing 3555:二叉树(北京大学考研机试题)→公共父结点

【题目来源】https://www.acwing.com/problem/content/description/3435/【题目描述】 如下图所示&#xff0c;由正整数 1, 2, 3, … 组成了一棵无限大的&#xff08;满&#xff09;二叉树。 1/ \2 3/ \ / \4 5 6 7 /\ /\ /\ /\ ... ... 从任意一个结点到根结点&…

【Web】NewStarCTF Week3 个人复现

①Include &#x1f350; ?filephpinfo 提示查下register_argc_argv 发现为on LFI包含 pearcmd命令执行学习 pearcmd.php文件包含妙用 ?file/usr/local/lib/php/pearcmd&config-create/<?eval($_POST[a])?>./ha.php ?file./ha post传&#xff1a; asystem…

C++ 通过CryptoPP计算Hash值

Crypto (CryptoPP) 是一个用于密码学和加密的 C 库。它是一个开源项目&#xff0c;提供了大量的密码学算法和功能&#xff0c;包括对称加密、非对称加密、哈希函数、消息认证码 (MAC)、数字签名等。Crypto 的目标是提供高性能和可靠的密码学工具&#xff0c;以满足软件开发中对…

3 测试驱动的Spring Boot应用程序开发数据层示例

文章目录 用户故事数据模型选择数据库SQL与NoSQLH2、Hibernate和JPA Spring Boot Data JPA依赖关系和自动配置Spring Data JPA技术栈数据源&#xff08;自动&#xff09;配置 实体存储库存储User和ChallengeAttempt显示最近的ChallengeAttempt服务层控制器层用户界面 小结 文章…

go学习之文件操作与命令行参数

文章目录 一、文件操作1.基本介绍2.常用文件操作函数和方法3.关于文件操作应用实例4.写文件操作应用实例&#xff08;创建文件并写入文件&#xff09;1&#xff09;基本介绍2&#xff09;基本应用实例-方式一 5.判断文件是否存在6.统计英文、数字、空格和其他字符数量 二、命令…

武汉凯迪正大KDZD5289硫化曲线测试仪(电脑无转子硫化仪)

电脑无转子硫化仪 硫化时间测试仪 硫化曲线仪 硫化曲线测试仪 武汉凯迪正大KDZD5289产品概述 KDZD5289硫化曲线测试仪&#xff08;电脑无转子硫化仪&#xff09;采用电脑控制进口温控仪进行准确控温&#xff0c;计算机适时进行数据处理并可进行统计、分析、存储对比等&#xff…

报错解决:You may need an additional loader to handle the result of these loaders.

报错信息如下 vue 项目 Module parse failed: Unexpected token (1:9) File was processed with these loaders:* ./node_modules/vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js* ./node_modules/babel-loader/lib/index.js* ./node_modules/eslint-loader/in…

golang channel执行原理与代码分析

使用的go版本为 go1.21.2 首先我们写一个简单的chan调度代码 package mainimport "fmt"func main() {ch : make(chan struct{})go func() {ch <- struct{}{}ch <- struct{}{}}()fmt.Println("xiaochuan", <-ch)data, ok : <-chfmt.Println(&…

c++——string字符串____迭代器.范围for.修改遍历容量操作

在成为大人的路上喘口气. 目录 &#x1f393;标准库类型string &#x1f393;定义和初始化string对象 &#x1f4bb;string类对象的常见构造 &#x1f4bb;string类对象的不常见构造 &#x1f4bb;读写string对象 &#x1f393; string类对象的修改操作 &#x1f4…

从0开始学习JavaScript--JavaScript 中 `let` 和 `const` 的区别及最佳实践

在JavaScript中&#xff0c;let 和 const 是两个用于声明变量的关键字。尽管它们看起来很相似&#xff0c;但它们之间有一些重要的区别。本篇博客将深入探讨 let 和 const 的用法、区别&#xff0c;并提供一些最佳实践&#xff0c;以确保在代码中正确使用它们。 let 和 const …

jenkins pipeline 运行超时后强制停止

在Jenkins中&#xff0c;Pipeline是一种用于定义持续集成/持续交付&#xff08;CI/CD&#xff09;流程的工具。有时候&#xff0c;Pipeline的执行可能会超时&#xff0c;需要强制停止。 要在Jenkins Pipeline中设置超时&#xff0c;并在超时后强制停止运行&#xff0c;可以使用…