如何为npm clickhouse包的查询设置超时时间?
如何为npm clickhouse包的查询设置超时时间?
我太懂你这种试了好几种超时配置都没生效的挫败感了!咱们来拆解一下问题,给你两种靠谱的解决方案,分全局配置和单查询配置两种场景:
1. 全局请求超时(客户端层面)
如果你想给所有查询统一设置超时,可以在创建ClickHouse客户端实例的时候,通过requestOptions配置底层HTTP请求的超时时间,单位是毫秒:
const { ClickHouse } = require('clickhouse'); // 创建客户端时配置全局超时 const clickhouse = new ClickHouse({ url: '你的ClickHouse服务地址', port: 8123, // 这里设置全局的请求超时,比如50秒(50000毫秒) requestOptions: { timeout: 50000 } });
这个配置是控制客户端等待服务器响应的最长时间,不管查询在服务器上跑多久,只要客户端超过这个时间没拿到响应,就会触发超时。
2. 单查询超时(服务器层面)
如果只想给某一个特定查询设置超时,那可以在调用query方法时,通过reqParams传递ClickHouse原生的query_timeout参数,单位是秒——这个是让服务器主动终止超过时长的查询:
// 给单个查询设置50秒的服务器端超时 const results = await clickhouse.query(query, { reqParams: { query_timeout: 50 } }).toPromise();
这种方式更直接针对查询执行时长,就算客户端没超时,服务器也会掐掉跑太久的查询。
为啥你之前的配置没生效?
- 你在
query方法里直接传的timeout参数,这个包其实不支持,所以没用; session_timeout是控制会话的空闲超时,不是查询执行的超时,自然也达不到你要的效果;- 之前的
reqParams里的timeout也不对,得用ClickHouse官方的query_timeout参数才行。
建议你把客户端超时和服务器端超时结合起来用,双重保障,避免查询无限期运行。
备注:内容来源于stack exchange,提问作者Lucas Fernando
相关产品推荐
相关产品推荐

