kettle试用
一、kettle试用
K ettle 简介
K ettle 是一款国外开源的 ETL 工具,纯 java 编写,可以在 Window 、 Linux 、 Unix 上运行,绿色无需安装,数据抽取高效稳定。 K ettle 允许用户管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。软件用于从不同的多个数据源获取数据,对获得的数据进行处理,最后将处理好的数据加载到目标系统。 Kettle 中有两种脚本文件, transformation 和 job , transformation 完成针对数据的基础转换, job 则完成整个工作流的控制。
下载和安装
由于 Kettle 是使用 Java 语言编写的,所有 Kett le 的运行需要有 Java 环境, 所以要 安装 JDK 。下载好 kettle 文件后,需要配合 JDK 1.8 版本。版本过高或者过低都不合适。检验版本是否配置成功,运行 cmd 输入 java -version ( java 和 -version 之间有空格 ) 。若如图所示,显示版本信息,则说明安装和配置成功 。

Kettle 常用三大家族: Spoon 、 Pan 、 Kitchen 。
Spoon: 通过图形界面方式设计、运行、调试 Job 与 Transformation 。
Pan: 通过脚本命令方式来运行 Transformation 。
Kitchen: 通过脚本命令方式来运行 Job ,一般就是通过调用 Kitchen 脚本来完成定时任务。
进入 kettle\data-integration , 如果 Kettle 部署在 windows 环境双击 Spoon.bat 文件启动 Kettle ,如果是在 Linux 环境下,则运行 spoon.sh 文件启动。 如下是 windows 环境的情况。

出现如下界面,则 Kettle 就安装成功了 。

安装常见问题
1 如果打开之后就闪退,是因为默认内存配置太大,需要修改。用记事本或者 Note pad++ 打开 spoon .bat ,将
if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms2058m" "-Xmx1024m" "-XX:MaxPermSize=256m"
改为 if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms512m" "-Xmx512m" "-XX:MaxPermSize=256m"


2 配置 JVM 及内存配置问 题
如果 java_home 设置了仍提 示
could not find the main class. Program will exit!
可以设置环境变量 PENTAHO_JAVA_HOME 变量值为 jdk 的安装目录 1.6 以上即可 。
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.21-bin.jar 拷贝 到
D:\SoftWare\kettle\data-integration\lib 下面然后重新启动 spoon 即可 。
新建转换 / 作业
打开 kettle 后,点击文件 - 新建,可以新建转换或者作业。

新建一个转换后,可以在界面左侧看到有主对象树和核心对象两个模块,点击核心对象,会出现一系列的步骤。其中,输入步骤就是将不同的数据源的数据输入到 kettle 中,输出步骤就是将数据输出到目标系统。转换,应用,流程,连接,查询等步骤都是用于对数据进行一系列的操作和处理。

转换常用环节介绍
|
类别 |
环节名称 |
功能说明 |
|
I nput |
文本文件输入 |
从本地文本文件输入数据 |
|
表输入 |
从数据库的表中输入数据 | |
|
获取系统信息 |
读取系统信息输入数据,包括系统时间, I P 地址,命令行参数等 | |
|
生成记录 |
用于生成指定的数据,可以手动输入 | |
|
O utput |
文本文件输出 |
将处理过的数据输出到本地文本文件 |
|
表输出 |
将数据输出到数据库的表中 | |
|
插入 / 更新 |
根据处理结果对数据库进行更新,若需要更新的数据在数据库表中没有记录,则会报错停止 | |
|
删除 |
根据处理结果对数据库记录进行删除,若需要删除的数据在忽聚酷表中无记录,则会报错停止 | |
|
L ookup |
数据库查询 |
根据设定的查询条件,对目标进行查询,返回需要的结果字段 |
|
流查询 |
将目标读取到内存,通过查询条件对内存中数据进行查询 | |
|
调用 D B 存储过程 |
调用数据库的存储过程 | |
|
T ransform |
字段选择 |
选择需要的字段,过滤掉不要的字段,可将不要的字段存储到空操作中 |
|
过滤记录 |
根据条件对记录进行分类 | |
|
排序记录 |
将数据根据某条件进行排序 | |
|
空操作 |
无操作 | |
|
增加常量 |
增加需要的常量字段 | |
|
S cripting |
Modified Java Script Value |
扩展功能,编写 J avaScript 脚本,对数据进行相应处理 |
|
M apping |
映射(子转换) |
数据映射 |
|
Job |
S et Variables |
设置环境变量 |
|
G et Variables |
获取环境变量 |
表输入
以最常见的表输入为例,说明数据库的导入。点击输入,展开一系列的输入步骤,拖动“表输入”步骤到操作界面,双击打开,会出现数据库连接的步骤。

点击新建,新建一个数据库的连接。

选择连接类型,输入连接名称,主机名称,数据库名称,用户名和密码。输入完成后点击测试,如果出现如下窗口说明连接成功(此时联网要连到公司的内网,否则不能连接到公司数据库,连接失败)。

如果不能新建连接,报错,可能是因为缺少文件,要复制 lib 中所有 ojdbc 开头的文件到 kettle/data-integration/lib 中,之后关闭 kettle 并重新打开,问题即可解决。
然后点击“获取 SQL 查询语句”,选择“表”,选择需要导入数据的表,点击确定。出现 SQL 语句,可以根据要求输入 SQL 语句对数据进行操作。点击预览可以查看查询结果。

假设有这样一个表格:
|
I d |
T ype |
V alue |
Entry_time |
Update_time |
Delete_time |
s tate ( 1 or 0 ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
如果有数据的增加,可以根据入库时间来筛选。
Select id, type, value, entry_time,
From table
Where entry_time>?
如果有数据的更新或者删除,同样可以根据 u pdate_time 和 d elete_time 进行筛选。
也可以用输入中的其他输入步骤,例如 Excel 输入,文本文件输入,生成随机数,获取系统信息等步骤导入不同的数据。例如,拖动生成记录到界面,打开生成记录,可以修改步骤名称,生成数据量,填写字段名称,类型和具体的值即可生成相应的数据。
数据连接
导入数据后,按住 shift 键,鼠标点住“表输入“到下一个步骤,可以将数据导入到下一步骤。可以在转换,应用,流程等步骤中选择具体的步骤对数据进行处理。例如,在剪切字符串中,对应输入输入流字段,输出流字段,选择剪切字段的起始和终止位置即可将字符串进行剪切。在连接中,选择记录集连接,并设定每个步骤的连接字段,可以将两个表的记录进行连接,可以选择 full outer join, left outer join, right outer join, inner join 四种连接方法。

Kettle 中的“合并连接”算法要求输入流事先排好序。因此,对每个连接的输入流,需要先根据其连接的字段进行排序。

本实例中,记录集根据每个输入流的 I D 字段进行连接。因此,对每个输入流需要事先根据 I D 进行排序。可以根据实际情况选择升序或降序排列,这里选择升序排列。

表输出
数据处理完成后,在输出步骤中选择具体的输出方法,将数据输出到指定位置。常用的输出有 Access 输出, Excel 输出,文本文件输出,表输出等等。方法和数据输入的方法类似,过程是相反的。
以常见的表输出为例,在“输出”中,选择表输出。

拖到操作窗口,双击“表输出”打开,出现如下界面。

选择数据库连接,即要输出的数据库,和目标表。然后输入提交记录数量。也可以输出指定的数据库字段,点击“数据库字段”中的“输入字段映射”,编辑映射匹配,输入指定的要输出的字段。
一个简单的数据输入、处理、输出转换如下图所示。

K ettle 数据同步
Kettle 中的数据同步,一是可以使用时间戳的方法。在数据表中增加一时间戳字段,每次对表中的数据进行更新时,更新相应记录的时间戳字段。 Kettle 中对数据进行同步时,比较新旧数据表中对应记录的时间戳字段。对于每条记录,若新数据表中的时间戳字段大于旧数据表中的时间戳字段,则说明数据已更新过,应进行同步,对旧数据表中的相应记录需要进行相应更新;反之则表示数据未进行过修改,新旧数据表中的该条记录是一致的,因此对于该条记录同步操作无需进行操作。二是使用 k ettle 内置的“合并记录”组件。该组件合并两个数据流,并根据某个关键字进行排序,这两个数据流被比较,以标识相等的、变更的、删除的、新建的记录。

在“连接”中,选择“合并记录”。将组件拖到操作窗口,双击打开,出现如下界面。

在界面中选择新旧数据源,设定匹配关键字和数据字段,“合并记录”组件会将新旧数据流合并成一个数据流输出并为其增加一标志字段(默认名称为 f lagfield ),该字段可能的取值有 i dentical, changed, deleted, new 四种。在下方的页面中切换至 Preview data ,并点击选择“合并记录”组件可进行数据预览,如下图所示。

每条记录根据 f lagfield 字段的值需要采取不同的操作。在“流程”中,选择“ S witch/Case ”,将组件拖至操作窗口。

双击组件进行编辑。选择 S witch 字段为 f lagfield ,根据 C ase 取值范围中的取值为其指定下一个目标步骤( n ew →表输出, c hanged →更新, d eleted →删除),并指定默认目标步骤( i dentical →空操作)。

转换的完整流程如下图所示。

定时处理数据

定时处理数据必须在作业的模式下建立,因此要新建一个作业,然后 点击面板左侧的核心对象,选择通用文件夹下的 START 和转换并把它拖到右侧的编辑区中,按住 shift 画线连接 “START” 和 “ 转换 ” 。双击“ START ”出现如下界面。

勾选“重复”,在类型中,可以选择“时间间隔”,“天”,“周”,“月”。可以根据具体的需求选择合适的间隔时间。

再双击转换,打开,点击浏览,选择要执行的转换。选择完成后,点击运行,运行这个作业,就会按照预定的时间间隔执行指定的转换。

链接: https://pan.baidu.com/s/1HfzfM6qg8OJoujEIU6Ypkw 提取码: 81sd

本文详细介绍Kettle的安装配置、基本操作与高级应用,包括数据导入导出、转换处理、定时任务设置及数据同步策略,适合初学者快速上手。

282

被折叠的 条评论
为什么被折叠?



