Kettle 实战面试题及参考答案(完整版)

Kettle 实战面试题及参考答案(完整版)

以下是几个 Kettle(Pentaho Data Integration)项目实战面试题及参考答案的完整 Markdown 格式整理,包含代码示例和优化方案。


目录

  1. 中文乱码处理
  2. 增量数据抽取
  3. 数据去重方案
  4. 亿级数据同步
  5. 作业失败排查

1. Kettle 抽取数据时遇到中文乱码,如何解决?

答案

  • 原因:数据库客户端默认编码与 Kettle 设置不一致(如 UTF-8 与 GBK)。
  • 解决方案
    1. 在输出步骤的数据库连接中设置编码参数(如 characterEncoding=utf8)。
    2. 通过 Kettle 的 Options 菜单添加全局参数 characterEncoding=GBK/UTF8
    3. 确保源数据库和目标数据库的字符集一致。
      参考来源优快云博客

2. 如何处理增量数据抽取?请举例说明

答案

  • 方法
    1. 时间戳法:记录上次抽取的最大时间戳,仅抽取新增或修改的数据。
    2. CDC(变更数据捕获):利用数据库日志(如 MySQL Binlog)捕获增量数据。
    3. 全量比对:通过哈希值或主键比对差异数据(适用于小数据量)。
  • 示例
    -- 表输入步骤中动态传递时间戳参数
    SELECT * FROM orders WHERE update_time > '${LAST_EXTRACT_TIME}';
    

3. 抽取的数据存在重复,如何解决?

答案

  1. 排序记录:使用 排序记录 步骤按主键或关键字段排序。
  2. 去重处理:添加以下步骤之一:
    • Unique Rows:基于字段值去重。
    • HashSet:通过哈希算法快速去重。
  3. 目标表约束:在目标表中设置主键或唯一索引,防止重复插入。
    注意:去重前必须排序,否则可能遗漏部分重复数据。

示例代码

-- 表输入步骤中筛选数据
SELECT user_id, name FROM source_table;
-- 排序记录步骤配置:按 user_id 升序排序
-- Unique Rows 步骤配置:勾选 user_id 作为去重依据

4. 如何同步亿级大表数据?

答案

  • 优化方案

    1. 分页读取
      -- 分页查询示例(按主键排序)
      SELECT * 
      FROM big_table 
      ORDER BY id 
      LIMIT ${PAGE_SIZE} 
      OFFSET ${PAGE_NUM * PAGE_SIZE};
      
    2. 批量提交
      • 表输出 步骤中设置 Commit Size10,000~50,000,减少事务提交频率。
      • 启用 批量插入模式(如 MySQL 的 rewriteBatchedStatements=true)。
    3. 索引优化
      -- 同步前禁用索引(以 MySQL 为例)
      ALTER TABLE target_table DISABLE KEYS;
      -- 同步完成后重建索引
      ALTER TABLE target_table ENABLE KEYS;
      
    4. 并行处理
      • 多线程:在转换属性中设置 Nr of copies5~10(根据资源调整)。
      • 分布式集群:通过 Carte 服务器 部署多个节点并行执行。
  • 性能对比

    方法数据量(1亿条)耗时(小时)资源占用
    单线程逐行插入1亿12+低(单线程)
    分页+批量提交1亿3~5中(I/O密集)
    并行分片+集群1亿1~2高(多节点)
  • 注意事项

    • 分页时需按主键排序,避免数据错乱。
    • 监控数据库连接池,防止并发过高导致连接耗尽。

参考来源
亿级数据同步实战 |
Kettle性能调优指南

5. Kettle 作业前一天成功,第二天失败,可能原因有哪些?

答案

常见原因
  1. 数据变更
    • 源表新增字段、修改约束或数据类型。
    • 示例:ALTER TABLE source_table ADD COLUMN new_column INT; 导致字段映射失败。
  2. 资源竞争
    • 目标表被其他进程锁定(如未提交的事务持有排它锁)。
    • 排查命令:
      -- MySQL 查看锁状态
      SHOW OPEN TABLES WHERE In_use > 0;
      -- SQL Server 查看阻塞进程
      EXEC sp_who2;
      
  3. 环境问题
    • 数据库连接池满(如连接泄漏未释放)。
    • 磁盘空间不足或权限变更。
  4. 调度依赖
    • 上游作业未完成或输出文件未生成。
排查步骤
  1. 查看作业日志
    • 定位失败步骤及错误描述(如 ERROR: Column 'new_column' not found)。
  2. 验证数据源
    • 检查源表结构和数据是否符合预期:
      -- 对比元数据
      DESC source_table;
      SELECT COUNT(*) FROM source_table WHERE update_time > '${LAST_RUN_TIME}';
      
  3. 监控资源
    • 使用 top(Linux)或任务管理器(Windows)检查 CPU/内存占用。
    • 查询数据库连接数:
      -- MySQL 查看连接数
      SHOW STATUS LIKE 'Threads_connected';
      
  4. 重跑测试
    • 手动执行作业,观察是否可复现问题。
修复方案
  • 紧急处理
    1. 终止持有锁的进程:
      -- MySQL 终止进程
      KILL [process_id];
      
    2. 清理磁盘空间或扩容。
  • 长期优化
    • 添加前置检查步骤(如 检查表是否存在验证字段映射)。

参考来源
Kettle 作业失败排查指南 |
数据库锁机制详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一杯小周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值