首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

技术分享 | 使用 TiDB 的 SQL 解析器生成 SQL 指纹

作者:孙健 爱可生研发工程师,负责高可用组建和 SQL 审核相关开发。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。...代码有 2 千多行,完全通过字符串解析会使得代码及其复杂而难以阅读,好处是无需关心 SQL 语义。...基于 TiDB SQL parser 的实现 TiDB SQL parser 的功能是把 SQL 语句按照 SQL 语法规则进行解析,将文本转换成抽象语法树,另外 TiDB SQL parser 支持将语法树转换成...通过 TiDB SQL 解析器将 SQL 解析成语法树 解析出的语法树大致如下,其中"..." 代表之前存在多级。 &ast.SelectStmt { Fields: ......} 总结 使用 TiDB SQL parser 可以快速准确的实现 SQL 指纹,相比字符串解析降低了阅读的复杂度; 额外的你需要花时间了解 TiDB 语法树的结构。 ----

1.6K20

使用Calcite解析Sql做维表关联(二)

继上一篇中使用Calcite解析Sql做维表关联(一) 介绍了建表语句解析方式以及使用calcite解析解析流表join维表方法,这一篇将会介绍如何使用代码去实现将sql变为可执行的代码。...实现流程分析: 注册表 根据对create语句解析的结果:表名称、字段信息、表属性,注册成为相应的源表、结果表; join 拆解 使用calcite 解析后得到两个部分join部分、insert部分,join...以异步查询mysql为例分析:需要根据维表定义的字段、join的关联条件解析生成一条sql语句,根据流入数据解析sql的查询条件值,然后查询得到对应的维表值,将流入数据与查询得到的维表数据拼接起来输出到下游...isJoin) resultFuture.complete(null); } //解析on 条件的左右表字段名称, 这里只解析了一个关联条件 private String parseCondition...实现思路以及部分demo代码的参考,但是其远远达不到工程上的要求,在实际使用中需要要考虑更多的因素:复杂嵌套的sql、时间语义支持、自定义函数支持等。

54820

使用Calcite解析Sql做维表关联(一)

透过维表服务系列里面讲到的维表关联都是使用编码方式完成,使用Map或者AsyncIO方式完成,但是这种硬编码方式开发效率很低,特别是在实时数仓里面,我们希望能够使用跟离线一样sql方式完成维表关联操作。...在Flink1.9中提供了使用sql化方式完成维表关联,只需要实现LookupableTableSource接口即可,可以实现同步或者异步关联。...在1.9之前就需要自己实现sql语法解析,然后在转换为API方式,对上层提供sql语法。...根据sql解析顺序先 from 部分、然后where 部分、最后select,那么对于join 方式,相当于join生成了一张临时表,然后去select 这张临时表,因此可以确认 sql解析流程: 1....sql解析部分已经完成,既然使用sql化方式,因此也需要定义源表与维表,数据源一般是kafka, 定义源表需要:表名称、字段名称、字段类型、数据格式、topic;维表假设为mysql,需要定义:表名称、

79630

springBoot生成SQL文件-基于Liquibase实现

当项目中不使用Hibernate与jpa自动生成表时,完全可以用Liquibase管理SQL脚本的版本迭代,还可以对比数据库间的差异生成对应的差异log,其用来管理版本的log文件还可以与SQL脚本文件互转...目录 springBoot+jpa根据实体类注解生成SQL文件 springBoot生成SQL文件-使用Hibernate5的SchemaExport实现01 springBoot生成SQL文件-使用...'org.liquibase.gradle' 2.设置classpath 该插件在运行任务时需要能够在类路径上找到Liquibase,而Liquibase需要能够在类路径中找到数据库驱动程序,更改日志解析器等...该文件用于之后生成SQL增量脚本。 默认在${rootProject.projectDir}/db/liquibase目录下生成SQL增量脚本diffSQL-日期.sql。...4.使用方法 执行gradle diffDBSQL即可生成所需要的增量SQL脚本文件。 该脚本仅涉及表结构,执行涉及到的DROP的语句前,请确保该语句不是因重命名字段等产生的。

2.8K40

Jmeter函数分类及自定义开发

从文本文件中读取字符串,每次调用读取一行1.9__FileToString把文件读取成一个字符串,每次调用都是读取整个文件2.4__CSVRead读取参数文件的值,如读取第一的参数 ${__CSVRead...对多个整数求和,如:${__intSum(${year},-1,)}1.8.1__longSum长整型求和2.3.2__Random返回指定最大值和最小值之间的随机整数1.9__RandomDate返回给定开始日期和结束日期值之间的随机日期...} 逗号分隔符用\转义,分解完var_1表示第一个值12.0.2__changeCase转换大小写,如转为小写${__changeCase(ABC,LOWER,)}4.0__regexFunction使用正则表达式解析之前的响应结果...参数为groovy脚本表达式,如${__groovy(123*456,)}:返回56088;${__groovy(${num}%2==1)}:实现if控制;1.X__javaScript执行 js 脚本...,涉及逗号要用\转义,变量要用""包含,如:${__javaScript('${var}'.slice(2\,4))}1.9__jexl使用Jexl表达式引擎解析,包括两个版本__jexl2和__jexl3

2.2K50

JavaWeb项目快速入门07之PostgreSQL(SpringBoot+Gradle+Groovy)

一、下载安装PostgreSQL 二、配置相关插件和依赖 修改gradle 配置文件,添加groovy-sql,添加数据库驱动配置 查询插件版本:https://mvnrepository.com.../ 可以尝试更新其他插件,选择依据:域名、更新日期、下载量。...三、测试数据库连接 在test文件夹下创建GroovyPgsql.groovy,编写数据库连接代码。通过Sql.newInstance获取一个可以操作数据库的对象,自行补充数据库连接字符串。...SpringBoot内连接PgSQL (1)在入口Application中追加数据库连接: 补充学习 @Bean注解,通知Spring ,这个方法的返回对象纳入Spring的统一管理,之后在别的文件里面需要使用...Sql,可以直接访问Spring里面的。

16310

Groovy 初学者指南

Groovy可以直接调用Java类和库,这意味着可以在Groovy使用Java类,也可以在Java中使用Groovy类。这种无缝集成使得Groovy成为Java开发人员的有力补充。...GroovyClassLoader的parseClass方法来解析Groovy脚本并生成相应的类。...以下是一些常用的Groovy库和扩展: Groovy SQL: Groovy SQL是一个简化数据库访问的库,它提供了简洁的API来执行SQL查询、更新和事务操作。...JSON处理: Groovy提供了内置的JSON处理功能,使得解析和生成JSON数据变得简单。您可以使用JsonSlurper来解析JSON数据,使用JsonOutput来生成JSON数据。...Groovy GDK: Groovy GDK(Groovy Development Kit)是一组扩展类和方法,为Groovy提供了许多额外的功能和便利方法,如日期时间处理、字符串操作、集合处理等。

35830

Groovy初学者指南

Groovy可以直接调用Java类和库,这意味着可以在Groovy使用Java类,也可以在Java中使用Groovy类。这种无缝集成使得Groovy成为Java开发人员的有力补充。...GroovyClassLoader的parseClass方法来解析Groovy脚本并生成相应的类。...以下是一些常用的Groovy库和扩展:Groovy SQL: Groovy SQL是一个简化数据库访问的库,它提供了简洁的API来执行SQL查询、更新和事务操作。...JSON处理: Groovy提供了内置的JSON处理功能,使得解析和生成JSON数据变得简单。您可以使用JsonSlurper来解析JSON数据,使用JsonOutput来生成JSON数据。...Groovy GDK: Groovy GDK(Groovy Development Kit)是一组扩展类和方法,为Groovy提供了许多额外的功能和便利方法,如日期时间处理、字符串操作、集合处理等。

43130

MySQL 中的日期时间类型

年在只给了两位数的情况下,MySQL 尝试使用以下规则来补全: 给定的两位数为 70~99 时解析成 1970 ~ 1999。 给定为 00 ~ 69 时解析成 2000 ~ 2069。...所以,为了避免不可预测的结果,使用时还是指定全一些。 在需要使用数字的语境下,MySQL 会将日期时间自动转成数字。同理,在需要日期时间的相关操作语境下,会尝试将数字解析日期时间。...关于日期时间需要注意的点: 因为 MySQL 支持比较宽松的格式来设置日期时间,所以理论上你可以用你想用的值来做为数字之间的分界符,但使用时需要关注其解析的原理。...比如给一个日期格式的设置 10:11:12,虽然这个值看起来像时间类型,但还是可以正确在被解析成目标的格式,即日期。...创建表定义时,指定 DEFAULT CURRENT_TIMESTAMP 来使相应的日期时间自动初始化。

6.7K20

Spring Boot 2.X(十四):日志功能 Logback

-- 日志记录器的滚动策略,按日期,按大小记录,日志按天分类压缩保存--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy...-- <em>使用</em>mybatis的时候,<em>sql</em>语句只有在 debug 级别下才会打印 --> <logger name="cn.zwqh.springboot.dao" level=...logback.groovy 配置 使用 groovy 配置需要添加依赖 org.codehaus.groovy</groupId...标签未作解析,所以转换前把该标签去除,否则会报错) logback.xml 配置说明 configuration 配置文件的根节点,主要包含以下三个属性: scan:当此属性设置为true时,配置文件如果发生改变...使用mybatis的时候,sql语句只有在 debug 级别下才会打印 root 必选节点,用来指定最基础的日志输出级别,只有一个level属性 level:用来设置打印级别,大小写无关:TRACE,

69831
领券