InfluxQL 到 Flux
InfluxQL to Flux
这个查询的等价物是什么
select sum("count") from "measurement_name" where time<now() and time>now()-4d group by time(100s),"source"
在 Flux 中?我试过了
from(bucket:"metrics/default_metrics")
|> range(start: -4d)
|> filter(fn: (r)=> r._measurement == "measurement_name")
|> group(columns: ["source"])
|> window(every: 100s)
|> drop(columns:["_start","_stop","_measurement","column_a","column_b"])
|> yield()
和
from(bucket:"metrics/default_metrics")
|> range(start: -4d)
|> filter(fn: (r)=> r._measurement == "measurement_name")
|> window(every: 100s)
|> group(columns: ["source"])
|> drop(columns:["_start","_stop","_measurement","column_a","column_b"])
|> yield()
但它们似乎都产生了不同的结果
这是按 time_interval = 100s
和 source
分组。据推测,按时间分组(以及隐含的总和聚合?)是使用 Flux 的 window
函数完成的,但 InfluxQL 查询(select...)的结果是:
name: measurement_name
tags: source=source_name
time sum
---- ---
1601022500000000000 39
1601022600000000000 191
1601022700000000000 232
1601022800000000000 145
1601022900000000000 207
1601023000000000000 277
1601023100000000000 160
1601023200000000000 228
1601023300000000000 253
1601023400000000000 167
而来自 Flux 查询的是
Table: keys: [source]
source:string _time:time _value:int _field:string
---------------------- ------------------------------ -------------------------- --------
source_name 2020-09-25T11:46:51.390000000Z 6 count
source_name 2020-09-25T11:46:54.124000000Z 5 count
source_name 2020-09-25T11:46:57.616000000Z 6 count
source_name 2020-09-25T11:46:57.999000000Z 9 count
source_name 2020-09-25T11:46:58.064000000Z 3 count
source_name 2020-09-25T11:46:58.307000000Z 6 count
source_name 2020-09-25T11:47:01.011000000Z 8 count
source_name 2020-09-25T11:47:03.634000000Z 6 count
source_name 2020-09-25T11:47:03.700000000Z 8 count
source_name 2020-09-25T11:47:04.144000000Z 8 count
最终目标是在 Grafana 中将其绘制出来。
是否还有一种方法可以在这两种范式之间来回转换?当然只要有可能
您需要明确包含 sum()
函数。我建议也使用 aggregateWindow()
。
from(bucket:"metrics/default_metrics")
|> range(start: -4d)
|> filter(fn: (r)=> r._measurement == "measurement_name")
|> group(columns: ["source"])
|> aggregateWindow(every: 100s, fn: sum)
|> drop(columns:["_start","_stop","_measurement","column_a","column_b"])
|> yield()
一般来说,group
不保留排序顺序,但 aggregateWindow
在开始工作之前按时间排序。这是要寻找的东西。此外,时间范围可能不会在 Flux 和 InfluxQL 查询之间完全对齐。我希望他们这样做,但请仔细检查。
这个查询的等价物是什么
select sum("count") from "measurement_name" where time<now() and time>now()-4d group by time(100s),"source"
在 Flux 中?我试过了
from(bucket:"metrics/default_metrics")
|> range(start: -4d)
|> filter(fn: (r)=> r._measurement == "measurement_name")
|> group(columns: ["source"])
|> window(every: 100s)
|> drop(columns:["_start","_stop","_measurement","column_a","column_b"])
|> yield()
和
from(bucket:"metrics/default_metrics")
|> range(start: -4d)
|> filter(fn: (r)=> r._measurement == "measurement_name")
|> window(every: 100s)
|> group(columns: ["source"])
|> drop(columns:["_start","_stop","_measurement","column_a","column_b"])
|> yield()
但它们似乎都产生了不同的结果
这是按 time_interval = 100s
和 source
分组。据推测,按时间分组(以及隐含的总和聚合?)是使用 Flux 的 window
函数完成的,但 InfluxQL 查询(select...)的结果是:
name: measurement_name
tags: source=source_name
time sum
---- ---
1601022500000000000 39
1601022600000000000 191
1601022700000000000 232
1601022800000000000 145
1601022900000000000 207
1601023000000000000 277
1601023100000000000 160
1601023200000000000 228
1601023300000000000 253
1601023400000000000 167
而来自 Flux 查询的是
Table: keys: [source]
source:string _time:time _value:int _field:string
---------------------- ------------------------------ -------------------------- --------
source_name 2020-09-25T11:46:51.390000000Z 6 count
source_name 2020-09-25T11:46:54.124000000Z 5 count
source_name 2020-09-25T11:46:57.616000000Z 6 count
source_name 2020-09-25T11:46:57.999000000Z 9 count
source_name 2020-09-25T11:46:58.064000000Z 3 count
source_name 2020-09-25T11:46:58.307000000Z 6 count
source_name 2020-09-25T11:47:01.011000000Z 8 count
source_name 2020-09-25T11:47:03.634000000Z 6 count
source_name 2020-09-25T11:47:03.700000000Z 8 count
source_name 2020-09-25T11:47:04.144000000Z 8 count
最终目标是在 Grafana 中将其绘制出来。
是否还有一种方法可以在这两种范式之间来回转换?当然只要有可能
您需要明确包含 sum()
函数。我建议也使用 aggregateWindow()
。
from(bucket:"metrics/default_metrics")
|> range(start: -4d)
|> filter(fn: (r)=> r._measurement == "measurement_name")
|> group(columns: ["source"])
|> aggregateWindow(every: 100s, fn: sum)
|> drop(columns:["_start","_stop","_measurement","column_a","column_b"])
|> yield()
一般来说,group
不保留排序顺序,但 aggregateWindow
在开始工作之前按时间排序。这是要寻找的东西。此外,时间范围可能不会在 Flux 和 InfluxQL 查询之间完全对齐。我希望他们这样做,但请仔细检查。