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操作符 – 操作符优先级。
谓词表达式
谓词表达式使用 比较运算符、逻辑运算符 或两者的组合来比较值,并评估为 true 或 false。例如:
"John" == "John"
// Returns true
41 < 30
// Returns false
"John" == "John" and 41 < 30
// Returns false
"John" == "John" or 41 < 30
// Returns true
变量
通过使用
赋值运算符 (=) 将表达式赋值给变量。
使用变量的名称(标识符)来返回其值:
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 不支持位置参数。
调用函数时,参数必须始终命名。
谓词函数
谓词函数使用 谓词表达式 来评估输入并返回 true 或 false。例如:
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)
有关创建自定义函数的更多信息,请参见 定义自定义函数。