第11章:Kettle(PDI)入门:安装配置与核心概念

说实话,Kettle(现在叫PDI,Pentaho Data Integration)是我入行ETL时接触的第一个工具。那时候我还觉得,写SQL多帅啊,拖拖拽拽的能有多厉害?结果真香了。Kettle在处理复杂数据流、多步骤转换时,效率确实高。今天我就带你从零开始,把Kettle装起来,再聊聊它的两个核心概念:转换和作业。

11.1 Kettle的安装与配置

安装Kettle其实不复杂,但有几个坑我得提前说。我刚开始装的时候,因为JDK版本不对,折腾了整整一下午。

11.1.1 环境准备

Kettle是基于Java开发的,所以第一步就是装JDK。我个人习惯用JDK 8或11,这两个版本最稳。

  • JDK版本:推荐JDK 8(1.8)或JDK 11
  • 系统要求:Windows、Linux、macOS都支持
  • 内存建议:至少4GB,处理大数据量时建议8GB以上
注意: 我曾经遇到过JDK 17不兼容的情况,导致Kettle启动后界面卡死。所以别追新,稳定第一。

11.1.2 下载与安装

去Pentaho官网或者GitHub上找PDI的安装包。下载后解压就行,不需要安装程序。嗯,就是这么简单。

# 解压命令(Linux/Mac)
tar -zxvf pdi-ce-9.4.0.0-343.zip

# Windows直接右键解压即可

解压后,你会看到这些关键目录:

目录/文件 说明
data-integration/ 主程序目录
spoon.sh / spoon.bat 启动脚本(Linux/Windows)
lib/ 存放JDBC驱动等依赖包
plugins/ 插件目录,可以扩展功能

11.1.3 启动Kettle

双击spoon.bat(Windows)或运行./spoon.sh(Linux)。第一次启动会有点慢,因为要加载一堆组件。别急,喝杯咖啡。

小技巧: 我习惯在spoon.sh里加一行 -Xmx4096m,把内存调大。不然处理大文件时容易OOM(内存溢出)。

11.2 转换(Transformation)与作业(Job)

这两个概念是Kettle的灵魂。说白了,转换是干活的,作业是管人的。

11.2.1 转换(Transformation)

转换就是一条数据流水线。数据从输入流进来,经过各种处理步骤,最后输出。每个步骤都是独立的,步骤之间用「跳」(Hop)连接。

举个例子:

  • 输入:从CSV文件读取数据
  • 处理:过滤掉空值、转换日期格式
  • 输出:写入数据库表

转换的特点是:并行执行。每个步骤启动后,数据就像流水一样同时流动。我在项目中遇到过一个问题:一个转换里同时处理了10个输入文件,结果内存爆了。后来我加了「阻塞步骤」才解决。

11.2.2 作业(Job)

作业是用来编排转换的。它按顺序执行,一个任务完成后再启动下一个。作业里可以包含:

  • 执行转换
  • 发送邮件
  • 检查文件是否存在
  • 执行Shell脚本

你想想看,如果每天凌晨要跑数据,先检查源文件有没有到位,再执行转换,最后发邮件通知。这就是作业的典型场景。

核心区别: 转换是并行的数据流,作业是串行的控制流。别搞混了。

11.3 核心组件:输入、输出、转换步骤

Kettle的组件分三大类:输入、输出、转换。我刚开始学的时候,就靠这三个分类来记,效果很好。

11.3.1 输入步骤

输入步骤负责把数据「拉」进Kettle。常见的输入有:

组件名称 用途 我踩过的坑
CSV文件输入 读取CSV、TXT等文本文件 编码问题!记得设UTF-8
表输入 从数据库读取数据 SQL别写太复杂,容易超时
Excel输入 读取.xls/.xlsx文件 大文件会卡,建议转CSV
生成记录 生成测试数据 调试时特别好用

我曾经用「表输入」从Oracle读1000万条数据,没加分页,结果直接把源库搞挂了。嗯,后来我学乖了,大数据量一定要分批读取。

11.3.2 输出步骤

输出步骤把处理完的数据「推」出去。常用的有:

  • 表输出:写入数据库表。注意字段映射要配好。
  • 文本文件输出:生成CSV或固定宽度的文件。
  • Excel输出:生成Excel报表。
  • 插入/更新:根据主键判断是插入还是更新。
避坑指南: 我曾经用「表输出」往MySQL写数据,没开批量提交,结果一条一条插,跑了3小时。后来改成500条一批,10分钟搞定。

11.3.3 转换步骤

转换步骤是Kettle的精髓。数据在这里被清洗、加工、重组。我常用的有:

步骤名称 作用 使用场景
字段选择 选择、重命名、删除字段 去掉不需要的列
过滤记录 按条件分流数据 把脏数据单独输出
排序 对数据排序 合并流之前必须排序
分组 类似SQL的GROUP BY 汇总统计
计算器 字段间计算 金额转换、日期计算
值映射 把值替换成另一个值 比如把M/F换成男/女

举个例子,假设你要把「性别」字段里的M和F换成中文:

步骤:值映射
源值:M → 目标值:男
源值:F → 目标值:女
默认值:未知

就这么简单。你想想看,如果用SQL写,还得写CASE WHEN,Kettle里拖两下就搞定了。

11.4 知识体系总览

为了让你对本章内容有个整体印象,我画了张图。这张图把Kettle的核心脉络理清楚了:

Kettle(PDI)知识体系 Kettle (PDI) 安装与配置 核心概念 核心组件 JDK环境准备 下载与解压 启动Spoon 转换(并行数据流) 作业(串行控制流) 输入步骤 输出步骤 转换步骤 三大分支:安装配置是基础,核心概念是灵魂,核心组件是武器 ETL工程师从入门到精通 · 第11章

这张图把本章内容串起来了。你从安装配置入手,理解转换和作业的区别,再掌握三大类组件,Kettle的基本功就算打牢了。

我的建议: 别急着看高级功能。先把输入、输出、转换这三个分类记熟。遇到需求时,先想「这是输入还是输出?要不要做转换?」。思路清晰了,工具自然就顺手了。

好了,Kettle的入门就聊到这儿。安装好环境,打开Spoon,拖几个组件试试。相信我,上手之后你会觉得——嗯,ETL原来可以这么简单。


公众号:蓝海数据掘金营,微信deep3321