简介:本资源是一份面向1–3年经验研发人员的Kettle(Pentaho Data Integration)入门级教学PPT,聚焦ETL核心流程与工具实操,解决数据同步、清洗与集成场景中的基础建模与落地难题。全包仅含1个859KB的pptx文件,内容覆盖ETL概念本质、PDI 9.2安装部署、目录结构解析、转换(Transformation)与作业(Job)双范式设计、数据库连接配置、步骤(Step)与跳(Hop)的数据流机制、常见注意事项及同步调优要点,辅以字段类型、元数据定义、并发模型等底层原理说明。已有1463人学习下载,适合具备MySQL/Oracle等数据库开发基础的读者边学边练——PPT中嵌入了典型CSV→Excel、多源集成等快速入门案例,并明确标注了Spoon/Kitchen/Pan等核心脚本用途及集群配置路径,便于对照环境快速上手与问题定位。
1. 别被“ETL”和“Kettle”吓住:它其实就是一个帮你自动搬数据、洗数据、存数据的智能流水线
你有没有遇到过这样的场景:
早上刚到公司,运营同事甩来一个 Excel 表,说“这是昨天各渠道的订单数据,快导进报表系统里”;
中午 DBA 发来消息:“MySQL 里的用户表结构改了,老字段user_name拆成了first_name和last_name,请把历史数据按新规则补上”;
下午又收到一封邮件:“BI 团队需要把微信小程序日志、APP 埋点、CRM 客户库三份数据合并成一张宽表,明天一早要跑看板”……
——这些事,不是写几行 SQL 就能搞定的。它们要连不同系统的账号密码、要处理空值/乱码/时间格式不一致、要校验逻辑(比如“下单时间不能晚于支付时间”)、要分批跑避免卡死数据库、还要出错时自动重试、留日志、发通知……
Kettle(现在叫 PDI)干的就是这件事:它不写代码,但比手写脚本更稳;它不碰业务逻辑,却让数据流动像拧开水龙头一样可控。
它不是给数据库管理员(DBA)或大数据工程师专属的黑匣子,而是给有基本 SQL 能力、会双击运行程序、想摆脱重复粘贴复制的 1–3 年研发同学准备的一套“可视化数据搬运说明书”。
这份《ETL之kettle基础-PPT讲解》就是从零带你摸清这套说明书怎么读、哪页该先翻、哪个按钮点了不会翻车——它不讲源码编译,不推分布式集群,就讲清楚:怎么装、怎么连库、怎么拖两个组件就把 CSV 变成 Excel、怎么让数据自己按时跑、出错了去哪找线索。
你不需要懂 Java 多线程,也不用背 Kafka 协议,只要你会在 MySQL 里SELECT * FROM user LIMIT 10;,就能今天装好、明天跑通第一个转换。
2. 先搞懂一个本质区别:为什么“转换(Transformation)”和“作业(Job)”不能混着用?
很多新手第一次打开 Kettle(PDI),拖了“表输入”和“表输出”,连上线、点运行——结果报错:“找不到驱动”“连接超时”“字段类型不匹配”……
不是你手速慢,是还没看清这张图的底层逻辑:
Kettle 不是“顺序执行命令”的脚本工具,而是一条并行运转的数据流水线。
它默认把每个步骤当成独立工人,大家同时开工、各干各的活,靠“缓存区”(行集)传递半成品。这就像一条汽车装配线:焊装工、喷漆工、总装工不是等前一个人干完才动手,而是每人面前都有个暂存台,台满了就停手,台空了就等料——这样效率最高,但也意味着:你不能指望“先删表、再建表、最后插数据”这种强依赖顺序的操作,在一个转换里靠连线搞定。
2.1 什么是 Transformation(转换)?——专治“数据变形”
- 核心任务:对“一行一行的数据”做加工。比如:
- 把
2024-03-15T08:30:45Z这种字符串,转成数据库认的datetime类型; - 把
email字段里所有大写字母转小写; - 把
order_amount小于 0 的记录直接过滤掉; - 把
province_code(如BJ)通过查字典表,补全成province_name(如北京市)。
- 把
- 关键特征:
- 所有步骤并发执行(你拖的 5 个步骤,几乎同时启动);
- 数据以“行”为单位流动,每行包含若干字段(String/Number/Date 等);
- 步骤之间用Hop(跳)连接,Hop 是带方向的单向通道,背后是内存缓存区(默认 50000 行,可调);
- 一个转换文件后缀是
.ktr(kettle transformation)。
提示:如果你的任务是“清洗、计算、映射、校验、格式化”,那它 99% 属于 Transformation。别硬塞进 Job 里——就像不能让快递员一边打包、一边开车、一边签收合同。
2.2 什么是 Job(作业)?——专管“流程调度”
- 核心任务:控制“整个任务流”的执行节奏和条件分支。比如:
- 先运行一个转换(清洗数据),成功后再运行另一个转换(加载进数仓);
- 如果清洗失败,发邮件告警,并把错误日志存到指定目录;
- 每天凌晨 2 点自动触发,但只在周一至周五运行;
- 同时启动 3 个转换(分别处理订单、用户、商品),全部成功才算 Job 成功。
- 关键特征:
- 步骤是串行或条件执行(Job 里的步骤叫 “Job Entry”,不是 Transformation 里的 Step);
- 不处理“数据行”,只处理“成功/失败/跳过”这类状态信号;
- 支持邮件、FTP、Shell 脚本、HTTP 请求、等待定时器等“运维级操作”;
- 一个作业文件后缀是
.kjb(kettle job)。
提示:Job 就像车间主任,不管焊得漂不漂亮,只管“谁该什么时候开工、谁干砸了要扣钱、今天要不要加班”。Transformation 才是焊工本人。
2.3 举个真实例子:同步聊天记录到星网总(来自 PPT 案例)
PPT 里提到的“同步聊天信息到星网总”这个需求,拆解下来其实是典型的Job + Transformation 组合拳:
| 角色 | 做什么 | 对应 Kettle 组件 | 为什么非它不可 |
|---|---|---|---|
| Transformation(转换) | 从微信接口拉取原始 JSON 日志 → 解析出sender_id,msg_content,send_time→ 过滤掉测试账号消息 → 把send_time字符串转成标准日期 → 补全channel_type='wechat'字段 | HTTP Client+JSON Input+Filter Rows+Select Values+Add Constants | 需要逐行解析、转换、过滤,必须用 Transformation 的数据流能力 |
| Job(作业) | 每小时触发一次;先检查目标表是否存在,不存在则建表;运行上述转换;转换成功后,压缩本次日志文件并归档;失败则发企业微信告警 | Start+SQL+Transformation+Move Files+Mail | 需要“先建表再跑转换”这种强顺序,且涉及文件、邮件等非数据操作,只能用 Job |
注意:这个例子在 PPT 第 18 页有截图。你会发现:作业(Job)画布上只有几个方块(Start / SQL / Transformation / Mail),而点开那个“Transformation”方块,里面才是密密麻麻的步骤连线图——这就是层级关系:Job 管流程,Transformation 管数据。
2.4 新手最常混淆的 3 个点(血泪经验)
现象:在 Transformation 里连了“删除表”→“创建表”→“插入数据”,结果运行时报错“表不存在”或“表正在被使用”。
原因:三个步骤并发执行!“删除表”还没删完,“创建表”就去建了,而“插入数据”可能已经冲进去写第一行了。
解决:把“删表”“建表”放到 Job 里,作为 Job 的前序步骤;Transformation 只负责“插入数据”。现象:用“表输入”读 MySQL,字段名显示为
col1,col2,而不是真实的user_id,user_name。
原因:Kettle 默认不主动获取元数据(字段名、类型),尤其当 SQL 里用了SELECT *或子查询时。
解决:双击“表输入”步骤 → 勾选“执行 SQL 语句前获取字段”(Execute SQL before getting fields),或手动在“字段”标签页里填好字段名和类型。现象:转换里用了“JavaScript 代码”步骤,写了
var new_date = new Date();,结果报错ReferenceError: "Date" is not defined。
原因:Kettle 内置的 JS 引擎(Nashorn)不支持完整浏览器 API,Date、JSON、console等都不能直接用。
解决:改用 Kettle 提供的内置函数,比如newdate()获取当前时间,str2date()转日期,create_date()构造日期对象——这些在“JavaScript 代码”编辑框右上角的“函数”按钮里都能找到。
3. 第一步动手:5 分钟装好 PDI 9.2,启动 UI,连上你的 MySQL(不装数据库也能练)
别急着翻 PPT 第 3 页的“安装步骤”,我们跳过所有文字描述,直接给你一条可复制、可粘贴、零失败的实操路径。你只需要一台 Windows 或 macOS 电脑(Linux 同理,把.bat换成.sh即可),以及一个已有的 MySQL 实例(没有?后面教你用 Docker 快速起一个,30 秒)。
3.1 下载与解压:绿色免安装,解压即用
- 打开浏览器,访问官方源(注意:不是百度搜的第三方站):
https://sourceforge.net/projects/pentaho/files/Pentaho%209.2/client-tools/ - 找到文件名含
pdi-ce-9.2.0.0-290.zip的压缩包(大小约 700MB),点击下载; - 下载完成后,右键解压到当前文件夹(不要解压到桌面根目录!建议新建文件夹如
D:\kettle-pdi或~/Downloads/kettle-pdi); - 解压后,进入文件夹,你会看到一堆
.bat(Windows)或.sh(macOS/Linux)文件——这就是全部。
提示:PPT 里说的“绿色无需安装”,指的就是这个:没有注册表、不改系统环境变量、删掉整个文件夹就干净卸载。这也是它适合新手的原因——不怕装错、不怕污染系统。
3.2 启动 Spoon(图形界面):双击就进,不是命令行
- Windows 用户:直接双击
spoon.bat(别点spoonDebug.bat,那是给开发人员看日志用的); - macOS 用户:打开终端,进入解压目录,运行:
chmod +x spoon.sh ./spoon.sh - 等待 20–40 秒(首次启动较慢,因要加载插件和图标),你会看到一个蓝白相间的窗口弹出,标题栏写着“Spoon - Pentaho Data Integration”——这就是 Kettle 的主界面,PPT 第 5 页截图就是它。
注意:如果双击没反应,或提示“找不到 Java”,说明你电脑没装 JDK 8 或 11(PDI 9.2 要求 JDK 8+)。去 Oracle 或 Adoptium 官网下载安装即可,装完重启电脑再试。这是新手唯一可能卡住的前置条件。
3.3 连接 MySQL:3 步填对,比连 Wi-Fi 还简单
假设你本地有一个 MySQL,账号root,密码123456,端口3306,数据库名test_db。我们来连它:
- 在 Spoon 界面顶部菜单栏,点击“视图(View)” → “数据库连接(Database Connections)”;
- 在右侧“数据库连接”面板,右键 →“新建连接(New Connection)”;
- 在弹出窗口中,按顺序填:
- 连接名称:随便起,比如
my_local_mysql(后续所有步骤里都用这个名字); - 连接类型:下拉选
MySQL; - 主机名称:填
localhost(如果是远程库,填 IP 或域名); - 数据库名称:填
test_db; - 端口号:填
3306; - 用户名:填
root; - 密码:填
123456; - 其他选项全不勾(尤其别点“使用 SSL”——除非你真配了证书);
- 连接名称:随便起,比如
- 点右下角“测试(Test)”按钮 → 出现绿色提示“连接成功!”→ 点“确定”保存。
提示:PPT 第 7 页的“数据库连接配置”截图,就是这个界面。你会发现,它比 Navicat 或 DBeaver 的连接向导还少两步——因为 Kettle 把 JDBC 驱动(
mysql-connector-java-8.0.28.jar)已经自带在lib/目录下了,你不用手动下载、复制、粘贴。
3.4 没有 MySQL?用 Docker 30 秒搭一个(附命令)
如果你电脑没装 MySQL,或者不想动本地环境,用 Docker 起一个临时库(仅用于练习,关机就消失):
# 一行命令,拉镜像 + 启动 + 暴露 3306 端口 + 设 root 密码 + 创建 test_db 库 docker run -d \ --name my-mysql \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -e MYSQL_DATABASE=test_db \ -v $(pwd)/mysql-data:/var/lib/mysql \ -d mysql:8.0提示:这条命令在 macOS/Linux 终端或 Windows 的 Docker Desktop 里直接运行即可。启动后,你就拥有了一个纯净的 MySQL 8.0 实例,账号
root/123456,库test_db,端口3306,完全匹配上面的连接配置。PPT 里没提 Docker,但这招是某导师教 A 同学的“后悔药”——练废了重来,30 秒。
4. 避坑指南:新手跑第一个转换必踩的 5 个坑(附定位和修复方法)
别笑,这 5 条全是某开发者(就是我)第一次用 Kettle 时,花 3 小时才搞懂的血泪教训。PPT 里没写,但你一定会撞上。
4.1 坑一:中文乱码——CSV 读出来全是“???”,Excel 写进去全是“□□□”
- 现象:用“CSV 文件输入”读一个 UTF-8 编码的中文 CSV,预览时字段值显示为问号;或用“Excel 输出”生成的表格,打开后中文变方块。
- 原因:Kettle 默认编码是
ISO-8859-1(西欧字符集),不认 UTF-8。这不是 Bug,是 Java 早期的遗留设定。 - 解决:
- 对“CSV 文件输入”:双击步骤 → “内容”标签页 → 找到“编码(Encoding)”输入框 → 手动填
UTF-8(注意大小写,不能写utf8或utf-8); - 对“Excel 输出”:双击步骤 → “内容”标签页 → 同样填
UTF-8; - 全局设置(推荐):在 Spoon 顶部菜单“工具(Tools)” → “选项(Options)” → “环境(Environment)”→ 把 “Default encoding for text files” 改成
UTF-8→ 点“确定”。以后所有新步骤默认就是 UTF-8。
- 对“CSV 文件输入”:双击步骤 → “内容”标签页 → 找到“编码(Encoding)”输入框 → 手动填
提示:PPT 第 12 页提到“字符编码”,但没说具体在哪改。这个坑不填,你永远看不到正确的中文。
4.2 坑二:字段名大小写敏感——MySQL 里user_id和USER_ID是同一个,Kettle 里不是
- 现象:从 MySQL 读数据,字段名是小写的
user_id;但在“选择值(Select Values)”步骤里,你手输USER_ID去重命名,结果运行时报错“字段 USER_ID 不存在”。 - 原因:Kettle 内部字段名严格区分大小写,且完全继承数据库返回的原始大小写。MySQL 默认不区分,但 Kettle 的元数据获取机制会原样保留。
- 解决:
- 在“表输入”步骤里,点“预览”看实际字段名(一定是小写);
- 所有后续步骤(如“选择值”“字段选择”)里,必须用预览看到的大小写拼写;
- 更稳妥法:在“表输入”的 SQL 里,用别名统一风格,比如
SELECT user_id AS user_id, user_name AS user_name FROM user。
4.3 坑三:日期格式错乱——数据库里2024-03-15,Kettle 里变成Mon Mar 15 00:00:00 CST 2024
- 现象:从 MySQL 读
DATE类型字段,预览时显示为长字符串(含星期、时区);或写入时提示“无法将字符串转为日期”。 - 原因:Kettle 的 Date 类型内部是 Java 的
java.util.Date,显示时用默认格式,但存储是毫秒值。你需要显式告诉它“怎么读”和“怎么写”。 - 解决:
- 在“表输入”步骤:SQL 里别直接
SELECT create_date,改成SELECT DATE_FORMAT(create_date, '%Y-%m-%d') AS create_date_str,然后在“字段”标签页里,把create_date_str类型设为String; - 或者,保持
create_date为 Date 类型,但在“选择值”步骤里,用“元数据(Metadata)”功能:选中字段 → 点“编辑” → 设置“格式”为yyyy-MM-dd(注意是小写y和M); - 写入时同理:在“表输出”步骤,“日期格式”填
yyyy-MM-dd。
- 在“表输入”步骤:SQL 里别直接
4.4 坑四:空值(NULL)被当成字符串“null”——数据库里明明是 NULL,Kettle 里变成了字符串 "null"
- 现象:从 MySQL 读一个允许 NULL 的
VARCHAR字段,预览时看到null(带引号),而不是空白;或写入时,null字符串被插进数据库,而不是真正的 NULL。 - 原因:Kettle 默认把数据库 NULL 映射为字符串
"null",这是为了兼容性(避免空指针),但不符合直觉。 - 解决:
- 在“表输入”步骤 → “内容”标签页 → 勾选“替换 NULL 值(Replace null values)”;
- 在右边“替换为”框里,留空(什么都不填);
- 这样,数据库的 NULL 就会变成 Kettle 内部的真正 NULL,预览显示为空白,写入时也正确。
4.5 坑五:转换跑一半卡住不动——进度条停在 85%,CPU 占用 100%,等 10 分钟没反应
- 现象:转换里用了“表输入”读百万级数据,或“排序”步骤,运行后界面卡死,日志没报错。
- 原因:Kettle 的“排序”“分组”“唯一行”等步骤,默认把所有数据加载进内存排序。数据量一大,内存爆了,就假死。
- 解决:
- 首选:避免在 Transformation 里做全量排序。用数据库的
ORDER BY在“表输入”的 SQL 里完成; - 次选:如果必须用 Kettle 排序,双击“排序行”步骤 → “内容”标签页 → 勾选“使用外部排序(Use external sorting)”→ 设置“临时文件目录”(确保磁盘有空间);
- 通用技巧:在转换空白处右键 → “转换属性(Transformation properties)” → “常规”标签页 → 把“行集大小(Rows in rowset)”从默认 50000 调小到
1000(减少内存占用,牺牲一点速度)。
- 首选:避免在 Transformation 里做全量排序。用数据库的
提示:这个坑在 PPT 第 15 页“性能调优”里有提,但没说“卡住”就是它。记住口诀:“排序、分组、唯一,三步慎用内存;SQL 能干的,别让 Kettle 干。”
5. 第一个实战:3 分钟做出“CSV → 清洗 → Excel”全流程(附每步截图逻辑)
现在,我们把前面所有概念串起来,做一个 PPT 里第 10 页提到的“快速入门案例”:把一份用户 CSV 数据,清洗掉空邮箱、统一手机号格式、补全城市名,最后导出为 Excel 报表。
全程不写一行代码,只拖拽、点选、填空。你做完,就真正理解了 Kettle 的“数据流”是什么。
5.1 准备测试数据:一个 5 行的 CSV(复制就能用)
新建一个文本文件,命名为users.csv,内容如下(用记事本或 VS Code 保存为 UTF-8 编码):
id,name,email,phone,city_code 1,Alice,alice@gmail.com,13800138000,BJ 2,Bob,,13900139000,SH 3,Charlie,charlie@outlook.com,13700137000,GZ 4,Dave,dave@qq.com,13600136000, 5,Eve,eve@163.com,13500135000,SH提示:这个 CSV 有典型脏数据:第 2 行
city_code为空;phone都是 11 位数字,但没加区号或分隔符;city_code是缩写,需映射为全称。
5.2 步骤一:拖“CSV 文件输入”——告诉 Kettle 从哪读
- 在 Spoon 主界面,点击顶部菜单“文件(File)” → “新建(New)” → “转换(Transformation)”;
- 左侧“核心对象(Core Objects)”面板,展开“输入(Input)”,把“CSV 文件输入”拖到画布中央;
- 双击该步骤,配置:
- 文件(File):点“浏览”找到你刚保存的
users.csv; - 内容(Content):
- 勾选“首行包含字段名(Header)”;
- “分隔符(Delimiter)”填
,; - “编码(Encoding)”填
UTF-8(避坑指南第一条!);
- 字段(Fields):点右下角“获取字段”(Get Fields)按钮 → 自动识别出 5 个字段;
- 确认后点“确定”。
- 文件(File):点“浏览”找到你刚保存的
逻辑说明:这一步只是“声明”数据源,不真正读取。Kettle 的设计哲学是“声明式”,所有步骤都是蓝图,运行时才干活。
5.3 步骤二:拖“过滤行”——筛掉空邮箱
- 从“核心对象”→“流程(Flow)”,拖一个“过滤行(Filter rows)”到画布,放在 CSV 步骤右侧;
- 用鼠标左键,从 CSV 步骤的右端(出现小箭头)拖到“过滤行”左端,连一条 Hop(跳);
- 双击“过滤行”,配置:
- 过滤条件(Condition):点“新建” → 左边字段选
email,中间选IS NOT NULL,右边留空; - 发送到(Send to):
- “true”分支(满足条件)→ 命名为
valid_email; - “false”分支(不满足)→ 命名为
invalid_email(我们先不管它,后续可加日志);
- “true”分支(满足条件)→ 命名为
- 过滤条件(Condition):点“新建” → 左边字段选
- 点“确定”。
参数说明:
IS NOT NULL是 Kettle 内置条件,比写email <> ''更安全,因它同时过滤NULL和空字符串。valid_email是分支名,后续连线要用。
5.4 步骤三:拖“JavaScript 代码”——统一手机号、补全城市
- 从“核心对象”→“脚本(Scripting)”,拖一个“JavaScript 代码(JavaScript code)”到画布,放在“过滤行”的
valid_email分支右侧; - 用 Hop 连接
valid_email→ JavaScript 步骤; - 双击 JavaScript 步骤,重点填“脚本(Script)”框(别动其他默认项):
// 1. 统一手机号:11位数字,转成 138-0013-8000 格式 if (phone != null && phone.length == 11 && isNumber(phone)) { var p = phone + ""; phone = p.substring(0,3) + "-" + p.substring(3,7) + "-" + p.substring(7,11); } // 2. 补全城市名:city_code -> city_name if (city_code == "BJ") { city_name = "北京市"; } else if (city_code == "SH") { city_name = "上海市"; } else if (city_code == "GZ") { city_name = "广州市"; } else { city_name = "未知城市"; }逻辑说明:这段 JS 不是浏览器 JS,是 Kettle 的 Nashorn 引擎。
phone、city_code是输入字段名,直接可用;city_name是新字段,赋值后自动加入数据流;isNumber()是内置函数,判断是否为数字。PPT 第 13 页的“JS 脚本”示例,就是这个逻辑。
5.5 步骤四:拖“Excel 输出”——导出结果
- 从“核心对象”→“输出(Output)”,拖一个“Excel 输出(Excel output)”到画布,放在 JavaScript 步骤右侧;
- Hop 连接 JavaScript → Excel 输出;
- 双击 Excel 输出,配置:
- 文件(File):点“浏览”,选保存路径,填
cleaned_users.xlsx; - 内容(Content):
- “编码(Encoding)”填
UTF-8; - “工作表名称(Sheet name)”填
users;
- “编码(Encoding)”填
- 字段(Fields):点“获取字段” → 自动列出
id,name,email,phone,city_code,city_name; - 确认后点“确定”。
- 文件(File):点“浏览”,选保存路径,填
5.6 运行与验证:点绿色三角,3 秒出 Excel
- 点击顶部工具栏绿色三角形“运行(Run)”按钮;
- 弹出“运行转换”窗口,点“执行(Execute)”;
- 看底部“执行结果(Execution results)”面板:
- 如果显示
转换结束(Finished),且读取行数(Read)= 4(因第 2 行被过滤),写入行数(Written)= 4,说明成功;
- 如果显示
- 打开生成的
cleaned_users.xlsx,你应该看到:
| id | name | phone | city_code | city_name | |
|---|---|---|---|---|---|
| 1 | Alice | alice@gmail.com | 138-0013-8000 | BJ | 北京市 |
| 3 | Charlie | charlie@outlook.com | 137-0013-7000 | GZ | 广州市 |
| 4 | Dave | dave@qq.com | 136-0013-6000 | 未知城市 | |
| 5 | Eve | eve@163.com | 135-0013-5000 | SH | 上海市 |
提示:第 4 行
city_code为空,所以city_name是“未知城市”——这正是我们 JS 逻辑写的。你已经完成了 ETL 的核心闭环:Extract(CSV)→ Transform(过滤+JS)→ Load(Excel)。
6. 下一步学什么?从“能跑通”到“敢上线”的 4 个进阶台阶(附学习资源锚点)
你现在已经能装、能连、能拖、能跑通第一个转换。但真实项目不会让你只导 Excel,它会问:“每天凌晨 2 点自动跑,失败发钉钉?”“数据量从 1 万涨到 100 万,怎么不卡?”“老板要加个新字段,怎么不影响线上?”——这些问题,就是从“会用”到“敢扛事”的分水岭。下面这 4 个台阶,是我带 A 同学从零到独立负责数据同步模块的真实路径,每一步都对应 PPT 里的具体页码和可练的点。
6.1 台阶一:把“手动点运行”变成“自动定时跑”(Job + Carte)
你现在点一次绿色三角,只跑一次。生产环境要的是“每天固定时间、自动、可靠、可监控”。这就必须用Job(作业) + Carte(轻量级服务)。
- 怎么做:
- 新建一个 Job(文件 → 新建 → 作业);
- 拖一个“转换(Transformation)”入口(不是 Transformation 本身,是 Job 里的 Entry);
- 配置它指向你刚做的
csv_to_excel.ktr文件; - 再拖一个“邮件(Mail)”Entry,配置 SMTP(如 QQ 邮箱的 smtp.qq.com:587);
- 用 Job 的“成功”“失败”跳,把转换成功连到“发成功邮件”,失败连到“发失败邮件”;
- 保存为
daily_clean_job.kjb; - 打开终端,进入 Kettle 目录,运行:
# 启动 Carte 服务(默认端口 8080) carte.bat # Windows # 或 ./carte.sh # macOS/Linux - 浏览器打开
http://localhost:8080,上传daily_clean_job.kjb,点“执行”; - 再用
kitchen.bat命令行调用(适合加到系统定时任务):kitchen.bat /file:"D:\kettle-pdi\daily_clean_job.kjb" /level:Basic
- PPT 锚点:第 16 页“作业调度”、第 17 页“Carte 集群”;
- 为什么重要:这是你脱离“手工操作”的第一步。上线后,你再也不用守着电脑点运行,而是看邮件收报告。
6.2 台阶二:让“单机跑”变成“多线程并发跑”(分区 & 并行转换)
你现在的转换是单线程读 CSV。如果数据量涨到 100 万行,可能要 5 分钟。用分区(Partitioning),可以把它切成 4 份,4 个线程同时跑,2 分钟搞定。
- 怎么做:
- 在你的
csv_to_excel.ktr转换里,右键空白处 → “转换属性” → “分区”标签页; - 勾选“启用分区(Enable partitioning)”,分区方案选“哈希分区(Hash partitioning)”;
- 点“添加分区” → 字段选
id(数值型,分布均匀),分区数填4; - 保存,重新运行——你会看到日志里出现
Thread-1,Thread-2… 并发执行;
- 在你的
- PPT 锚点:第 14 页“并行处理”、第 15 页“性能调优”;
- 为什么重要:这是 Kettle 最被低估的能力。很多新人以为“ETL 就是慢”,其实是没开分区。某跨平台系统用这招,把日志同步从 40 分钟压到 6 分钟。
6.3 台阶三:把“裸奔转换”变成“带监控和回滚”(日志 + 事务)
现在转换失败,你只能看控制台一堆英文。生产环境要的是“哪里错了?影响多少行?能一键撤回吗?”
- 怎么做:
- 在转换里,拖
本文还有配套的精品资源,点击获取