我试图将两个度量的聚合结果写入一个度量中。
我在文档中发现,您可以用: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度量的点,还是只考虑了最后出现的度量。
发布于 2019-01-03 03:13:31
Q:,我不确定内流是否考虑了NOAA_water_database的所有测量点,还是只考虑了最后出现的测量值。
A:我怀疑influxdb
没有从您的度量中聚合数据。
我认为它只是单独地聚合来自每个测量的数据,然后对于每个输出将其写入指定的度量,并且由于mean
操作的解析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
来测试进水数据库的行为。我还通过删除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的卡布托。这是一个伟大的工具,因为它是快速的,但它也是极其值得学习的。
或者,如果您的数据集不是很大,我怀疑它应该是好的,因为您是grouping
到15m。您可以用自己喜欢的编程语言编写一个脚本,读取数据,执行mean
,然后将数据写回influxdb
。
https://stackoverflow.com/questions/54016955
复制