直播改BUG
修复内联查询
在上期文章撰写的时候,我还认为只完成了单表查询,但经过几天的研究发现,上次那寥寥几十行代码,其实已经可以完成了表联接,过滤等功能了,只是由于当时粗心写错了一些东西,造成过滤失效了,下面我来剖析一下问题。
首先在这个文件里
只截取了部分片段, 在这里,我把列和列写颠倒了。更正过来,就可以进行正确的连接查询了。
过滤条件
在可以进行内联查询以后,我一直在对不能做过滤这点存在质疑,从关系代数的角度分析,应该是先做笛卡尔积,然后再过滤数据,那么就应该可以对数据进行过滤了,那么问题出在哪呢?
于是抱着试试看的心里,构建了一条查询,看看效果,果不其然,喜闻乐见...
看到报错一脸懵逼,这是把过滤条件当列处理了?在百思不得其解的时候,突然想起了mysql的引号问题,于是把sql修正为,于是喜闻乐见变了一下
对于开发者来说,有变化总是好事,说明可能找到问题点了,再仔细看看日志,果然,编码问题,搞起。于是在各种检索下,得到了答案
在获取连接之前,将入上述环境变量,就好了,代码片段如下:
数据类型处理
在写过滤的时候,其实就发现了,没有正确的数据类型,是走不远的,所以有必要把数据类型对应好,既然是模拟数据库,那么数据基本类型,还是使用SQL习惯的类型,而这里对java还是需要有一个映射关系。
栗子中,我使用了的结构,主要还是为了大家方便只管理解,,第一个泛型代表内部定义的数据类型字符串,第二个是SQL数据类型,第三个参数是对应的JAVA类型。由于的是模式,但实际上我们需要的是一个模式,所以在下面添加了两个辅助方法:通过拿到的数据类型的字符串,获得java的类型,这个方法则是拿到SQL的数据类型。
笔者一直对充血模型钟爱有加,所以在里为添加了两个方法
而在数据初始化的时候,我们可以使用正确的数据类型了
这样数据类型的准备工作就做好了,后面我们需要将数据类型正确的注册表里,所以在里我们原来写死的类型,需要根据实际数据进行设置了
到这里我们就搞定了数据类型。
UDF
有了基础数据类型,对于我们后面做函数处理就方便多了,现在我们以2个简单的UDF为例,让我们继续领略的魅力,
首先我们定义两个类,一个数学类,提供一个乘方的方法
另一个字符处理类,提供一个字符串连接方法,提供一个将参数转换成字符串的方法
接下来,在里,将函数注册到数据库上,
提供了一个方法,为函数名,这里提供了一个工具类,它可以通过方法,可以将你写好的函数类和其对应的方法反射出来。
接下来我们做一个测试:
结果
技术总结
这期新内容代码有点少,但是在实验成功以后,就克不住自己的兴奋了,一蹴而就写了这篇文章。
后续:
希望能对聚合函数做一些尝试。
函数的下推,这只是一个想法,目前实现的还是相当于UDF,那么实际上数据库层应该提供了很多函数的,那么在这里,是否可以透过将函数交给处理...
streaming sql
代码已更新:
文档的翻译工作感觉暂时鸽了:)
领取专属 10元无门槛券
私享最新 技术干货