Documentation

Flux 数据模型

Flux 采用基于基本数据类型构建的基本数据模型。数据模型由表、记录、列和流组成。

记录

记录 是命名值的元组,并使用记录类型表示。

具有标签和数据类型。列的可用数据类型为

数据类型描述
bool布尔值,真或假。
uint无符号 64 位整数。
int有符号 64 位整数。
floatIEEE-754 64 位浮点数。
stringUnicode 字符序列。
bytes字节值序列。
time纳秒精度的瞬时时间。
duration纳秒精度的时间持续时间。

是具有一组通用列和组键的记录集。

组键是列的列表。表的组键表示分配给该表的整个数据集的子集。表中的所有记录对于作为组键一部分的每列都具有相同的值。这些常用值称为“组键值”,可以用一组键值对表示。

表的模式由其组键及其列的标签和类型组成。

表流

表示可能无限的表集。流使用其各自的组键分组为各个表。流中的每个表都具有唯一的组键值。

流使用流类型 stream[A] where A: Record 表示。组键在 Flux 类型系统中未显式建模。

缺失值(空值)

null 是一个预声明的标识符,表示缺失值或未知值。null 是构成空类型的唯一值。当基本类型的任何非布尔运算符的至少一个操作数是 null 时,它将返回 null

null 视为未知值。下表解释了 null 值在表达式中的行为

表达式计算结果为原因
null + 5null将 5 加到未知值仍然是未知值
null * 5null将未知值乘以 5 仍然是未知值
null == 5null我们不知道未知值是否等于 5
null < 5null我们不知道未知值是否小于 5
null == nullnull我们不知道未知事物是否等于其他也是未知的事物

对未知事物进行运算会产生仍然是未知的事物。唯一不是这种情况的地方是在布尔逻辑中。由于布尔类型是可为空的,因此 Flux 实现了三值逻辑,作为处理具有 null 操作数的布尔运算符的一种方式。通过将 null 操作数解释为未知值,我们得到以下定义

  • not null = null
  • null or false = null
  • null or true = true
  • null or null = null
  • null and false = false
  • null and true = null
  • null and null = null

由于记录使用记录类型表示,尝试访问记录中值未知或缺失的列也将返回 null

根据上述定义,无法使用 ==!= 运算符检查表达式是否为 null。如果它们的任何操作数是 null,这些运算符将返回 null。为了执行此类检查,Flux 提供了一个内置的 exists 运算符

  • 如果 xnull,则 exists x 返回 false
  • 如果 x 不为 null,则 exists x 返回 true

转换

转换定义了对流的更改。转换可能会消耗输入流,并且始终生成新的输出流。输出流组键具有基于输入流的稳定输出顺序。特定顺序可能会在版本之间更改,但不被视为重大更改。

大多数转换为它们从输入流接收的每个表输出一个表。修改组键或值的转换会重新组合输出流中的表。当从产生副作用的函数构造转换时,转换会产生副作用。

转换使用函数类型表示。

匹配参数名称

某些转换(例如,mapfilter)使用高阶函数(接受其他函数的函数)表示。传递到函数中的每个参数都必须与为该函数定义的参数名称匹配。

例如,filter 接受 fn,它接受一个名为 r 的参数

from(bucket: "db")
   |> filter(fn: (r) => ...)

如果将参数从 r 重命名为 v,则脚本将失败

from(bucket: "db")
    |> filter(fn: (v) => ...)
 // FAILS!: 'v' != 'r'.

由于 Flux 不支持位置参数,因此参数名称很重要。转换(在本例中为 filter)必须知道 r 是参数名称才能成功调用该函数。


此页内容对您有帮助吗?

感谢您的反馈!


Flux 的未来

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

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

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

有关更多信息,请查看