Documentation

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

有关更多信息,请参见 Work with records.

数组

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

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

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

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

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

a[0]
// Returns foo

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

字典

A 字典 是一组具有相同类型的键-值对的集合。

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

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

import "dict"

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

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

欲了解更多信息,请参见 使用字典

函数

A function 是一段代码,使用一组参数来执行一个操作。函数可以是命名的或匿名的。 在括号中定义参数 (()) 并通过 箭头操作符 (=>) 将参数传递给一个操作。

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

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

正则表达式类型

A 正则表达式 是一种用于评估字符串的正则表达式模式。 在 谓词表达式 中或与 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 package 默认加载。要加载其他包,请在您的 Flux 脚本开头为每个包包含一个导入语句。

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 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

InfluxDB 3 核心,是我们新的开源产品。 它是一个用于时间序列和事件数据的实时数据引擎。 InfluxDB 3 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始的更多信息,请查看: