文档文档

Flux 语法基础

Flux 的核心是一种专门为处理数据而设计的脚本语言。本指南将介绍 Flux 如何处理一些简单的表达式。

本页内容

管道前向运算符

管道前向运算符 (|>) 将一个函数的输出作为输入发送到下一个函数。在水处理比喻中,管道前向运算符是管道,用于将水(或数据)输送到管道中。

data
  |> someFunction()
  |> anotherFunction()

简单表达式

Flux 支持基本表达式。例如

1 + 1
// Returns 2

10 * 3
// Returns 30

(12.0 + 18.0) / (2.0 ^ 2.0) + (240.0 % 55.0)
// Returns 27.5

"John " + "Doe " + "is here!"
// Returns John Doe is here!

有关运算符优先级的更多信息,请参阅Flux 运算符 – 运算符优先级

谓词表达式

谓词表达式使用比较运算符逻辑运算符或两者来比较值,并评估为 truefalse。例如

"John" == "John"
// Returns true

41 < 30
// Returns false

"John" == "John" and 41 < 30
// Returns false

"John" == "John" or 41 < 30
// Returns true

筛选数据或在条件表达式中使用时,Flux 使用谓词表达式。

变量

使用赋值运算符 (=) 将表达式赋值给变量。使用变量的名称(标识符)返回其值

s = "foo" // string
i = 1 // integer
f = 2.0 // float (floating point number)

s // Returns foo
i // Returns 1
f // Returns 2.0

变量可以赋值给任何 Flux 数据类型

数据类型

Flux 支持多种数据类型,这些数据类型分为以下几类

基本类型

以下基本类型可以用字面量值表示

// Boolean
true

// Duration
23h4m5s

// String
"foo"

// Time
2021-01-01T00:00:00Z

// Float
1.0

// Integer
1

以下基本类型没有字面量语法,但可以通过其他方式创建

复合类型

Flux 复合类型 由 Flux 基本类型构成。所有复合类型都具有 Flux 字面量表示形式。

记录

记录是键值对的集合。每个键都是一个字符串。每个值可以是不同的数据类型。

{name:"Jim", age: 42, "favorite color": "red"}

使用点号表示法方括号表示法访问记录的属性

使用方括号表示法引用属性键中带有特殊字符或空格字符的记录属性。

o = {name:"Jim", age: 42, "favorite color": "red"}

o.name
// Returns Jim

o.age
// Returns 42

o["favorite color"]
// Returns red

有关更多信息,请参阅使用记录

数组

数组是同一类型值的集合。

n = 4
l = [1,2,3,n]

l
// Returns [1, 2, 3, 4]

使用方括号表示法访问数组中特定索引处的值

a = ["foo","bar","baz","quz"]

a[0]
// Returns foo

有关更多信息,请参阅使用数组

字典

字典是键值对的集合,其中键的类型相同,值的类型也相同。

[1: "foo", 2: "bar"]

使用 dict.get() 访问字典中的元素

import "dict"

d = [1: "foo", 2: "bar"]

dict.get(dict: d, key: "1", default: "")
// Returns foo

有关更多信息,请参阅使用字典

函数

函数是一段代码块,它使用一组参数来执行操作。函数可以是命名函数,也可以是匿名函数。在圆括号 (()) 中定义参数,并使用箭头运算符 (=>) 将参数传递到操作中。

square = (n) => n * n

square(n:3)
// Returns 9

Flux 不支持位置参数。调用函数时,参数必须始终命名。

谓词函数

谓词函数使用谓词表达式来评估输入并返回 truefalse。例如

examplePredicate = (v) => v == "foo"

examplePredicate(v: "foo")
// Returns true

examplePredicate(v: "bar")
// Returns false

有关使用函数的更多信息,请参阅

正则表达式类型

正则表达式是用于评估字符串的正则表达式模式。在谓词表达式regexp中使用正则表达式。

regex = /^foo/

"foo" =~ regex
// Returns true

"bar" =~ regex
// Returns false

查看任何 Flux 类型的字符串表示形式

使用 display() 输出任何值的 Flux 字面量表示形式作为字符串。

x = bytes(v: "foo")

display(v: x)
// Returns "0x666f6f"

Flux 标准库组织成,其中包含函数和特定于包的选项。universe 包默认加载。要加载其他包,请在 Flux 脚本的开头包含每个包的 import 语句。

import "array"
import "math"
import "influxdata/influxdb/sample"

基本语法示例

阅读完以上部分后,您可以开始在实际用例中应用这些基本原则,例如创建数据流变量、自定义函数等。

定义数据流变量

Flux 中变量赋值的常见用例是为一个或多个输入数据流创建变量。以下示例使用 sample.data() 查询示例空气传感器数据,并将不同的数据流分配给唯一的变量。

import "influxdata/influxdb/sample"

data =
    sample.data(set: "airSensor")
        |> range(start: -15m)
        |> filter(fn: (r) => r._measurement == "airSensors")

temperature =
    data
        |> filter(fn: (r) => r._field == "temperature")

humidity =
    data
        |> filter(fn: (r) => r._field == "humidity")

这些变量可以在其他函数(如 join())中使用,同时保持语法的简洁性和灵活性。

定义自定义函数

创建一个函数,该函数返回 _value 列中值最高的 N 行。将输入流 (<-) 和要返回的结果数 (n) 传递到自定义函数中。使用 sort()limit() 在数据集中查找前 n 个结果。

topN = (tables=<-, n) =>
    tables
        |> sort(desc: true)
        |> limit(n: n)

使用自定义函数 topN 和上面定义的 humidity 数据流变量,返回每个输入表中的前三个数据点。

humidity
    |> topN(n:3)

有关创建自定义函数的更多信息,请参阅定义自定义函数


此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

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

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

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

有关更多信息,请查看