第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以上
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)。第一次启动会有点慢,因为要加载一堆组件。别急,喝杯咖啡。
-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报表。
- 插入/更新:根据主键判断是插入还是更新。
11.3.3 转换步骤
转换步骤是Kettle的精髓。数据在这里被清洗、加工、重组。我常用的有:
| 步骤名称 | 作用 | 使用场景 |
|---|---|---|
| 字段选择 | 选择、重命名、删除字段 | 去掉不需要的列 |
| 过滤记录 | 按条件分流数据 | 把脏数据单独输出 |
| 排序 | 对数据排序 | 合并流之前必须排序 |
| 分组 | 类似SQL的GROUP BY | 汇总统计 |
| 计算器 | 字段间计算 | 金额转换、日期计算 |
| 值映射 | 把值替换成另一个值 | 比如把M/F换成男/女 |
举个例子,假设你要把「性别」字段里的M和F换成中文:
步骤:值映射
源值:M → 目标值:男
源值:F → 目标值:女
默认值:未知
就这么简单。你想想看,如果用SQL写,还得写CASE WHEN,Kettle里拖两下就搞定了。
11.4 知识体系总览
为了让你对本章内容有个整体印象,我画了张图。这张图把Kettle的核心脉络理清楚了:
这张图把本章内容串起来了。你从安装配置入手,理解转换和作业的区别,再掌握三大类组件,Kettle的基本功就算打牢了。
好了,Kettle的入门就聊到这儿。安装好环境,打开Spoon,拖几个组件试试。相信我,上手之后你会觉得——嗯,ETL原来可以这么简单。
公众号:蓝海数据掘金营,微信deep3321