我正在尝试将两个测量的汇总结果写入单个测量。
我在文档中发现,您可以使用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 的所有测量中的点,还是仅考虑了最近出现的测量。
答案 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
。