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
.
我正在尝试将两次测量的汇总结果写入一次测量。
我在文档中发现您可以在 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
.