Flux 中单列的多项操作
Multiple operation on single column in Flux
目前,与 InfluxQL 相比,尝试在 Flux 中重新创建一些基础知识是一项艰巨的任务。
我不知道如何要求多个投影。
select max(temp) - min(temp) from my_measurement
我不确定如何在 Flux 中解决这个问题。
谢谢
选项 1 - 内置函数
最简单的方法可能是使用内置的 spread 函数:
The spread() function outputs the difference between the minimum and maximum values in a specified column.
from(bucket: "example-bucket")
|> range(start: -5m)
|> filter(fn: (r) =>
r._measurement == "cpu" and
r._field == "usage_system"
)
|> spread()
选项 2 - 自定义函数
如果您想完全控制逻辑,为此创建一个 custom aggregate function 就可以了。类似于此(假设您的数据至少有一个正值):
delta = (tables=<-, outputField="delta") =>
tables
|> reduce(
// Define the initial accumulator record
identity: {
maximum: 0.0,
minimum: math.maxfloat,
delta: 0.0
},
fn: (r, accumulator) => ({
// update max and min on each reduce loop
maximum: if r._value > accumulator.maximum then r._value else accumulator.maximum,
minimum: if r._value < accumulator.minimum then r._value else accumulator.minimum,
// take the delta
delta: accumulator.maximum - accumulator.minimum
})
)
// Set the _field label of the output table to to the value
// provided in the outputField parameter
|> set(key: "_field", value: outputField)
// Rename delta column to _value
|> rename(columns: {delta: "_value"})
// Optionally, Drop the max and min columns since they are no longer needed
// |> drop(columns: ["maximum", "minimum"])
// apply your custom function wherever you want to calculate a delta
from(bucket: "my-bucket")
|> range(start: -1h)
// optionally filter here to isolate the field that you want
// |> filter(fn: (r) => <predicate>)
|> delta()
这将产生最后一个 range
数据的最大值和最小值之间的增量(本例中为 -1h)。创建自定义函数后,您可以在任何流中使用它。
目前,与 InfluxQL 相比,尝试在 Flux 中重新创建一些基础知识是一项艰巨的任务。
我不知道如何要求多个投影。
select max(temp) - min(temp) from my_measurement
我不确定如何在 Flux 中解决这个问题。
谢谢
选项 1 - 内置函数
最简单的方法可能是使用内置的 spread 函数:
The spread() function outputs the difference between the minimum and maximum values in a specified column.
from(bucket: "example-bucket")
|> range(start: -5m)
|> filter(fn: (r) =>
r._measurement == "cpu" and
r._field == "usage_system"
)
|> spread()
选项 2 - 自定义函数
如果您想完全控制逻辑,为此创建一个 custom aggregate function 就可以了。类似于此(假设您的数据至少有一个正值):
delta = (tables=<-, outputField="delta") =>
tables
|> reduce(
// Define the initial accumulator record
identity: {
maximum: 0.0,
minimum: math.maxfloat,
delta: 0.0
},
fn: (r, accumulator) => ({
// update max and min on each reduce loop
maximum: if r._value > accumulator.maximum then r._value else accumulator.maximum,
minimum: if r._value < accumulator.minimum then r._value else accumulator.minimum,
// take the delta
delta: accumulator.maximum - accumulator.minimum
})
)
// Set the _field label of the output table to to the value
// provided in the outputField parameter
|> set(key: "_field", value: outputField)
// Rename delta column to _value
|> rename(columns: {delta: "_value"})
// Optionally, Drop the max and min columns since they are no longer needed
// |> drop(columns: ["maximum", "minimum"])
// apply your custom function wherever you want to calculate a delta
from(bucket: "my-bucket")
|> range(start: -1h)
// optionally filter here to isolate the field that you want
// |> filter(fn: (r) => <predicate>)
|> delta()
这将产生最后一个 range
数据的最大值和最小值之间的增量(本例中为 -1h)。创建自定义函数后,您可以在任何流中使用它。