数据链接池Druid和Clickhouse:expect ANY, actual ANY pos 2
2021/5/19 10:35:05
本文主要是介绍数据链接池Druid和Clickhouse:expect ANY, actual ANY pos 2,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
背景:
项目中需要使用A表left join B表,并且B表中有重复的key时只显示一条。在MySql中可以这样实现:
select * from a t1 left join b t2 on t1.key= t2.key and t2.id =(select min(id) from b where key =t2.key)
也就是在join操作后还需要使用一个子查询限制B表相同key的数据只使用一条。在Clickhouse中可以使用any left join实现相同的功能:
select * from a t1 any left b t2 on t1.key = t2.key
在项目中使用any left join却报了错:
syntax error: syntax error, error in :' )a2 ANY LEFT JOIN t_test test o', expect ANY, actual ANY pos 2978, line 88, column 8, token ANY
环境:
JDK1.8
<druid.version>1.1.10</druid.version>
解决方法:
升级druid到<druid.version>1.2.6</druid.version> 并取消使用druid filter 准确来说是:wall
解决过程:
看到错误信息是: expect ANY, actual ANY 也就是期望是ANY,而得到的也是ANY。这不就是想啥来啥多少人梦寐以求的心想事成吗?怎么还报错了呢。是不是MyBatis XML中配置Sql时有特殊字符?删了重新编写依然报错依旧。仔细看错误信息发现:
ALL LEFT JOIN t_test a o, pos 2985, line 90, column 5, token ALL
at com.alibaba.druid.sql.parser.SQLParser.printError(SQLParser.java:576)
at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:602)
at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:124)
at com.alibaba.druid.wall.WallProvider.checkInternal(WallProvider.java:630)
从错误信息看出原来是druid报的错误,检查druid版本,发现使用的版本较低就升级到了最新的版本。但问题依旧。项目暂时用不到druid wall过滤器,索性就取消了过滤器。取消后可以正常执行any left join语句.
那么问题来了:
如果还想同时使用druid的过滤器咋办?
当然可以修改wall filter源码以支持clickhouse sql.
如果不想改代码还可以?
提示 clickhouse
这篇关于数据链接池Druid和Clickhouse:expect ANY, actual ANY pos 2的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-29易优CMS安装常见问题汇总-icode9专业技术文章分享
- 2024-06-28易优新手必读安装教程-icode9专业技术文章分享
- 2024-06-28忘记eyoucms后台密码怎么办?-icode9专业技术文章分享
- 2024-06-26终极指南:Scrum中如何设置需求优先级
- 2024-06-26AI大模型企业应用实战(25)-为Langchain Agent添加记忆功能
- 2024-06-26小白家庭 nas 搭建方案-icode9专业技术文章分享
- 2024-06-23AI大模型企业应用实战(14)-langchain的Embedding
- 2024-06-23AI大模型企业应用实战(15)-langchain核心组件
- 2024-06-23AI大模型企业应用实战(16)-langchain核心组件
- 2024-06-23AI 大模型企业应用实战(06)-初识LangChain