V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
route
V2EX  ›  程序员

最近要基于 Java 整一个 sql 构建、sql 检验、sql 优化的功能,求各位大佬分享下好用的脚手架?

  •  
  •   route · 2022-09-30 09:30:00 +08:00 · 1282 次点击
    这是一个创建于 784 天前的主题,其中的信息可能已经有所发展或是发生改变。

    基本需求如下:

    1. 用户自己输入 sql 语句,判断 sql 语句语法,最好能帮他优化 sql 语句
    2. 也可以通过拖拉前端组件,点击某些按钮,从零生成 sql 语句

    前提:

    1. 没有实体表,可以提供表结构数据

    我在网上找的脚手架 druid parser ,apache calcite ,都是比较好的,但对于比较复杂的 sql 语句,可能就识别不出来了。而且这两个脚手架的开发 api 资料在网上也不足。

    wangyiyi10
        1
    wangyiyi10  
       2022-09-30 09:43:24 +08:00
    calcite 用过,应该不会出现 sql 识别不出来的情况吧?除非是 SQL 语法上不兼容。也就是 calcite 调用的语法标准和你执行引擎不一致。
    还有就是 SQL 优化部分,calcite 也是有的,只是如果你只有 meta 信息,基本只能做简单的基于规则的优化。
    qocja
        2
    qocja  
       2022-09-30 10:13:41 +08:00
    1. 小米和美团我记得都有类似的工具, SQLAdvisor, 另一个叫啥忘了, 自己拿 antrl 写一个也行
    qocja
        3
    qocja  
       2022-09-30 10:15:02 +08:00
    antrl->antlr
    qocja
        4
    qocja  
       2022-09-30 10:16:05 +08:00
    2. 这个就是做低代码呗, 没啥好用的脚手架, 单表简单, 多表多一个生成 DAG, 自己写了就完事
    route
        5
    route  
    OP
       2022-09-30 11:47:54 +08:00
    @wangyiyi10
    我在测试 calcite 的时候,使用 mysql 数据库执行这条语句:"SELECT @rowNum:=@rowNum + 1 AS ‘行号’,a.* FROM class a,(SELECT @rowNum:=0) b“,报错了,词法分析分析不出 @这个,另外加上转义字符可能也是别不出。但是基于 mysql 是可以执行的。
    route
        6
    route  
    OP
       2022-09-30 11:48:18 +08:00
    @qocja 感谢分享
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3987 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:29 · PVG 13:29 · LAX 21:29 · JFK 00:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.