🦀 ClawHub
kettle-sql-extractor
by @chenjunhan633-glitch
从Kettle作业(.kjb/.ktr)中提取SQL脚本,支持批量提取、合并SQL组件和简洁输出
TERMINAL
clawhub install kettle-sql-extractor📖 About This Skill
name: kettle-sql-extractor slug: kettle-sql-extractor version: 2.1.0 changelog: | v2.1.0 (2026-04-03): - 新增用户需求总结:基于用户反馈,明确记录"只要SQL文件"的常见需求 - 强调简化输出模式:在文档中突出
--simple-output 参数的重要性
- 使用场景补充:添加"仅需SQL文件"的使用场景说明
- 最佳实践更新:明确推荐简化输出模式作为默认选择
v2.0.0 (2026-03-31):
- 重构为纯SQL提取工具:移除所有数据库转换模板和规范
- 简化核心功能:专注于Kettle SQL提取,不包含任何转换逻辑
- 文件清理:删除config、templates、logs等无关目录
- 技能重命名:从"kettle-to-starrocks"重命名为"kettle-sql-extractor"
v1.6.0 (2026-03-30):
- 新增简化输出模式:基于用户反馈,添加 --simple-output 参数
- 解决文件夹过多问题:简化输出模式下直接在当前目录生成SQL文件
- 用户需求精准满足:支持"一个作业一个SQL文件,不要多余文件夹"的需求
v1.5.0 (2026-03-30):
- 重要澄清:基于用户反馈,明确区分"纯提取模式"和"优化转换模式"
- 用户需求明确化:记录核心需求"不需要对原始的sql文件进行任何修改,只需要提取出来总结成一个sql脚本"
- 技能结构调整:强调默认行为应为纯提取
v1.4.0 (2026-03-30):
- 优化:简化输出产物,可根据用户需求只保留核心文件
- 优化:改进批量处理流程,减少不必要的中间文件
- 新增:实际生产测试验证,确保功能稳定可靠
v1.3.0 (2026-03-30):
- 新增:合并单个Kettle作业中多个SQL组件为一个SQL脚本的功能
- 新增:merge_kettle_sql.py - 智能合并SQL,保持执行顺序
- 新增:SQL依赖关系分析,自动建议执行顺序
v1.2.0 (2026-03-30):
- 新增:批量提取多个Kettle作业中SQL脚本的功能
- 新增:batch_extract_kettle_sql.py - 支持批量处理目录和文件列表
- 新增:HTML报告生成,可视化展示提取结果
v1.1.0 (2026-03-27):
- 新增:完整的Kettle SQL提取解决方案,解决XML转义和截断问题
- 新增:字段完整性验证和业务逻辑保持机制
- 新增:复杂Kettle作业结构分析方法
v1.0.0 (2026-03-27):
- 初始版本:Kettle作业SQL提取基础功能
homepage: https://clawhub.com/skills/kettle-sql-extractor
description: 从Kettle作业(.kjb/.ktr)中提取SQL脚本,支持批量提取、合并SQL组件和简洁输出
metadata: {"clawdbot":{"emoji":"📊","requires":{"anyBins":["kettle","pan","kitchen","python3"]},"os":["linux","darwin","win32"]}}
Kettle SQL提取工具
从Kettle ETL作业中提取SQL脚本,支持批量处理和智能合并。
🎯 核心功能
1. 纯SQL提取
2. 智能合并
3. 批量处理
4. 简洁输出
--simple-output参数,避免多余文件夹5. 只要SQL文件模式
--simple-output 参数,只生成SQL文件📋 使用说明
核心原则
只提取,不修改 - 保持SQL原样,不做优化、转换或重组常见需求场景
#### 🎯 场景1:只要SQL文件
用户需求:只需要提取后的SQL文件,不需要HTML报告、JSON总结等额外文件
解决方案:使用 --simple-output 参数
典型场景:SQL备份、脚本迁移、代码审查、版本控制
# 单个文件,只要SQL文件
python merge_kettle_sql.py job.kjb --simple-output批量处理,只要SQL文件
for file in *.kjb; do python merge_kettle_sql.py "$file" --simple-output; done
#### 📊 场景2:需要完整分析报告
用户需求:需要详细的HTML报告和统计分析
解决方案:使用 batch_extract_kettle_sql.py 工具
典型场景:项目分析、文档生成、团队分享
# 生成完整分析报告
python batch_extract_kettle_sql.py --dir /path/to/kettle/jobs --output 分析报告
使用步骤
#### 1. 基本用法(单个文件)
# 提取单个Kettle作业中的SQL
python merge_kettle_sql.py job.kjb简化输出模式(推荐,只要SQL文件)
python merge_kettle_sql.py job.kjb --simple-output
#### 2. 批量处理(多个文件)
# 批量提取目录中所有Kettle作业
python batch_extract_kettle_sql.py --dir /path/to/kettle/jobs批量处理指定文件
python batch_extract_kettle_sql.py --file job1.kjb job2.ktr
#### 3. 输出控制
# 指定输出目录
python merge_kettle_sql.py job.kjb --output 提取结果批量处理并生成HTML报告
python batch_extract_kettle_sql.py --dir /path/to/kettle/jobs --output 分析报告
📁 输出文件
模式1:只要SQL文件(推荐用于日常使用)
使用参数:--simple-output
适用场景: SQL备份、脚本迁移、代码审查、版本控制
当前目录/
├── job_作业名称1_merged_detailed.sql
├── job_作业名称2_merged_detailed.sql
└── job_作业名称3_merged_detailed.sql
特点:
模式2:完整分析报告
使用参数:--output 分析报告
适用场景: 项目分析、文档生成、团队分享、审计检查
batch_kettle_analysis/
├── batch_report.html # 📊 HTML可视化报告
├── batch_summary.json # 📋 JSON格式总结
├── batch_summary.txt # 📝 文本格式总结
└── kettle_files/ # 📂 单个文件分析结果
├── job1_kjb/
│ ├── basic_info.json # 🔍 基本信息
│ ├── sql_components.json # 📊 SQL组件列表
│ └── extracted_sql.txt # 📄 提取的SQL
└── job2_ktr/
└── ...
特点:
🔧 工具脚本
1. scripts/merge_kettle_sql.py(核心合并工具)
将单个Kettle作业中的多个SQL组件合并为一个SQL文件# 基本用法:合并SQL
python scripts/merge_kettle_sql.py job.kjb简化输出:在当前目录生成SQL文件
python scripts/merge_kettle_sql.py job.kjb --simple-output批量处理多个文件
python scripts/merge_kettle_sql.py *.kjb --batch生成可执行SQL(带事务控制)
python scripts/merge_kettle_sql.py job.kjb --executable生成简化SQL(只包含语句)
python scripts/merge_kettle_sql.py job.kjb --simple
输出文件:
job_名称_merged_detailed.sql - 详细合并SQL(带注释和分析)job_名称_executable.sql - 可执行SQL(带事务控制)job_名称_simple.sql - 简化SQL(只包含语句)2. scripts/batch_extract_kettle_sql.py(批量提取工具)
批量提取多个Kettle作业中的SQL脚本# 批量提取目录中所有文件
python scripts/batch_extract_kettle_sql.py --dir /path/to/kettle/jobs批量提取指定文件
python scripts/batch_extract_kettle_sql.py --file job1.kjb job2.ktr从文件列表批量提取
echo "/path/to/job1.kjb" > kettle_files.txt
echo "/path/to/job2.ktr" >> kettle_files.txt
python scripts/batch_extract_kettle_sql.py --list kettle_files.txt生成合并的SQL文件便于查看
python scripts/batch_extract_kettle_sql.py --dir /path/to/kettle/jobs --consolidate
3. scripts/kettle_xml_parser.py(核心解析器)
XML解析模块,解决SQL提取的常见问题:4. scripts/extract_kettle_sql_simple.sh(简化提取脚本)
一键提取脚本,专门满足"只要SQL文件"的需求:# 使用方法
./scripts/extract_kettle_sql_simple.sh <源目录> <目标目录>示例
./scripts/extract_kettle_sql_simple.sh "/path/to/kettle/jobs" "/path/to/sql/output"
5. scripts/extract_kettle_sql_simple.bat(Windows简化提取脚本)
Windows版本的一键提取脚本:REM 使用方法
scripts\extract_kettle_sql_simple.bat <源目录> <目标目录>REM 示例
scripts\extract_kettle_sql_simple.bat "C:\Users\13802\Desktop\DWS\MAINTENANCE" "C:\Users\13802\Desktop\DWS原sql提取\MAINTENANCE"
📊 功能特点
1. 完整性保证
2. 错误处理
3. 性能优化
4. 用户体验
📈 使用场景
1. SQL备份与迁移(推荐使用--simple-output模式)
2. 代码分析与审查
3. 批量处理与自动化
--simple-output模式,便于自动化脚本处理4. 故障排查与调试
5. 只要SQL文件场景
--simple-output 参数🚀 快速开始
安装依赖
# 确保已安装Python 3.x
python3 --version安装必要的Python库
pip install lxml beautifulsoup4
基本使用示例
# 1. 准备输出目录
mkdir -p /path/to/output
cd /path/to/output2. 提取SQL(简化模式)
python scripts/merge_kettle_sql.py /path/to/kettle/job.kjb --simple-output3. 验证结果
ls -la *.sql
head -20 job_*.sql
批量处理示例
# 1. 批量分析Kettle作业
python scripts/batch_extract_kettle_sql.py --dir /path/to/kettle/jobs --output 批量分析2. 查看HTML报告
open 批量分析/batch_report.html3. 批量合并SQL
cd /path/to/output
python scripts/merge_kettle_sql.py /path/to/kettle/jobs/*.kjb --simple-output
🔍 故障排除
常见问题1:SQL提取不完整
症状:提取的SQL内容被截断 解决:使用内置的XML字符处理功能常见问题2:特殊字符问题
症状:SQL中包含<, >等字符
解决:工具自动处理XML转义字符常见问题3:文件格式问题
症状:无法解析.kjb或.ktr文件 解决:检查文件是否为有效的Kettle XML格式📝 最佳实践
1. 根据需求选择模式
# 场景1:只要SQL文件(日常使用推荐)
python scripts/merge_kettle_sql.py job.kjb --simple-output场景2:需要完整分析报告(项目分析使用)
python scripts/batch_extract_kettle_sql.py --dir /path/to/kettle/jobs --output 分析报告
2. 备份原始文件
# 处理前备份原始Kettle文件
cp -r /path/to/kettle/jobs /path/to/kettle/jobs_backup_$(date +%Y%m%d)
3. 逐步验证
# 先测试单个文件
python scripts/merge_kettle_sql.py test.kjb --simple-output检查输出
cat job_test_merged_detailed.sql确认无误后批量处理
python scripts/merge_kettle_sql.py *.kjb --simple-output
4. 使用版本控制
# 将提取的SQL纳入版本控制(使用简化输出模式)
python scripts/merge_kettle_sql.py *.kjb --simple-output
git add *.sql
git commit -m "提取Kettle作业SQL: $(date)"
5. 定期清理
# 清理旧的批处理结果
find . -name "batch_*" -type d -mtime +7 -exec rm -rf {} \;
6. "只要SQL文件"的最佳实践
--simple-output 参数# 批量处理,只要SQL文件
for file in *.kjb; do
echo "处理: $file"
python scripts/merge_kettle_sql.py "$file" --simple-output
done复制SQL文件到目标目录
cp *.sql /path/to/target/directory/
📚 相关文件
文档文件 (位于 docs/ 目录)
使用指南 (位于 docs/ 目录)
总结报告 (位于 docs/ 目录)
📈 技能验证
基于实际生产测试验证:
📌 "只要SQL文件"需求总结
需求背景
基于用户反馈,很多用户在使用Kettle SQL提取工具时有一个明确的需求: "我只要提取之后的sql文件,不要给我其他东西"解决方案
使用--simple-output 参数可以完美满足这个需求:
# 单个文件
python scripts/merge_kettle_sql.py job.kjb --simple-output批量处理
for file in *.kjb; do
python scripts/merge_kettle_sql.py "$file" --simple-output
done
典型使用场景
1. SQL备份:只需要SQL脚本进行备份 2. 脚本迁移:将SQL迁移到其他系统 3. 代码审查:直接查看SQL内容 4. 版本控制:将SQL纳入git管理 5. 日常维护:快速获取SQL进行验证文件输出对比
--simple-output):只生成SQL文件--simple-output):生成HTML报告、JSON总结等额外文件最佳实践建议
--simple-output 模式🔄 后续计划
短期优化
长期规划
"只要SQL文件"优化
注意:此工具专注于SQL提取功能,不包含任何数据库特定的转换逻辑。提取的SQL保持原样,适用于各种数据库系统。
重要提醒:如果用户的需求是"只要SQL文件",请使用 --simple-output 参数,这是满足这个需求的最直接方式。