zhihuifan

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  83 随笔 :: 0 文章 :: 4 评论 :: 17万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

需求分析:(用其它方法替代metabase中的某些功能)
功能1.通过对sql查询语句的分析,得到所有表名,以及所有表的字段名,字段类型,字段注解信息。
功能2.在sql语句执行查询前,校验sql语句是否正确,得到校验后的错误信息。

带着这个需求,我去学习并测试了jsqlparser和calcite和以及druid的相关功能,并在这里记录自己测试的结果
(该结果只针对sql查询语句的解析)

jsqlparser:
上手容易,操作简单,只能对sql语句进行拆分解析,和数据库无关。
calcite:
功能强大,操作相对jsqlparser复杂一点,对sql语句的解析功能相对jsqlparser来说很强大,
可以和数据库建立查询,在jsqlparser解析结果的基础上还可以得到字段的类型和字段注解。
druid:
sql解析功能和jsqlparser类似,只能对sql语句进行拆分解析;如果用sql监控功能建立sql语句的结果分析,得到的结果和未建立数据库连接前一样。

相关api:
jsqlparser:
http://jsqlparser.sourceforge.net/docs/
calcite:
http://calcite.apache.org/apidocs/index.html
druid:
http://tool.oschina.net/apidocs/apidoc?api=druid0.26

相关学习文档和测试代码:
jsqlparser
链接:https://www.cnblogs.com/zhihuifan10/articles/11124953.html
calcite 
druid 
(后面会补上,待续...)


结论总结:
只有calcite可以得到需求中需要的结果,但是有些函数在calcite中不支持,例如mysql中的group_concat 函数,在执行sql解析时抛出函数不存在异常;
为了解决这个功能,我测试了calcite添加内置函数,但是这个功能有局限性,不太适用我的需求场景,现在未找到方法来替代metabase中解析sql功能。

 

声明:此博客为个人学习之用,如与其他作品雷同,纯属巧合,转载请指明出处!

posted on   Hi,ZHF  阅读(6711)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示