最佳实践-SQL脚本的语法校验

OKX欧易app

OKX欧易app

欧易交易所app是全球排名第一的虚拟货币交易所,注册领取6万元盲盒礼包!

APP下载   官网注册
前言

系统的版本发布流程里,随需求的叠加,出现了多次版本的升级脚本填写不对或忘记补充的情况,虽然项目内已经三令五申严格要求研发必须针对SQL脚本反复走查,甚至手动执行且在无报错前提下,才能合入代码。但效果仍然较差(时间一长),基于此,项目(组件里)急需一种可以自动化校验的能力,从根源上杜绝此类问题。

一、SQL脚本校验

系统中已经提供了前置检查框架,所以在前置检查框架中叠加对应的SQL脚本校验即可,调研后使用alibaba的SQLParserUtils进行检查。
依赖的POM

        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid</artifactId>            <version>1.2.11</version>        </dependency>
   SQLParserUtils.createSQLStatementParser(sql, DbType.postgresql)

测试用例:

 public static void main(String[] args) {        String sql = "FROM (SELECT p.datekey datekey, p.userid userid, c.clienttype  FROM detail.usersequence_client c JOIN fact.orderpayment p ON p.orderid = c.orderid  JOIN default.user du ON du.userid = p.userid WHERE p.datekey = 20131118 ) base  INSERT OVERWRITE TABLE `test`.`customer_kpi` SELECT base.datekey,   base.clienttype, count(distinct base.userid) buyer_count GROUP BY base.datekey, base.clienttype";        SQLStatementParser hive = SQLParserUtils.createSQLStatementParser(sql, DbType.hive);        SQLStatement statement = hive.parseStatement();        System.out.println(statement);        // as you can see , using this parseDriver will cause an error//        ParseDriver pd = new ParseDriver();//        ASTNode ast = pd.parse(sql);//        System.out.println(ast.dump());        sql = "create index IDX_ltp_basic_info_inventory_name on ltp_basic_info(inventory_name)";        PgSqlChecker.format(sql, DbType.postgresql);        SQLStatementParser pg = SQLParserUtils.createSQLStatementParser(sql, DbType.postgresql);        statement = pg.parseStatement();        System.out.println(statement);    }

在具体使用中,发现有的SQL语句,还是有误判的,如:

create index IDX_ltp_basic_info_inventory_name on ltp_basic_info(inventory_name varchar_pattern_ops)ALTER TABLE eth_resource ADD COLUMN if not exists tpid_set_pg TEXT

系统中,对于特定不支持的语法SQL,进行异常保护。

本站所有软件信息均由用户上传发布,版权归原著所有。如有侵权/违规内容,敬请来信告知邮箱:764327034@qq.com,我们将及时撤销! 转载请注明出处:https://www.ssyg068.com/kuaixun/2145.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年06月22日
下一篇 2024年06月22日

相关推荐

  • SQL CHECK 约束:数据校验的利器

    本文将带你深入了解SQL中的CHECK约束,通过示例演示如何正确使用CHECK约束,以及它在数据校验中的重要作用。掌握CHECK约束,让你的数据库数据更加准确、规范。一、引言在数据库设计中,数据的准确性和规范性至关重要。而CHECK约束作为SQL中的一种重要约束,可以确保列中的数据

    2024-06-27 08:00:01
    179 0

发表回复

8206

评论列表(0条)

    暂无评论

binance币安交易所
已有2000万用户加入币安交易所

立即下载