InfluxDB:具有多种测量功能的INTO

时间:2019-01-03 05:48:02

标签: influxdb

我正在尝试将两个测量的汇总结果写入单个测量。

我在文档中发现,您可以使用INTO query中的:MEASUREMENT关键字编写多个匹配的度量。喜欢

SELECT * INTO "copy_NOAA_water_database"."autogen".:MEASUREMENT FROM 
"NOAA_water_database"."autogen"./.*/

我想做的是汇总多个测量结果并将结果写入单个测量结果。

SELECT mean("water_level") INTO 
"copy_NOAA_water_database"."autogen"."water_agg" FROM 
"NOAA_water_database"."autogen"./.*/ GROUP BY time(15m), *

上面的查询运行成功,但是我不确定流入是否考虑了 NOAA_water_database 的所有测量中的点,还是仅考虑了最近出现的测量。

1 个答案:

答案 0 :(得分:1)

问::我不确定流入量是否考虑了所有NOAA_water_database测量的点,还是仅考虑了最近出现的测量。

A:我怀疑influxdb并未汇总您的测量数据。

我认为这只是对每个度量的数据进行汇总,然后将每个输出的数据写入您指定的度量,并且由于time操作的解析的mean可能是相同的,因此度量B的结果可以覆盖测量A的结果。

我通过使用以下数据集进行实验得出了这一理论;

INSERT cpu,host=serverA value=10
INSERT cpu,host=serverA value=20

INSERT cpu2,host=serverA value=5
INSERT cpu2,host=serverA value=15

执行与上述查询类似的SELECT语句会返回;

select * FROM "historian"."autogen"./cpu.*/
name: cpu
time                host    value
----                ----    -----
1546511130857357196 serverA 10
1546511132744883738 serverA 20

name: cpu2
time                host    value
----                ----    -----
1546511156629403118 serverA 5
1546511157888695746 serverA 15

然后我不使用mean来进行测试sum来查找influxdb的行为。 我还通过删除groupBy操作来简化查询。

sum给我;

SELECT sum("value") INTO test_sum FROM "historian"."autogen"./.*/ 
name: result
time written
---- -------
0    2
> select * from test_sum;
name: test_sum
time sum
---- ---
0    20

理论:如果influx正在汇总所有测量的数据,则总和将不会是20。它应该是50。可以得出20的唯一方法是通过对5 + 15进行累加,得出最后一次测量的数据。

但是当我们执行sum操作时,influx确实告诉我们写入了2行。我的理论是,涌入量确实计算了第一个测量值的总和,但是由于第一和第二个求和的结果时间均为0,因此第二个测量值的结果将覆盖第一个结果的值。

推荐的解决方案: 最好的工具实际上是influxdb的kapacitor。这是一个很好的工具,因为它速度很快,但是学习起来也非常困难。

或者,如果您的数据集不大,我怀疑这应该没问题,因为您grouping距15m。您可以使用自己喜欢的编程语言编写脚本以读取数据,执行mean,然后将数据写回到influxdb