InfluxDB:具有多重测量的 INTO

InfluxDB: INTO with multiple measurement

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

我在文档中发现您可以在 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), *

上面的查询运行成功,但我不确定 influx 是否考虑了 NOAA_water_database 的所有测量值或仅考虑了最后出现的测量值。

问: 我不确定 influx 是否考虑了 NOAA_water_database 的所有测量值或仅考虑了最后出现的测量值。

A: 我怀疑 influxdb 没有汇总您的测量数据。

我认为它只是单独聚合每个测量的数据,然后将每个输出写入您指定的测量,因为 mean 操作的解析 time 可能是相同的, 测量 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 语句 returns;

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 高 15 米。你可以用你最喜欢的编程语言写一个脚本来读出数据,做mean然后把数据写回influxdb.