【问题标题】:How to join influx db queries如何加入涌入数据库查询
【发布时间】:2021-08-11 12:17:15
【问题描述】:

我有一个 Influx db(V1.8- FLUX 被主机禁用)。我想在使用估计函数的测量中“添加”一列。

初始测量结果如下:

time                Current state_string
----                ------- ------------
1577836800000000000 0       off
1577836860000000000 0.125   off
1577836920000000000 0.25    standby
1577836980000000000 0.375   standby
1577837040000000000 0.5     standby
1577837100000000000 0.625   on
1577837160000000000 0.75    on
1577837220000000000 0.875   in use
1577837280000000000 1       in use

然后我想添加一个计算估计时间的列:

select elapsed("state", 1s) as "time_in_state" from "device_measurements" where hardware_sensor_id = '31c32c1b-119e-4167-0'

导致:

time                time_in_state
----                -------------
1577836860000000000 60
1577836920000000000 60
1577836980000000000 60
1577837040000000000 60
1577837100000000000 60
1577837160000000000 60
1577837220000000000 60
1577837280000000000 60

到目前为止一切顺利。然后我想加入这两个表并将它们存储在一个新的表中,同时保留标签。 (我的真实测量有更多的标签,为了简单起见,这里省略了)

我想出了:

select time_in_state into "device_measurements" from 
    (select elapsed("state", 1s) as "time_in_state" from "device_measurements" where hardware_sensor_id = '31c32c1b-119e-4167-0'  group by * ) 
    group by *

我已经阅读了需要按 * 分组来保留标签。但我导致了一个问题:

time                Current state_string time_in_state
----                ------- ------------ -------------
1577836800000000000 0       off          
1577836860000000000 0.125   off          60
1577836920000000000 0.25    standby      
1577836980000000000 0.375   standby      60
1577837040000000000 0.5     standby      60
1577837100000000000 0.625   on           
1577837160000000000 0.75    on           60
1577837220000000000 0.875   in use       
1577837280000000000 1       in use  

如您所见,time_in_state 列并不是针对每一行计算的。这是由group by子句引起的……

我如何对查询进行公式化,以便获得一个带有标签的表和每列的 time_in_state。我已经阅读了 join() 文档,但不知何故无法将我在那里阅读的内容翻译成代码。

【问题讨论】:

    标签: influxdb influxql


    【解决方案1】:

    假设“state_string”是您的标签键,您在每个标签键值都有不同系列的每个系列上使用“elapsed”功能:“关闭”、“待机”、“开启”、“使用中”。 .. 当您想使用来自所有这些不同系列的经过的 beetwen 值时,不可能继续按“state_string”分组。 我可以建议的是不要按“state_string”分组,而是按除此之外的所有标签键分组。 因此,例如,您可以仅按“hardware_sensor_id”进行分组:

    从中选择 time_in_state 到“device_measurements” (选择 elapsed("state", 1s) as "time_in_state" from "device_measurements" where hardware_sensor_id = '31c32c1b-119e-4167-0' group by "hardware_sensor_id",) 按*分组

    在此操作之后,您将连接表,但您将无法按“state_string”进行分组。这是因为字段“time_in_state”的值没有标签键“state_string”。 我长期以来一直在寻找类似问题的解决方案,但在 InfluxQL 中,如果不删除分隔多个系列数据的标签键,就不可能进行这样的连接。 也许使用 Flux 可以不删除“state_string”标签键,但我不知道如何准确。

    【讨论】:

    • 谢谢,可能放弃influx是另一种方式,往往influx的限制让开发变慢。
    猜你喜欢
    • 2021-07-25
    • 2018-10-16
    • 2021-08-15
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 2021-01-08
    • 2012-09-03
    • 1970-01-01
    相关资源
    最近更新 更多