背景
线上环境请求clickhouse 400 bad request
问题排查
线上clickhouse导出的是http端口
线上java client抛出400
异常:
ru.yandex.clickhouse.except.ClickHouseException: ClickHouse exception, code: 400, host: internal-LB-clickhouse-write-intranet-429192233.us-west-2.elb.amazonaws.com, port: 8123; HTTP/1.1 400 Bad Request
at ru.yandex.clickhouse.except.ClickHouseExceptionSpecifier.specify(ClickHouseExceptionSpecifier.java:60)
at ru.yandex.clickhouse.except.ClickHouseExceptionSpecifier.specify(ClickHouseExceptionSpecifier.java:26)
at ru.yandex.clickhouse.ClickHouseStatementImpl.checkForErrorAndThrow(ClickHouseStatementImpl.java:1080)
at ru.yandex.clickhouse.ClickHouseStatementImpl.getInputStream(ClickHouseStatementImpl.java:770)
at ru.yandex.clickhouse.ClickHouseStatementImpl.getLastInputStream(ClickHouseStatementImpl.java:693)
Caused by: java.lang.IllegalStateException: HTTP/1.1 400 Bad Request
at ru.yandex.clickhouse.ClickHouseStatementImpl.checkForErrorAndThrow(ClickHouseStatementImpl.java:1080)
at ru.yandex.clickhouse.ClickHouseStatementImpl.getInputStream(ClickHouseStatementImpl.java:770)
at ru.yandex.clickhouse.ClickHouseStatementImpl.getLastInputStream(ClickHouseStatementImpl.java:693)
at ru.yandex.clickhouse.ClickHouseStatementImpl.executeQuery(ClickHouseStatementImpl.java:341)
at ru.yandex.clickhouse.ClickHouseStatementImpl.executeQuery(ClickHouseStatementImpl.java:326)
打开clickhouse日志,发现有以下报错:
2023.01.12 09:24:26.187479 [ 205027 ] {65179d49-ea6e-4a15-b13b-16d8378cfe29} <Error> executeQuery: Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 72 ('Client'): Client as DEFAULT_VALUE, Application name as DESCRIPTION union all select CustomHttpHeaders as NAME, toInt32(0) as MAX_LEN, as DEFAULT_VALUE, Custom HTTP heade. Expected one of: UNION, LIMIT, WHERE, WINDOW, end of query, HAVING, GROUP BY, INTO OUTFILE, OFFSET, PREWHERE, Comma, ORDER BY, SETTINGS, FROM, FORMAT, WITH, token (version 21.3.3.14 (official build)) (from 172.31.42.57:23878) (in query: select ApplicationName as NAME, toInt32(0) as MAX_LEN, ClickHouse Java Client as DEFAULT_VALUE, Application name as DESCRIPTION union all select CustomHttpHeaders as NAME, toInt32(0) as MAX_LEN, as DEFAULT_VALUE, Custom HTTP headers as DESCRIPTION union all select CustomHttpParameters as NAME, toInt32(0) as MAX_LEN, as DEFAULT_VALUE, Customer HTTP query parameters as DESCRIPTION), Stack trace (when copying this message, always include the lines below):
最后在github上找到相关issue: https://github.com/dbeaver/dbeaver/issues/16885 https://github.com/ClickHouse/clickhouse-jdbc/pull/930
发现是clickhouse的jdbc 包的sql错了
ClickHouse Java Client as DEFAULT_VALUE
应该改为 'ClickHouse Java Client' as DEFAULT_VALUE
我们用的jdbc包是0.3.2
<dependency>
<groupId>ru.yandex.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>0.3.2</version>
</dependency>
将clickhouse jdbc 包改成0.3.2-patch-1
即可.
其实可以用更加新的包,自己选择吧.