创建自定义 Flux 函数
Flux 的函数式语法允许您创建自定义函数。本指南将介绍创建您自己的函数的基础知识。
函数定义语法
在 Flux 中定义函数的基本语法如下
// Basic function definition syntax
functionName = (functionParameters) => functionOperations
functionName
在您的 Flux 脚本中用于调用函数的名称。
functionParameters
传递到函数中并在其操作中使用的逗号分隔的参数列表。 可以为每个参数定义参数默认值。
functionOperations
操作和函数,用于将输入操作为所需的输出。
基本函数示例
平方函数示例
// Function definition
square = (n) => n * n
// Function usage
> square(n:3)
9
乘法函数示例
// Function definition
multiply = (x, y) => x * y
// Function usage
> multiply(x: 2, y: 15)
30
在自定义函数中使用管道转发数据
大多数 Flux 函数处理管道转发的数据。要处理管道转发的数据,函数参数之一必须使用 <-
管道接收表达式捕获输入表。
在下面的示例中,tables
参数被分配给 <-
表达式,该表达式表示管道转发到函数中的所有数据。 然后将 tables
管道转发到函数定义中的其他操作中。
functionName = (tables=<-) => tables |> functionOperations
可管道转发的函数示例
将行值乘以 x
下面的示例定义了一个 multByX
函数,该函数将输入表中每行的 _value
列乘以 x
参数。 它使用 map()
函数来修改每个 _value
。
// Function definition
multByX = (tables=<-, x) => tables
|> map(fn: (r) => ({r with _value: r._value * x}))
// Function usage
from(bucket: "example-bucket")
|> range(start: -1m)
|> filter(fn: (r) => r._measurement == "mem" and r._field == "used_percent")
|> multByX(x: 2.0)
定义参数默认值
使用 =
赋值运算符在函数定义中为函数参数分配默认值
functionName = (param1=defaultValue1, param2=defaultValue2) => functionOperation
默认值会被函数调用中显式定义的参数覆盖。
具有默认值的函数示例
获取领导者列表
下面的示例定义了一个 leaderBoard
函数,该函数返回按指定列中的值排序的有限数量的记录。 它使用 sort()
函数按降序或升序对记录进行排序。 然后,它使用 limit()
函数从排序后的表中返回指定数量的记录。
// Function definition
leaderBoard = (tables=<-, limit=4, columns=["_value"], desc=true) => tables
|> sort(columns: columns, desc: desc)
|> limit(n: limit)
// Function usage
// Get the 4 highest scoring players
from(bucket: "example-bucket")
|> range(start: -1m)
|> filter(fn: (r) => r._measurement == "player-stats" and r._field == "total-points")
|> leaderBoard()
// Get the 10 shortest race times
from(bucket: "example-bucket")
|> range(start: -1m)
|> filter(fn: (r) => r._measurement == "race-times" and r._field == "elapsed-time")
|> leaderBoard(limit: 10, desc: false)
定义具有作用域变量的函数
要创建具有作用域限定为函数的变量的自定义函数,请将函数操作和变量放在 块 ({}
) 内,并使用 return
语句返回特定变量。
functionName = (functionParameters) => {
exampleVar = "foo"
return exampleVar
}
具有作用域变量的函数示例
根据值返回警报级别
以下函数使用条件逻辑根据数字输入值返回警报级别
alertLevel = (v) => {
level = if float(v: v) >= 90.0 then
"crit"
else if float(v: v) >= 80.0 then
"warn"
else if float(v: v) >= 65.0 then
"info"
else
"ok"
return level
}
alertLevel(v: 87.3)
// Returns "warn"
将 HEX 颜色代码转换为名称
以下函数将十六进制 (HEX) 颜色代码转换为等效的 HTML 颜色名称。 该函数使用 Flux 字典包来创建 HEX 代码及其对应名称的字典。
import "dict"
hexName = (hex) => {
hexNames = dict.fromList(
pairs: [
{key: "#00ffff", value: "Aqua"},
{key: "#000000", value: "Black"},
{key: "#0000ff", value: "Blue"},
{key: "#ff00ff", value: "Fuchsia"},
{key: "#808080", value: "Gray"},
{key: "#008000", value: "Green"},
{key: "#00ff00", value: "Lime"},
{key: "#800000", value: "Maroon"},
{key: "#000080", value: "Navy"},
{key: "#808000", value: "Olive"},
{key: "#800080", value: "Purple"},
{key: "#ff0000", value: "Red"},
{key: "#c0c0c0", value: "Silver"},
{key: "#008080", value: "Teal"},
{key: "#ffffff", value: "White"},
{key: "#ffff00", value: "Yellow"},
],
)
name = dict.get(dict: hexNames, key: hex, default: "No known name")
return name
}
hexName(hex: "#000000")
// Returns "Black"
hexName(hex: "#8b8b8b")
// Returns "No known name"
此页面是否对您有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一份子! 我们欢迎并鼓励您提供关于 InfluxDB 和本文档的反馈和错误报告。 要寻求支持,请使用以下资源
拥有年度合同或支持合同的客户可以联系 InfluxData 支持。