文档文档

创建自定义 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"

此页面是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像现在这样使用它,而无需对您的代码进行任何更改。

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、近实时数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 构建在 Core 的基础上,增加了高可用性、读取副本、增强的安全性以及数据压缩,以实现更快的查询和优化的存储。InfluxDB 3 Enterprise 的免费层级可供非商业家庭或业余爱好者使用。

有关更多信息,请查看