1. 项目背景与核心价值
上周在技术评审会上,研发团队又为"用户画像分析"和"订单统计报表"两个需求争论不休——业务方要的急,后端觉得写API太重复,数据分析师抱怨取数效率低。这让我意识到,公司里80%的数据服务需求,本质上都是在用不同姿势执行相似的SQL查询。于是花了两个周末,折腾出一套将业务SQL自动转化为标准API的解决方案。
这套系统的核心价值在于:
- 消除重复开发:业务人员写的SQL直接变成可调用的API
- 降低协作成本:数据分析师、产品经理、后端开发终于能说同一种语言
- 提升交付速度:从需求提出到API上线,最快只需5分钟
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计
2.1 整体方案选型
采用三层架构设计:
code复制[SQL编辑器] -> [SQL解析引擎] -> [API网关]
↓ ↓ ↓
[权限控制] [参数化处理] [流量管控]
选择这个架构主要考虑:
- 轻量级:不需要引入Hadoop/Spark等重型组件
- 可扩展:每层都可以独立升级或替换
- 易维护:开发人员只需关注SQL质量,不用操心API细节
2.2 关键技术组件
- SQL解析器:选用Apache Calcite(比ANTLR更擅长处理方言SQL)
- API网关:基于Spring Cloud Gateway二次开发
- 参数化引擎:自研的模板变量系统(支持${date}等动态参数)
- 权限控制:集成公司现有的RBAC系统
注意:不要使用MyBatis等ORM框架自带的SQL解析,它们对复杂查询(如WITH子句)支持有限
3. 核心实现细节
3.1 SQL标准化处理
所有业务SQL需要经过以下处理流程:
sql复制-- 原始SQL(业务人员提供)
SELECT user_id, COUNT(order_id)
FROM orders
WHERE create_time > '2023-01-01'
GROUP BY user_id
-- 标准化后(系统自动转换)
SELECT user_id, COUNT(order_id) AS order_count
FROM
