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 = 100ssource 分组。据推测,按时间分组(以及隐含的总和聚合?)是使用 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 查询之间完全对齐。我希望他们这样做,但请仔细检查。