Flux查询语言中的SELECT firstcolumn,lastcolumn等效于什么?

问题描述

什么是等效通量查询

SELECT first(column) as first,last(column) as last FROM measurement ?

SELECT last(column) - first(column) as column FROM measurement ?

(我指的是InfluxData开发的新查询语言FluxQL)

有first()和last()函数,但是我找不到在同一查询中同时使用这两个示例。

这些是FluxQL的文档,可供您更好地参考:

https://docs.influxdata.com/flux/v0.50/introduction/getting-started

https://v2.docs.influxdata.com/v2.0/query-data/get-started/

解决方法

如果您(或其他居住在这里的人)只是想要最小值和最大值之间的差异,则需要内置spread function

spread()函数输出指定列中的最小值和最大值之差。

但是,您要查询流中的第一个值和最后一个值之间的差异,并且似乎没有内置函数(可能是因为预期大多数流的范围是动态的)。为此,您可以编写a similar answer中的自定义聚合函数。或者,您可以将两个查询合并在一起,然后进行区别:

data = from(bucket: "example-bucket") |> range(start: -1d) |> filter(fn: (r) => r._field == "field-you-need")

temp_earlier_number = data |> first() |> set(key: "_field",value: "delta")
temp_later_number = data |> last() |> set(key: "_field",value: "delta")

union(tables: [temp_later_number,temp_earlier_number])
  |> difference()

此操作是用名为delta的字段创建两个表,然后将它们联接在一起,从而形成一个具有两行的表-一个代表第一个值,另一个代表最后一个值。然后,我们计算这两行之间的差。如果您不想要负数,只需确保以正确的顺序减去数据即可(或使用math.abs)。