临时表的生命周期 mybatis对于临时表的创建
最近一直在搞clickhouse的查询业务,积累了些经验,这篇文章主要是分享一下关于临时表的创建查询相关的问题。
现在mybatis已经支持clickhouse普通的CRUD,但是对于临时表的创建查询还是有问题,下面让我们来探索一下。
1. clickhouse官方对临时表生命周期的描述
ClickHouse支持临时表,其具有以下特征:
- 当会话结束时,临时表将随会话一起消失,这包含链接中断。
- 临时表仅能够使用Memory表引擎。
- 无法为临时表指定数据库。它是在数据库之外创建的。
- 如果临时表与另一个表名称相同,那么当在查询时没有显示的指定db的情况下,将优先使用临时表。
- 对于分布式处理,查询中使用的临时表将被传递到远程服务器。
可以使用下面的语法创建一个临时表:
CREATE TEMPORARY TABLE [IF NOT EXISTS] table_name [ON CLUSTER cluster]
(name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],...
)
tips:保证不是在同一个会话的情况下,临时表可以重名
2. mybatis对临时表不支持的原因
因为mybatis的每一次请求都是一个新会话,所以当你用mybatis创建一个临时表,然后再去查询这个临时表,就会报没有这个临时表存在的错误;因为创建临时表操作和查询操作是两个请求,也就是两个会话,根据ck官方的解释,会话结束临时表生命截止,所以查询不到该临时表。
3. 根据上述出现问题的原因,来自己开发一个连接ck并进行查询的工具包,亲测可用
需要的话请评论区留言获得(新人博主,迄今为止就收到过一个赞,所以想让大家评论一下,攒攒人气?)