Kettle(Pentaho Data Integration)
Kettle 是开源 ETL / ELT 工具套件 Pentaho Data Integration(PDI) 的旧称;图形客户端 Spoon 仍是日常设计与调试的主力界面。适合离线批量抽取、清洗、维度建模入库,以及与报表(Pentaho BI)链路衔接。
套件总览:→ Pentaho
→ 返回 开发工具
核心产物:Transformation vs Job
| 类型 | 文件扩展名 | 粒度 | 典型用途 |
|---|---|---|---|
| Transformation(转换) | .ktr | 步骤(Step) 组成的 DAG,按 数据行 流动 | 单段 ETL:读表 → 字段映射 → 清洗 → 写表 |
| Job(作业) | .kjb | 作业项(Job Entry),顺序/分支控制 | 调度 shell、FTP、执行多个 .ktr、错误分支、邮件告警 |
约定:能用 Transformation 解决的不要用 Job 嵌一层;Job 负责编排与运维语义(成功/失败走向),Transformation 专注数据处理。
常用概念
- Hop:步骤之间的连线;数据沿 Hop 推送,默认一行一行流过中间步骤。
- 数据库连接:在 Spoon 里配置后可被多个 Step 引用;生产环境常用 JNDI 或 变量占位,避免把账号写死在
.ktr里。 - 变量(Variables) vs 参数(Parameters)
- 变量:
${VAR},常见于路径、连接扩展选项;可由启动脚本、kitchen.sh/环境传入。 - 参数:在 Job 参数表里声明,更适合「本次运行传入的业务批次号、日期分区」等。
- 变量:
- Repository(资源库):可把 Job/Transformation 存进数据库便于权限与版本协作;小团队也可用 文件仓库(导出 XML)配 Git。
Spoon 快速上手路径
- 新建 Transformation → 输入 拖 表输入 / 文本文件输入 → 输出 拖 表输出 / 插入 / 更新。
- 右键步骤 → 预览行,确认抽样数据与类型。
- Transformation 设置 里核对 日志、必要时调 性能(提交记录数 / 缓存)。
- 若有多段串联(例如「维表加载后再事实表」),外层建 Job:Start → Transformation → Success。
命令行调度:
pan.sh/pan.bat:执行单个.ktr。kitchen.sh/kitchen.bat:执行.kjb。
示例(Linux):
./kitchen.sh -file=/path/sync_daily.kjb -level=Basic -param:RUN_DATE=2026-05-14高频步骤(Transformation)
| 方向 | 步骤名 | 说明 |
|---|---|---|
| 输入 | 表输入 | SQL 可直接 参数化;注意绑定变量与方言 |
| 输入 | CSV / Excel | 编码、分隔符、标题行勾选要提前对齐 |
| 转换 | 字段选择 | 改名、裁剪字段、改类型 |
| 转换 | 计算器 / 字符串操作 | 简单派生列 |
| 转换 | 排序 / 分组 | 内存占用随数据量上升,大数据慎用在窄机上 |
| 转换 | 合并连接 | 类比 SQL JOIN,键要提前排序的步骤可选「排序合并」 |
| 输出 | 表输出 | 最快批量插入之一;字段映射清晰即可 |
| 输出 | 插入 / 更新 | 类似 UPSERT;键要选择合适索引列 |
性能与稳定性要点
- 提交记录数(Commit size):表输出类步骤调大可减少 JDBC 往返;过大占用内存与事务日志,需压测折中。
- Use batch updates:大批量写入时可开(驱动支持为前提)。
- 复制 vs 分发:同一输出的多条 Hop:右键 Hop 可选「复制」(广播)或「分发」(轮询分流),并行分支时用错会导致逻辑 Bug。
- 数据库排序内存:排序步骤默认偏内存;数据量大时优先考虑 库端 ORDER BY + 游标式读取,或改用更适合的计算引擎(Spark、DBT、专用同步工具)。
- 错误处理:关键 Step 右键 → 定义错误处理,把坏行写入拒绝表或文件,避免静默丢数。
与其它路线的对照(选型心里有数)
| Kettle | 备注 | |
|---|---|---|
| 偏编码 | Python/SQL 脚本 + Airflow | 版本评审友好,复杂变换可读性有时更好 |
| 云原生 | Flink / Spark / 云厂商 Data Integration | 超大规模流批一体通常不走 Spoon |
| 轻量同步 | Debezium + Kafka、CDC 工具 | 实时增量往往不是 Kettle 强项 |
Kettle 的优势在于 可视化上手快、与企业遗留 JDBC 源兼容面广;劣势是 单机内存瓶颈、复杂编排的版本协作依赖规范(Git + 导出约定)。
小结
.ktr管数据处理步骤;.kjb管调度与流程控制。- 生产务必:参数化连接与路径、错误行落地、合理提交批次与排序策略。
- 大规模或实时链路再评估是否迁移到代码化流水线或分布式引擎。