# 前言
由于数据迁移、服务迁移等任务,CK的版本升级到高版本,以前的一些低版本的情况可能会出现各种各样的bug。以前在本地的测试是可以正常使用的,但是高版本之后就不一定了。本次正好遇上一个开发需求,顺带修复此bug。
# 问题发现:
在执行一个简单的SQL时,本地的控制台一直提醒报错,这里不免发问:究竟是我的SQL错了吗?SQL明明在编译器和DMS上可以执行,SQL如下:
// 原始的SQL
select
count(0)
FROM
(
select
*
from
raytheon_clickhouse.app_financial_all_order_d_a_distributed
where
1 = 1
and (loan_date between ? and ? )
and loan_period = ?
and platform = ? ) t;
// 填充对应参数后的SQL
select
count(0)
from
(
select
*
from
raytheon_clickhouse.app_financial_all_order_d_a_distributed
where
1 = 1
and (loan_date between '2023-02-22' and '2024-02-22' )
and loan_period = 3
and platform = 'FTD') t;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 问题定位
经过多次DEBUG处理,找到了执行前的包装SQL,代码中是这样的:
随后就会报错:
粘贴出来的报错信息:(大体上写的是一次查询只能运行一个SQL)
# 问题解决
本地SQL运行都正常,但是控制台打印错误信息,观察到了SQL中末尾的 ' ; ' 号。于是尝试移除原有在工具中封装的该符号,重新进行二次调用。
接口可以正常返回了:
# 问题总结
可能由于CK版本的升级导致SQL校验过于敏感,尝试对于SQL进行微调来排查执行结果,仍需耐心仔细。