为何InfluxDB查询返回Result列表?单查询如何返回多个Result?
InfluxDB v1.8.x InfluxQL单请求返回多Result的解答
多Result场景存在性说明
多Result返回场景确实存在。InfluxDB 1.x版本支持在单次查询请求中提交多条用分号分隔的InfluxQL语句,每条语句的独立执行结果就对应返回List中的一个Result实例。
触发多Result返回的InfluxQL示例
你可以直接提交多条拼接的查询语句触发该场景,示例如下:
-- 第一条查询语句:统计最近1小时CPU使用率的10分钟均值 SELECT mean("usage") FROM "cpu" WHERE time >= now() - 1h GROUP BY time(10m); -- 第二条查询语句:统计最近1小时内存使用率的10分钟均值 SELECT mean("usage") FROM "memory" WHERE time >= now() - 1h GROUP BY time(10m)
上述语句提交后,queryResult.getResults()返回的列表长度为2,分别对应两条语句的查询结果。
除此之外,如果单条语句执行过程中触发多段错误返回、或者执行包含INTO子句的写入查询,也可能会返回多个Result对象,分别对应写入状态和查询结果。
单查询场景的代码优化
如果你明确业务逻辑中每次提交的都是单条InfluxQL语句,无需遍历整个列表,直接取出列表第一个元素即可,补充简单的非空和错误校验就行,示例代码:
public Result querySingle(String aQuery){ Query queryObject = new Query(aQuery, this.dbName); QueryResult queryResult = this.influxDB.query(queryObject); List<Result> resultList = queryResult.getResults(); // 单条查询正常仅返回1个Result,直接取首个元素 if (resultList != null && !resultList.isEmpty()) { Result result = resultList.get(0); // 可自行扩展执行错误的处理逻辑 if (result.getError() == null) { return result; } } return null; }
内容的提问来源于stack exchange,提问作者Lermacto
相关产品推荐
相关产品推荐

