请教一个 sql 中字段血缘和字段加工口径获取的问题

220 天前
 so2back

接到一个预研的需求,需要获取一段 sql 中某个结果字段的加工口径 sql ,具体的做法就是裁剪掉所有无关的子 sql 。例如以下这段 sql:

SELECT
	t3.level,
	t4.level_name,
	sum( t2.salary ) 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 这两个东西,有什么开源项目是基于这两个做二开后的,想学习下,时间太紧查到的东西有限,有点下不去手

1282 次点击
所在节点    数据库
6 条回复
MoYi123
219 天前
据我了解是没这种东西的.
建议是先找产品砍掉这个需求, 实在不行就直接在 select list 里去掉不需要的, 然后相信优化器.
so2back
219 天前
@MoYi123 #1 哎难搞,感觉得基于 Calcite 或者 ANTLR 做二次开发,但 sql 本身就可以很复杂,要考虑的是真多,为难我一个菜鸡了
catamaran
219 天前
一个一个看呗,从 select 入手,从需要的表开始捋,不需要的嘎掉,时间不够就申请延长时间。
oldManNewThought
219 天前
试试 sqlparser,就是 mybatis-plus 内部依赖的一个库
so2back
219 天前
@oldManNewThought #4 好的谢谢,我去看看
smplesugar
219 天前
挺有意思的 mark 一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1110386

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX