如何加入涌入数据库查询
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”标签键,但我不知道有多准确。
我有一个 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”标签键,但我不知道有多准确。