检索 InfluxDB 中每个标签的所有最后点/记录,不带 WHERE 子句



我有大约 1500 台设备,它们以随机频率将数据推送到我的 InfluxDB v1.8+ 实例。我正在寻找最有效的方法,至少在性能方面,收集每个device_id(标签(的最后一点。

为了简洁起见,此测量中的数据非常简单:

time, device_id (tag), usage (in bytes)
1593514228321002500, 'A12345', 32212254720

我保证每个点都填充了"用法"字段。这不是一个问题。因此,对于每个标签(device_id(,具有最新点,并带有时间戳实际上是我想要的。

我目前的解决方案远非可扩展或高效,它首先列出所有device_id:

$ show tag values on "my_database" with key = "device_id"

。然后遍历每个以获得最后一点:

$ select time, device_id, usage
from @measurement
where device_id = '@device_id'
order by time desc
limit 1

我的问题:如何在不提供device_id WHERE 子句的情况下最有效地获取所有device_ids(标签(的最后点/记录?最好在一个命令中,这样我就可以删除foreach迭代。

对于其他口味,也提出了同样的问题,例如在MySQL中。这个问题是特定于InfluxDB的。

你可以试试这个。对任何一个字段使用last()

select last(usage), * from @measurement group by device_id;

最新更新