当前位置: 首页 > news >正文

Kettle 小白入门指南:从A表到B表的数据清洗实战

Kettle 小白入门指南:从A表到B表的数据清洗实战

🤔 什么是 Kettle?

想象一下,你的公司有很多数据散落在不同的地方:

  • 订单数据在 MySQL 数据库
  • 客户信息在 Excel 表格
  • 日志文件在服务器上

现在老板要你把这些数据整合到一起做分析报表,怎么办?

Kettle 就是来解决这个问题的!

用人话说:

Kettle 就像一个"数据搬运工",它能帮你:

  • 📥 从各种地方读取数据(数据库、Excel、文件…)
  • 🧹 清洗数据(去重、去空格、格式化…)
  • 🔄 转换数据(计算、合并、拆分…)
  • 📤 写入到目标位置(另一个数据库、文件…)

最重要的是:不用写代码! 全程鼠标拖拽,像搭积木一样简单。


🍳 Kettle 的"厨房家族"

Kettle 项目很有趣,用厨房用具命名:

工具中文作用就像…
Spoon勺子图形化设计工具Word 的编辑界面
Pan平底锅命令行执行器双击运行程序
Kitchen厨房作业调度器定时任务

小白只需要会用 Spoon 就够了!


💼 真实案例:清洗历史订单数据

背景故事

小明在一家电商公司工作,数据库里有一张 old_orders 表,存了 5 年的订单数据(200 万条)。

老板的要求:

“把 2025 年之前的历史订单,清洗干净后放到 clean_orders 表,方便做数据分析。”

具体需求:

  1. 只要 2024 年 12 月 31 日之前的数据
  2. 去掉金额为 0 的无效订单
  3. 去掉重复的订单
  4. 手机号要脱敏(中间 4 位变成 ****
  5. 去除字段中的多余空格

小明不会写 SQL 脚本?没关系,用 Kettle 10 分钟搞定!


🚀 实战步骤(超详细)

Step 1: 安装 Kettle

  1. 下载:

    • 官网:https://sourceforge.net/projects/pentaho/
    • 下载 pdi-ce-9.x.zip(免费版)
  2. 解压:

    解压到任意目录,比如:
    D:\kettle\
    
  3. 启动 Spoon:

    • Windows:双击 Spoon.bat
    • Mac/Linux:运行 ./spoon.sh
  4. 第一次启动会弹出欢迎界面,点击"新建转换"


Step 2: 连接数据库

在 Spoon 左侧:

1. 右键点击"数据库连接" → "新建"
2. 填写信息:- 连接名称:MyDB- 连接类型:MySQL- 主机名称:localhost- 数据库名称:shop_db- 端口:3306- 用户名:root- 密码:******
3. 点击"测试" → 显示"连接成功" → 确定

Step 3: 设计数据清洗流程

整体流程图:
┌─────────────┐
│ ① 表输入    │  从 old_orders 读取数据
│ (读取A表)   │
└──────┬──────┘↓
┌─────────────┐
│ ② 过滤记录  │  只要 2025 年前 & 金额 > 0
└──────┬──────┘↓
┌─────────────┐
│ ③ 字符串操作│  去空格、手机号脱敏
└──────┬──────┘↓
┌─────────────┐
│ ④ 唯一行    │  按订单号去重
└──────┬──────┘↓
┌─────────────┐
│ ⑤ 排序记录  │  按日期排序
└──────┬──────┘↓
┌─────────────┐
│ ⑥ 表输出    │  写入 clean_orders
│ (写入B表)   │
└─────────────┘

Step 4: 详细配置每一步

① 表输入(读取 A 表)

在左侧找到 “核心对象” → “输入” → “表输入”,拖到画布上。

双击配置:

-- 连接:选择刚才创建的 MyDB
-- SQL 查询:
SELECT order_id,        -- 订单号user_name,       -- 用户名phone,           -- 手机号order_amount,    -- 订单金额order_date       -- 下单日期
FROM old_orders
WHERE order_date < '2025-01-01'  -- 只要2025年前的数据

💡 小技巧: 点击"预览"按钮,可以看到前 1000 条数据


② 过滤记录

拖入 “转换” → “过滤记录”,连接到上一步。

配置条件:

发送"真"数据到的步骤:下一步
发送"假"数据到的步骤:(不连接,自动丢弃)条件设置:
order_amount > 0   AND   phone IS NOT NULL

这样就过滤掉了:

  • ❌ 金额为 0 的订单
  • ❌ 手机号为空的订单

③ 字符串操作(清洗数据)

拖入 “转换” → “字符串操作”

配置:

字段名操作说明
user_name去除两端空白去掉名字前后的空格
phone去除两端空白去掉手机号空格

再拖入 “脚本” → “替换字符串” 来脱敏手机号:

字段:phone
查找:^(\d{3})\d{4}(\d{4})$  (正则表达式)
替换为:$1****$2
使用正则表达式:✓结果:
138 1234 5678 → 138****5678

④ 唯一行(去重)

拖入 “转换” → “唯一行(哈希值)”

配置:

用来比较的字段:
☑ order_id  (按订单号去重)去重选项:
○ 保留第一行(保留最早的记录)

⑤ 排序记录

拖入 “转换” → “排序记录”

配置:

排序字段:order_date
升序:✓  (从旧到新)

⑥ 表输出(写入 B 表)

拖入 “输出” → “表输出”

配置:

连接:MyDB
目标表:clean_orders
提交记录数量:1000  (每1000条提交一次,提高性能)☑ 指定数据库字段  (让Kettle自动匹配字段)如果目标表不存在:
点击"SQL"按钮 → 自动生成建表语句 → 执行

Step 5: 连接各个步骤

  1. 按住 Shift
  2. 点击 “表输入” 不放
  3. 拖动到 “过滤记录” 上释放
  4. 重复操作连接所有步骤

你会看到类似这样的流程图:

[表输入] → [过滤记录] → [字符串操作] → [唯一行] → [排序] → [表输出]

Step 6: 测试运行

  1. 点击工具栏的 绿色播放按钮 ▶️
  2. 弹出执行配置窗口,保持默认,点击"启动"

查看执行日志:

表输入.0 - 读取了 150000 行
过滤记录.0 - 过滤掉 5000 行
唯一行.0 - 去重了 2000 行
表输出.0 - 写入了 143000 行执行结束,用时:2分15秒
错误数:0

成功! 历史数据已经清洗完毕


📊 实际执行效果对比

A 表(old_orders)- 清洗前

order_iduser_namephoneorder_amountorder_date
1001张三13812345678199.002024-06-15
1002李四139876543210.002024-07-20
1003王五13612349876350.002024-08-10
1001张三13812345678199.002024-06-15

问题:

  • ❌ 有金额为 0 的无效订单(1002)
  • ❌ 有重复订单(1001 出现两次)
  • ❌ 名字有多余空格("李四 ")

B 表(clean_orders)- 清洗后

order_iduser_namephoneorder_amountorder_date
1001张三138****5678199.002024-06-15
1003王五136****9876350.002024-08-10

改进:

  • ✅ 去除了金额为 0 的订单
  • ✅ 去除了重复订单
  • ✅ 去除了多余空格
  • ✅ 手机号已脱敏

🎯 保存与定时执行

保存 Transformation

文件 → 保存为...
保存位置:D:\kettle\jobs\clean_orders.ktr

.ktr 就是 Kettle Transformation 文件


定时执行(可选)

如果需要每天自动执行:

Windows 计划任务:

1. 创建批处理文件 run.bat:@echo offcd D:\kettlepan.bat /file:"D:\kettle\jobs\clean_orders.ktr"2. 打开"任务计划程序"
3. 创建基本任务 → 每天凌晨 2 点执行 run.bat

Linux crontab:

# 编辑定时任务
crontab -e# 添加:每天凌晨2点执行
0 2 * * * /opt/kettle/pan.sh -file=/data/jobs/clean_orders.ktr

💡 小白常见问题 FAQ

Q1: Kettle 需要编程基础吗?

答:不需要!

  • 90% 的功能都是拖拽配置
  • 只需要会写简单的 SQL 查询
  • 复杂逻辑可以用内置的 JavaScript 步骤(可选)

Q2: 能处理多大的数据量?

答:看情况

数据量处理时间建议
1万条几秒钟无压力
10万条1-2分钟适合
100万条10-30分钟推荐
1000万条+1小时+考虑分批或用 Spark

Q3: 出错了怎么调试?

答:Kettle 提供了强大的调试功能

  1. 预览数据: 每个步骤右键 → 预览 → 看前 1000 行
  2. 查看日志: 执行窗口有详细的错误信息
  3. 单步执行: 可以暂停、单步执行查看数据流

常见错误:

  • 数据库连接失败 → 检查 IP、端口、用户名密码
  • 字段不存在 → 检查 SQL 和目标表字段是否匹配
  • 内存溢出 → 调整 Spoon.bat 中的内存参数

Q4: 和写 SQL 脚本比有什么优势?

Kettle 的优势:

  • ✅ 可视化,容易理解和维护
  • ✅ 支持多种数据源(不只是数据库)
  • ✅ 内置几百种转换组件
  • ✅ 不需要编译,改完就能跑
  • ✅ 有图形化日志和监控

SQL 脚本的优势:

  • ✅ 执行效率更高
  • ✅ 适合简单的数据迁移
  • ✅ 版本管理方便(Git)

建议: 中等复杂度的 ETL 用 Kettle,超大数据量或简单迁移用 SQL


🎓 进阶学习路径

掌握了本案例后,你可以继续学习:

入门级(1-2周)

  • ✅ 各种输入输出(Excel、CSV、JSON)
  • ✅ 常用转换步骤(计算、合并、查找)
  • ✅ 简单的 Job 调度

中级(1-2个月)

  • 📊 数据仓库建模
  • 🔀 复杂的数据转换逻辑
  • 🐘 大数据集成(Hadoop、Hive)

高级(3-6个月)

  • 🔄 增量抽取(CDC)
  • 🌐 分布式执行(Carte)
  • 📈 性能优化技巧

🎉 总结

通过这个案例,你应该已经了解:

  1. Kettle 是什么: 一个不用编程的 ETL 工具
  2. Spoon 是什么: Kettle 的图形化设计器
  3. 怎么用: 拖拽步骤 → 配置参数 → 连接 → 运行
  4. 能做什么: 从 A 表读取 → 清洗转换 → 写入 B 表

关键要点:

  • 🥄 用 Spoon 像搭积木一样设计数据流程
  • 🧹 从读取、清洗、转换到输出,每一步都可视化
  • 📈 适合处理中等规模(百万级)的数据
  • 🕐 可以定时自动执行

现在就打开 Spoon,开始你的第一个 ETL 之旅吧! 🚀

有问题随时查看日志,Kettle 会告诉你哪里出错了。记住:所有的 ETL 高手都是从拖拽第一个"表输入"开始的!

http://www.dtcms.com/a/588987.html

相关文章:

  • 莱芜正规的企业建站公司东莞专业网站建设公司
  • 尝试性解读 Hopper 和 BlackWell 架构的硬件缓存一致性及其深远影响
  • 深入解析OpenHarmony USB DDK通信机制:从架构到实战
  • 1.8 分块矩阵
  • 2025年游戏手机市场发展趋势与硬件性能全面解析
  • 一般角度的旋转矩阵的推导
  • tomcat建网站个人域名申请的方法
  • 实训11 正则表达式
  • Electron 如何判断运行平台是鸿蒙系统(OpenHarmony)
  • C++ tuple 学习笔记(笔误请指出)
  • 蒙阴建设局网站衡水网站建
  • 服务器运维(十)SQLite3 配置指南——东方仙盟炼气期
  • 服务器运维(十一)SQLite3 php封装——东方仙盟炼气期
  • 【C++】多态(1):多态定义实现及虚函数的重写
  • Ascend C 算子开发模式全解析:从 Kernel 到工程化
  • 在 Unity 游戏开发中,为视频选择 VP8 还是 H.264
  • 【Java知识】OkHttp一款优秀的http客户端工具
  • 建设好网站为什么读取不到文件网站建设官网多少钱
  • 一个FPGA通加载不同程序实现4K edp和V-by-One
  • 脑科学图像处理软件
  • 【C语言实战(79)】深入C语言单元测试:基于CUnit框架的实战指南
  • 会小二也是做会议网站的小地方做外卖网站怎样
  • python+playwright自动化如何解决文件上传问题
  • Linux介绍及常用命令
  • PyTorch中张量和模型的核心属性解析
  • 哈尔滨网站设计公司公司名字大全免费版
  • 大模型知识编辑技术——李宏毅2025《机器学习》第十讲
  • JAVA中next和nextLine的区别
  • 东莞设计网站企业淘宝客建站需要多少钱
  • ROS2 Humble 笔记(十二)launch 文件与 namespace 启动多个节点