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
当筛选数据或在条件表达式中使用时,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 不支持位置参数。调用函数时,参数必须始终命名。
谓词函数
谓词函数使用谓词表达式来评估输入并返回 true
或 false
。例如
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)
有关创建自定义函数的更多信息,请参阅定义自定义函数。
此页是否对您有帮助?
感谢您的反馈!