Documentation

Flux 语法基础

Flux 在其核心是一个专为处理数据而设计的脚本语言。 本指南介绍了一些简单的表达式及其在 Flux 中的处理方式。

简单表达式

Flux是一种支持基本表达式的脚本语言。 例如,简单的加法:

> 1 + 1
2

变量

使用赋值运算符将表达式分配给变量,=

> s = "this is a string"
> i = 1 // an integer
> f = 2.0 // a floating point number

输入一个变量的名称以打印其值:

> s
this is a string
> i
1
> f
2

记录

Flux 还支持记录。记录中的每个值可以是不同的数据类型。

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

使用 点表示法 来访问记录的属性:

> o.name
Jim
> o.age
42

或者 括号表示法:

> o["name"]
Jim
> o["age"]
42
> o["favorite color"]
red

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

列表

Flux 支持列表。列表值必须是相同类型。

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

函数

Flux 使用函数进行大部分的重负荷计算。
下面是一个简单的函数,它对一个数字进行平方, n

> square = (n) => n * n
> square(n:3)
9

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

管道转发运算符

Flux广泛使用向前管道操作符(|>)来链接操作。 在每个函数或操作之后,Flux返回一个表或包含数据的表集合。 向前管道操作符将这些表输送到下一个函数,在那里它们被进一步处理或操作。

data |> someFunction() |> anotherFunction()

基本语法的现实世界应用

如果您已经阅读过其他 入门指南,这可能听起来很熟悉。Flux 的语法受到 JavaScript 和其他函数式脚本语言的启发。当您开始在实际应用案例中应用这些基本原则,例如创建数据流变量、自定义函数等时,Flux 的强大以及其查询和处理数据的能力将变得显而易见。

下面的示例提供了每个输入命令的多行和单行版本。
在Flux中不需要换行符,但有助于提高可读性。
单行和多行命令都可以复制并粘贴到运行在Flux模式下的 influx CLI 中。

定义数据流变量

在Flux中,变量赋值的一个常见用例是为一个或多个输入数据流创建变量。

timeRange = -1h

cpuUsageUser = from(bucket: "telegraf/autogen")
    |> range(start: timeRange)
    |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_user" and r.cpu == "cpu-total")

memUsagePercent = from(bucket: "telegraf/autogen")
    |> range(start: timeRange)
    |> filter(fn: (r) => r._measurement == "mem" and r._field == "used_percent")

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

定义自定义函数

创建一个函数,返回输入流中具有最高 _valueN 行。 为此,将输入流(tables)和要返回的结果数量(n)传递给自定义函数。 然后使用 Flux 的 sort()limit() 函数找到数据集中的前 n 个结果。

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

有关创建自定义函数的更多信息,请参见自定义函数文档。

使用这个新的自定义函数 topN 和上面定义的 cpuUsageUser 数据流变量,找到前五个数据点并返回结果。

cpuUsageUser
    |> topN(n: 5)
    |> yield()

定义数据流变量

在Flux中,变量赋值的一个常见用例是为多个过滤后的输入数据流创建变量。

timeRange = -1h

cpuUsageUser = from(bucket: "telegraf/autogen")
    |> range(start: timeRange)
    |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_user" and r.cpu == "cpu-total")

memUsagePercent = from(bucket: "telegraf/autogen")
    |> range(start: timeRange)
    |> filter(fn: (r) => r._measurement == "mem" and r._field == "used_percent")

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

定义自定义函数

让我们创建一个函数,返回输入数据流中具有最高 _valueN 行。为此,将输入流 (tables) 和要返回的结果数量 (n) 传递给自定义函数。然后使用 Flux 的 sort()limit() 函数来查找数据集中的前 n 个结果。

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

有关创建自定义函数的更多信息,请参见自定义函数文档。

使用定义的 cpuUsageUser 数据流变量 上面, 使用自定义的 topN 函数查找前五个数据点并返回结果。

cpuUsageUser |> topN(n:5) |> yield()

此查询将返回过去一小时内用户CPU使用率最高的五个数据点。



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 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

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