KETTLE基础概念

Kettle是一款ETL工具,用于不同系统间的数据整合。它包括transformation和job,transformation处理数据转换,job控制工作流程。Kettle支持在不同数据库、应用间整合数据,数据导入导出,数据清洗及批量数据库装载。安装需Java环境,直接解压运行。转换中的步骤以并发方式执行,数据以行的形式流动,作业则按顺序执行多个转换或任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本文为原创文章,转载请附上博客地址https://blog.youkuaiyun.com/lvekee/article/details/116022014

1. Kettle介绍


1.1 kettle是什么

kettle是一个ETL(Extract,Transform and Load抽取、转换、载入)工具,ETL工具在数据仓库项目使用非常频繁,kettle可以应用在以下一些场景:

  • 在不同应用或数据库之间整合数据
  • 把数据库中的数据导出到文本文件
  • 大批量数据装载入数据库
  • 数据清洗

Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。


1.2 安装kettle
  • kettle需要jre1.8及以上版本,请先安装好Java环境

  • kettle无需安装,直接解压zip文件到指定的文件夹即可,本文提供三个版本的kettle安装包,见目录。

    pdi-ce-8.2.0.0-342.zip
    pdi-ce-8.3.0.0-371.zip
    pdi-ce-9.0.0.0-423.zip
    
  • 注:linux环境安装kettle需要赋予sh文件权限

    cd /home/kettle/data-integration # kettle安装目录
    chmod +x *.sh
    

1.3 kettle安装目录重要文件解释
-- classes       # 生命周期监听,注册表扩展,日志的配置文件
-- docs          # 文档
-- launcher      # kettle的启动配置
-- lib文件夹      # 存放Kettle的核心(core)jar包、工作引擎(engine)jar包、数据库(DB) jar包
-- libswt        # kettle图形库jar包。
-- plugins       # 插件包,存放Kettle自定义插件时,需要把自定义好的插件打成jar放在此目录。
-- pwd           # 存放Kettle配置集群时所需要的配置文件与加密文件。
-- samples       # 存放Kettle自带的一些Job与Trans实例(建议多去查看)。
-- simple-jndi   # jndi连接配置
-- system        # 系统目录
-- ui            # 软件界面
-- Spoon.bat     # 图形界面工具,spoon可以设计和运行转换和作业。(★)
-- spoon.sh      # linux版图形界面工具,可部署到服务器上使用xmangner在windows访问
-- SpoonDebug.bat# 以Debug的方式运行kettle
-- spoonDebug.sh # linux版,功能同上
-- kitchen.sh    # ./kichen.sh -file ./YourScirpts/demo.kjb 通过命令行执行作业
-- Kitchen.bat   # win版的,功能同上
-- pan.sh        # ./pan.sh -file ./YourScripts/demo.ktr 通过命令行执行转换
-- Pan.bat       # win版的,功能同上
-- Carte.bat     # Carte是一个轻量级的web服务,下文详解
-- carte.sh      # linux版,功能同上
-- Encr.bat      # kettle提供的加密算法
-- encr.sh       # linux版,功能同上
-- Import.bat    # 导入命令
-- import.sh     # linux版,功能同上
-- set-pentaho-env.bat   # 设置kettle环境变量脚本
-- set-pentaho-env.sh    # linux版,功能同上

1.4 术语解释
  • 转换(Transformation):是ETL解决方法中最主要的部分,它处理抽取,转换,加载各阶段各种对数据行的操作,简言之就是对数据抽取、转换、加载流程的封装。

    • 步骤(step):是转换的基本组成部分,以图标的形式出现。如(表输入、文本文件输出)。
    • 跳(hop):是步骤之间带箭头的连线,跳定义了步骤之间的数据通路。
    • 行(row):kettle中的数据单位,一行包含0个或者多个values。
    • 字段(values):values是行的一部分,并且是包含以下类型的的数据:字符型、浮点型、大整数、整数、日期、或者布尔型。
    • 数据发送方式:有两种基本发送方式,即分发和复制,分发类似于发扑克牌,以轮流的方式将每行数据只发给一个输出跳。复制是将全部数据行发送给所有输出跳。

扩展阅读

  1. 转换包括一个或多个步骤(step),步骤之间通过跳(hop)来连接。跳定义了一个单向通道,允许数据从一个步骤流向另一个步骤。在Kettle中,数据的单位是行,数据流就是数据行从一个步骤到另一个步骤的移动。
  2. 在Kettle中,所有的步骤都以并发的方式执行,当转换启动后,所有的步骤都同时启动,从它们的输入跳中读取数据,并把处理过的数据写到输出跳,直到输入跳里不再有数据,就中止步骤的运行。当所有的步骤都中止了,整个转换就中止了。
  3. 步骤是转换里面的基本组成部分,它以图标的方式图形化的展示。
    一个步骤有如下几个关键特性。步骤需要有一个名字,且这个名字在转换范围里唯一。步骤将数据写到与之相连的一个或者多个输出跳,再传送到跳的另一端的步骤。对另一端步骤来说这个跳就是一个输入跳,步骤通过输入跳接受数据。大多数的步骤都可以有多个输出跳。一个步骤的数据发送可以被设置为轮流发送和复制发送。轮流发送是将数据行依次发给每一个输出跳(这种方式也称为round robin),复制发送是将全部数据行发送给所有输出跳。在运行转换的时候,一个线程运行一个步骤和步骤的多份拷贝,所有的步骤的线程几乎同时运行,数据行连续的流过步骤之前的跳。
  4. 跳就是步骤之间带箭头的连线,跳定义了步骤之间的数据通路。跳实际上是两个步骤之间的被称为行集(row set)的数据行缓存(行集的大小可以在转换的设置里面定义)。当行集满了,向行集写数据的步骤将停止写入,直到行集里又有了空间。当行集空了,从行集读取数据的步骤停止读取,直到行集里面又有了可读的数据行。注意,当创建新跳的时候,需要记住跳在转换里面不能循环。因为在转换里面每个步骤都依赖前一个步骤获取字段值。
  5. 转换的设计。当设计转换的时候有几个数据类型的规则需要注意。行级里所有行都应该有同样的数据结构。就是说,当从多个步骤向一个步骤里面写数据的时候,多个步骤输出的数据行应该有相同的结构,即字段相同,字段数据类型相同,字段顺序相同。字段元数据不会在转换中发生变化。意思就是说,字符串不会自动截取长度以适应指定的长度,浮点数也不会自动取整以适应指定的精度。这些功能必须通过一些指定的步骤来完成。默认情况下,空字符串"",被认为与NULL相同。

  • 作业(Job):作业包括一个或多个作业项,作业项以某种顺序来执行,简言之就是将多个转换或一些任务封装

    • 作业项:与转换中的步骤类似,作业项也以图标的方式图形化展示。
    • 作业跳:作业之间的连线称为作业跳。有三种作业跳:1. 无条件执行 2. 当运行结果为真时执行 3. 当运行结果为假时执行

扩展阅读

  1. 作业按照一定的顺序完成,因为转换以并行方式执行的,就需要一个可以串行执行的作业来处理一系列按照顺序完成的操作。一个作业包括一个或者多个作业项,这些作业项以某种顺序来执行。作业执行顺序由作业项之间的跳(job hop)和每个作业项的执行结构来决定。
  2. 作业job可以简单理解为带有定时执行功能的转换,可以对多个转换进行组织、编排,实现更加强大的功能。
  3. 作业项的注意点。新步骤的名字应该是唯一的,但是作业项可以有影子拷贝。这样可以把一个作业项放在不同的位置。这些影子拷贝里的信息都是相同的,编辑一份拷贝,其他拷贝也会随之修改。在作业项之间可以传递一个结果对象(result object)。这个结果对象里包含了数据行,它们不是以流的方式来传递的。而是等一个作业项执行完了,再传递给下一个作业项。默认情况下,所有的作业项都是以串行方式执行的,只是在特殊情况下,以并行方式执行。
  4. 作业跳分为三种,用来根据每个作业项的不同运行结果来决定作业的不同执行路径。对作业项的运行结果判断如下:
    无条件执行:不论上一个作业项执行成功与否,下一个作业项都会执行。标识为,黑色的连线,上面有一个锁的图标。
    当运行结果为真时执行:标识为,绿色的连线,上面有一个钩号。
    当运行结果为假时执行:标识为,红色的连线,上面有一个红色的停止图标。

扩展阅读:转换和作业的区别

  1. 作业(Job)由一个个步骤组成,转换只是作业的其中一个步骤。
  2. 作业的每一个步骤,必须等到前面的步骤都跑完了,后面的步骤才会执行。而转换会一次性把所有控件全部先 启动(一个控件对应启动一个线程),然后数据流会从第一个控件开始,一条记录、一条记录地流向最后的控件。
  3. 作业是步骤流,转换是数据流。这是作业和转换最大的区别。
    步骤就是完成工作的其中一个阶段,每个步骤都完成了一件独立的事情,步骤与步骤之间是独立的,但有先后 顺序,步骤的组合可以形成一个工作流。比如我要上学这个工作,需要经过以下步骤:起床、洗刷、吃早餐、出门坐校车、下车去教室。每个步骤之间是有先后关系,按顺序组合之后,就完成了“去上学”这个工作。
    数据流是指从输入控件(Input)到输出控件(Output)之间的数据流动,针对的是在数据流动过程中的每一行记录、每一列数据的处理,比如增加一个字段、对字段A截取前3位得到新的字段B。

  • 资源库(Repository):kettle资源库是用来保存转换任务的,用户通过图形界面创建的的转换任务可以保存在资源库中。
    • 数据库资源库(Kettle database repository):即保存在各种常见的数据库资源库类型,用户通过用户名/密码来访问资源库中的资源,默认的用户名/密码是admin/admin和guest/guest。
    • 文件资源库(Kettle file repository),保存在服务器硬盘文件夹内的资源库类型,此类型的资源库无需用户进行登录,直接进行操作。

  • 数据行-元数据:每个步骤在输出数据行时都有对字段的描述,这种描述就是数据行的元数据。通常包含下面一些信息。
    • 名称:行里的字段名应用是唯一的。
    • 数据类型:字段的数据类型。
    • 格式:数据显示的方式,如Integer的#、0.00。
    • 长度:字符串的长度或者BigNumber类型的长度。
    • 精度:BigNumber数据类型的十进制精度。
    • 货币符号:¥。
    • 小数点符号:十进制数据的小数点格式。不同文化背景下小数点符号是不同的,一般是点(.)或逗号(,)。
    • 分组符号:数值类型数据的分组符号,不同文化背景下数字里的分组符号也是不同的,一般是点(.)或逗号(,)或单引号(’)。

  • 数据行-数据类型:数据以数据行的形式沿着步骤移动。一个数据行是零到多个字段的集合,字段包含下面几种数据类型。
    • String:字符类型数据
    • Number:双精度浮点数
    • Integer:带符号长整型(64位)
    • BigNumber:任意精度数据
    • Date:带毫秒精度的日期时间值
    • Boolean:取值为true和false的布尔值
    • Binary:二进制字段可以包含图像、声音、视频及其他类型的二进制数据

1.5 变量
  • 全局变量

    定义是通过当前用户下.kettle文件夹中的kettle.properties文件来定义(win系统在C:\Users\username\.kettle目录下)。定义方式是采用键=值对方式来定,如:start_date=20130101。注:在配置全局变量时需要重启Kettle才会生效。也可以在spoon环境下直接按下图操作进行编辑。
    在这里插入图片描述

  • 局部变量(kettle变量)

    局部参数变量是通过“Set Variables”方式来设置,“Get Variables”来获取。注:在“Set Variables”时在当前转换当中是不能马上使用,需要在转换中的下一步骤中使用。详细使用在常用组件详解中说明。

  • 内部变量

    下列变量是永远被定义的

    • Internal.Kettle.Build.Date:示例:2021 18:01:39
    • Internal.Kettle.Build.Version:示例:8.2.0.0-342
    • Internal.Kettle.Version:示例:8.2.0.0-342
    • Internal.Entry.Current.Directory:示例:/

    下列变量在转换中被定义

    • Internal.Transformation.Filename.Directory:示例:/
    • Internal.Transformation.Name:示例:demo
    • Internal.Transformation.Repository.Directory:示例:/

    下列变量在作业中被定义

    • Internal.Job.Filename.Directory:示例:/
    • Internal. Job.Name:示例:demo_job
    • Internal. Job.Repository.Directory:示例:/
  • 使用方法

    使用变量的方法可以如下指定:

    • ${VARIABLE}(LINUX)
    • %% VARIABLE %%(WINDOWS)

    两种格式都可以使用,甚至混合使用,推荐使用${}。注:在SQL中使用变量时需要把“是否替换变量”勾选上,否则无法使变量生效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值