我有一个由
组成的流入数据库表> SELECT * FROM results
name: results
time artnum duration
---- ------ --------
1539084104865933709 1234 34
1539084151822395648 1234 81
1539084449707598963 2345 56
1539084449707598123 2345 52
和其他标签。 artnum
和duration
都是字段(尽管可以更改)。我现在正在尝试创建一个查询(用于grafana中),该查询将为我提供以下结果以及计算出的mean()
和该artnum
的测量次数:
artnum mean_duration no. measurements
------ -------- -----
1234 58 2
2345 54 2
首先:是否可以排除time
列?其次,influx db创建这种表的方式是什么?我从
SELECT mean("duration"), "artnum" FROM "results"
产生ERR: mixing aggregate and non-aggregate queries is not supported
。然后我发现https://docs.influxdata.com/influxdb/v1.6/guides/downsampling_and_retention/,看起来像我想要做的。然后,我创建了一个无限保留策略(持续时间为0s)和一个连续查询
> CREATE CONTINUOUS QUERY "cq" ON "test" BEGIN
SELECT mean("duration"),"artnum"
INTO infinite.mean_duration
FROM infinite.test
GROUP BY time(1m)
END
我按照说明进行操作,但是在将一些数据馈送到数据库并等待1m之后,`SELECT * FROM“ infinite”。“ mean_duration”没有返回任何内容。
是正确的选择还是我应该继续其他选择?真正的目标是查看grafana中更新后的表格,每分钟刷新一次。
答案 0 :(得分:1)
InfluxDB是一个时间系列数据库,因此您确实需要时间维度-响应中也是如此。如果您的查询返回非时间序列数据,您将很难使用Grafana。因此,请勿尝试从查询中删除time
。更好的选择是在Grafana表格面板中隐藏时间-使用column styles并设置Type: Hidden
。
InfluxDB没有表,但是有测量值。我猜您只需要使用正确的grouping进行查询,而无需提前进行连续查询等。请尝试改进此查询*:
SELECT
MEAN("duration"),
COUNT("duration")
FROM results
GROUP BY "artnum" fill(null)
*您可能遇到分组问题,因为artnum
是InfluxDB field
-更好的选择是将artnum
另存为InfluxDB tag
。