如何加入涌入数据库查询

How to join influx db queries

我有一个 Influx 数据库(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

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

我想出了:

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子句造成的...

我怎样才能从查询中提取出一个 table 标签和 time_in_state 用于每一列。我已经阅读了 join() 文档,但不知何故无法将我在那里阅读的内容翻译成代码。

假设“state_string”是您的标签键,您在每个系列上使用“elapsed”函数,其中每个标签键值有不同的系列:“off”、“standby”、“on” , “正在使用”... 当您想使用所有这些不同系列中经过的 beetwen 值时,不可能继续按“state_string”分组。 我可以建议的是不要按“state_string”分组,而是按除此之外的所有标签键分组。 因此,例如,您可以仅按“hardware_sensor_id”:

使用分组

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 "hardware_sensor_id",<put_other_tag_keysIfNeeded> ) group by *

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