现象:
某报表查询SQL报错,大意是max_query_size超过最大限制
出现原因:
查询条件有个shop_id 字段,in了一大串,大概是八百多个16位的字符串,导致SQL过长超过限制
解决方案:
先到clickhouse的Git issue上找了一波解决方案:
issue
另外到clickhouse官网翻阅了max_query_size参数的含义和默认值:
添加链接描述
256KiB 没算错的话就是256个千字节,也就是256*1024 byte,
想着改参数放大一倍处理(524288 byte)。
注意,max_query_size参数的单位是字节(Git issue答主说的,没验证过对不对)
修改方式:
1.通过改驱动参数URL,写成路径参数的形式,类似于:
http://localhost:8123/?max_query_size=100000000
(改了这个应该要重启服务,一般这些参数在配置中心的图形化页面上操作就行)
2.改配置文件(看官网吧)
<max_query_size>1000000</max_query_size>
还没验证两种方案是否OK,未完待续
不用改配置的解决方案
in里面的内容太长导致SQL执行报错的解决方案:
如果传入的参数是个List:
1.拆成多个List,执行多次SQL,最后在业务代码中组装结果
2.拆分一下List,SQL改下、使用union all 拼接结果
3.如果这个list本身也是某个SQL查询得到的结果,就联表join
如果这个操作不用写在业务代码里面,只是临时在Navicat里开个会话写的SQL:
那就把List装入临时表,再join进行查询
果然还是要迂回地解决问题