Flux脚本语言基础使用-函数定义(InFluxDB 查询语言)

本文介绍了InfluxQL中的函数语法,包括自定义函数的创建,如一元、二元及带默认参数的函数。转换函数利用管道操作符处理数据流,例如`myFn`函数用于将数据乘以指定倍数。同时,文章还展示了如何定义具有作用域的函数,如`alertLevel`和`hexName`,它们根据条件返回不同的值。这些函数在处理时间和序列数据时非常有用。
摘要由CSDN通过智能技术生成

函数语法

语法:
函数名 = (参数) => 函数体

自定义函数:

一个参数的函数

square = (n) => n * n

square(n:3)
// Returns 9

两个参数的函数

multiply = (x, y) => x * y

multiply(x: 2, y: 15)
// Returns 30

带默认参数的函数:

pow = (n, p=10) => n ^ p

pow(n: 2)
// Returns 1024

转换函数 (<-)

转换是一个函数,它将流作为输入,对输入进行操作,然后输出新的流。
管道转发运算符 |> 将数据从先前的标识符或函数转发到转换函数中。

语法:
函数 x() 接收管道转发的数据并将其分配给 t 参数。
x = (t=<-) => t |> //...

列子:带有一个参数的转换函数

以下示例定义了一个 myFn 函数,该函数将每个输入行的 _value 列乘以 x 参数。 该示例使用 map() 函数遍历每一行,修改 _value,然后返回更新后的行。

import "influxdata/influxdb/sample"

myFn = (tables=<-, x) =>
  tables
    |> map(fn: (r) => ({r with  _value: r._value * x}))
    

// 空气传感器样本数据
a = sample.data(set: "airSensor")
  |> range(start: -1h)
  |> filter(fn: (r) => r["_measurement"] == "airSensors")
  |> keep(columns: ["_value", "sensor_id"])
  
a
  |> myFn(x: 10.0)

定义具有作用域的函数

语法:
函数体包含在一个块 ({}) 中。
使用 return 语句返回特定变量。

functionName = (param) => {
    exampleVar = "foo"

    return exampleVar
}

例子1

import array

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
}

array.from(rows: [{level: alertLevel(v: 87.3)}])

例子2:

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"

array.from(rows: [{ color : "#000000"}, {color : "#8b8b8b"}])
  |> map(fn: (r)=> ({r with name: hexName(hex: r.color)}))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值