
接到一个预研的需求,需要获取一段 sql 中某个结果字段的加工口径 sql ,具体的做法就是裁剪掉所有无关的子 sql 。例如以下这段 sql:
SELECT t3.level, t4.level_name, sum( t2.salay ) AS salary FROM t1 INNER JOIN t2 ON t1.id = t2.id INNER JOIN t3 ON t2.id = t3.id INNER JOIN t4 ON t4.level = t3.level WHERE t1.age > 50 GROUP BY t3.level; 针对 salary 结果字段,裁剪后的 sql 应该为(去掉了 t4 表的影响):
SELECT sum( t2.salary ) AS salary FROM t1 INNER JOIN t2 ON t1.id = t2.id INNER JOIN t3 ON t2.id = t3.id WHERE t1.age > 50 GROUP BY t3.level; 请问下有什么思路或者开源的工具/框架可以做到这一点的吗? 以前没有怎么做过 sql 解析这块,现在了解到的有 Apache Calcite 和 ANTLR 这两个东西,有什么开源项目是基于这两个做二开后的,想学习下,时间太紧查到的东西有限,有点下不去手
1 MoYi123 314 天前 据我了解是没这种东西的. 建议是先找产品砍掉这个需求, 实在不行就直接在 select list 里去掉不需要的, 然后相信优化器. |
3 catamaran 314 天前 一个一个看呗,从 select 入手,从需要的表开始捋,不需要的嘎掉,时间不够就申请延长时间。 |
4 oldManNewThought 314 天前 试试 sqlparser,就是 mybatis-plus 内部依赖的一个库 |
5 so2back OP @oldManNewThought #4 好的谢谢,我去看看 |
6 smplesugar 314 天前 挺有意思的 mark 一下 |