【发布时间】:2021-05-24 14:06:41
【问题描述】:
我有一个关于 InfluxQL 请求的问题。
问题是,我有一个数据库,我想在一个小时内不发送字节时获取我的设备的 id 或值 0。
这是我的数据库结构的示例
time bytes_in id
---- -------- --
2021-01-01T05:06:18Z 37 274
2021-01-01T05:07:52Z 37 274
2021-01-01T19:55:37Z 37 274
2021-01-01T20:55:37Z 37 274
2021-01-01T21:08:25Z 37 274
2021-01-01T21:10:00Z 37 274
2021-01-01T21:55:37Z 37 274
2021-01-01T22:55:37Z 37 274
2021-01-01T23:55:37Z 37 274
2021-01-01T23:57:14Z 37 274
所以我有两个标签(时间和 ID)和一个字段(bytes_in)。当没有任何消息发送时,我尝试了不同的方法来获取我的 ID。
- 我试过这个:
SELECT id, SUM(bytes_in) as sum FROM db where sum = 0 GROUP BY id, time(1h)
但是我得到了一个错误:“不支持混合聚合和非聚合查询”。不明白为什么我在上面分组数据时不能选择id。
- 我尝试使用子查询检查我的总和何时等于 0
SELECT total FROM (SELECT SUM(bytes_in) as total FROM db WHERE ((time>= '2021-01-01') AND (time <= '2021-01-02')) GROUP BY id, time(1h)) WHERE total = 0;
但这没有任何回报。我试过没有第二个 WHERE 条件,但它是一样的,SELECT 只返回非空数据。
-
我尝试了 fill(0) 解决方案 (https://stackoverflow.com/a/52084689)。但是我的数据库很大,请求运行到内存不足的错误。
-
我尝试测试 SUM() 函数的返回值。
SELECT SUM(bytes_in) as total FROM db WHERE ((time >= '2020-01-01') AND (time <= '2021-01-02') AND (SUM(bytes_in) = 0 )) GROUP BY prod_id,time(1h)
但是随着请求返回错误:条件中的无效函数调用:sum(bytes_in)。有没有办法在 WHERE 子句中测试函数的结果?
如果你想自己尝试,这里是我关于女巫的数据库的一个微部分,你可以试试:
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'db,id=274 bytes_in=37 1609477578000000000'
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'db,id=274 bytes_in=37 1609477672000000000'
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'db,id=274 bytes_in=37 1609530937000000000'
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'db,id=274 bytes_in=37 1609534537000000000'
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'db,id=274 bytes_in=37 1609535305000000000'
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'db,id=274 bytes_in=37 1609535400000000000'
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'db,id=274 bytes_in=37 1609538137000000000'
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'db,id=274 bytes_in=37 1609541737000000000'
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'db,id=274 bytes_in=37 1609545337000000000'
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'db,id=274 bytes_in=37 1609545434000000000'
我希望我的解释足够清楚。
谢谢!
【问题讨论】:
标签: influxdb missing-data influxql