# 【Skill 创作】DataBridge:多数据库 SQL ↔ Pandas 智能转换器,支持 Doris/MySQL/SelectDB 等方言
## 1. Skill 简介
这是一个支持多数据库方言的 **SQL ↔ Pandas 双向转换 + 智能优化助手**。选择目标数据库(MySQL/Doris/StarRocks/SelectDB/ClickHouse 等),自然语言描述需求,一键生成对应版本的 SQL 或 Pandas 代码,并自动诊断优化。适合大数据开发、数据分析师、数据仓库工程师日常使用。
## 2. 使用场景
你为什么想做它?—— 因为我在工作中遇到了这些麻烦:
| 真实场景 | 之前的麻烦 | 做出来之后的好处 |
|----------|-----------|-----------------|
| **MySQL → Doris 迁移** | 手动改 SQL,经常忘记 Bitmap/HLL 等特殊函数 | 一键转换,自动适配 Doris 方言 |
| **SQL 转 Pandas** | 要写很多 merge、groupby、sort 代码,容易出错 | 生成可直接运行的 Pandas 代码,包含完整 import |
| **SQL 性能优化** | 依赖经验,不知道哪能优化 | AI 自动诊断,给出具体优化建议 |
| **跨团队协作** | 业务团队用 MySQL,数据团队用 Doris,SQL 交流困难 | 一键互转,降低沟通成本 |
真实场景:上周我在做一个 MySQL 业务表迁移到 Doris 的任务,有 20+ 条历史 SQL 需要改写,手动改了一天还没改完,差点加班 —— 所以做了这个 Skill 出来!
## 3. 创作过程
### 核心思路
把三个高频需求整合在一个 Skill 里:
1. SQL ↔ Pandas 转换
2. 跨数据库方言转换
3. SQL 智能优化
### 关键提示词设计
我是这样组织 System Prompt 的:
```
一、角色定义
二、数据库支持表(版本 + 关键特性)
三、三大核心功能模块(含函数映射表)
四、输出格式规范
五、对话示例
```
### 数据库方言知识库
为了让转换更准确,我整理了这些数据库的语法差异:
- **MySQL → Doris**:GROUP_CONCAT、LIMIT 语法、Bitmap 函数
- **MySQL → StarRocks**:TO_BITMAP、BITMAP_COUNT 函数差异
- **MySQL → ClickHouse**:coalesce、groupArray、formatDateTime 函数名不同
### 优化逻辑
内置了 7 个优化维度:
- 索引利用
- JOIN 顺序
- 子查询优化
- 聚合优化
- 分区裁剪
- 函数优化
- 数据倾斜
## 4. 使用步骤
### 步骤 1:选择数据库类型
先告诉系统你要用什么数据库(如:Doris 2.0、MySQL 8.0、StarRocks 3.0)
### 步骤 2:输入需求
三种输入方式都支持:
-
自然语言描述(“统计每个用户的月消费金额”)
-
SQL 查询(复制粘贴现有 SQL)
-
Pandas 代码(需要转成 SQL)
### 步骤 3:获取结果
系统会输出:
1. 目标数据库的 SQL 代码
2. 对应的 Pandas 代码
3. 语法差异说明
4. (可选)优化建议
## 5. 效果展示
### 示例 1:自然语言 → SQL + Pandas
**输入**:
```
目标数据库:Doris 2.0
需求:统计每个用户2024年每月的消费金额,只显示金额大于500的,按金额降序排列
```
**输出**:
```sql
SELECT
user_id,
DATE_FORMAT(order_date, '%Y-%m') AS month,
SUM(amount) AS total_amount
FROM orders
WHERE order_date >= ‘2024-01-01’
AND order_date < ‘2025-01-01’
GROUP BY user_id, DATE_FORMAT(order_date, ‘%Y-%m’)
HAVING SUM(amount) > 500
ORDER BY total_amount DESC;
```
```python
import pandas as pd
df = pd.read_csv(‘orders.csv’)
df[‘order_date’] = pd.to_datetime(df[‘order_date’])
df[‘month’] = df[‘order_date’].dt.to_period(‘M’).astype(str)
result = (
df\[(df\['order_date'\] >= '2024-01-01') & (df\['order_date'\] < '2025-01-01')\]
.groupby(\['user_id', 'month'\], as_index=False)\['amount'\]
.sum()
.rename(columns={'amount': 'total_amount'})
)
result = result[result[‘total_amount’] > 500]
result = result.sort_values(‘total_amount’, ascending=False)
```
-–
### 示例 2:MySQL → Doris 转换
**输入**(一段 MySQL 8.0 SQL):
```sql
SELECT
a.order_id,
b.user_name,
COUNT(\*) AS order_count,
SUM(a.amount) AS total_amount
FROM orders a
LEFT JOIN users b ON a.user_id = b.id
WHERE a.created_at > ‘2024-01-01’
GROUP BY a.order_id, b.user_name;
```
**输出**:
>
语法检查通过,Doris 2.0 完全兼容
>
优化建议:在 orders.created_at 上创建索引
## 6. Skill 链接
Skill 的完整 System Prompt 可直接复制使用。
## 7. 总结与思考
### 最满意的地方
1. **国产 OLAP 引擎支持**:Doris/StarRocks/SelectDB 这些市面上通用 AI 工具很少覆盖,但对国内数据从业者特别实用
2. **双模式输出**:SQL + Pandas 同时给出,业务和技术团队都能用
3. **输出格式规范**:用 Markdown 分块,代码高亮,复制即可用
### 后续还想怎么优化
- 增加 **执行计划可视化** 功能
- 支持 **HiveQL** 到 **Spark SQL** 的转换
- 添加 **数据血缘分析** 功能
- 支持更多国产数据库(如 TiDB、OceanBase)
### 希望给你的建议
1. 先用对话示例测试效果
2. 有具体的业务场景可以分享给我,我会持续优化
3. 如果遇到转换不准确的 SQL,欢迎提供测试用例,我会调整知识库!
-–
**感谢观看!如果对你有帮助,欢迎点赞收藏,有问题也可以在评论区交流~**