Flux 数据模型
要充分利用Flux处理您的数据,您必须了解Flux如何构建和操作数据。 Flux数据模型包括以下内容:
表的流
A 流表是零个或多个表的集合。数据源将结果返回为一系列表。
表格
列
A 列 是相同 基本类型 的值的集合,每个 行 包含一个值。
行
A 行 是一组相关的 列 值的集合。
分组键
一个 组键 定义了在一系列表中用于分组的列。
一系列表中的每个表代表一个独特的 组键实例。
表中的所有行在每个组键列上具有相同的值。
示例组键
一个组键可以通过一组列标签表示。
[_measurement, facility, _field]
示例组键实例
组键实例(每个表唯一)包括标识每个列名的键值对,这些列在表中具有相同的值。以下是在包含三个独立表的表流中的组键实例示例。每个代表一个包含唯一位置数据的表:
[_measurement: "production", facility: "us-midwest", _field: "apq"]
[_measurement: "production", facility: "eu-central", _field: "apq"]
[_measurement: "production", facility: "ap-east", _field: "apq"]
一个 空组键 将所有数据在一个表流中归纳为一个单一的表。
关于分组键如何工作的示例,请参见下面的 表格分组示例。
数据源决定数据结构
Flux数据模型与查询的数据源模型是分开的。 查询源返回结构化为列式表的数据。 表的结构和包含的列取决于数据源。
例如,InfluxDB 返回按 series 分组的数据,因此返回的表流中的每个表代表一个唯一的系列。然而,SQL data sources 返回的表流包含一个单一的表和一个空的组键。
以下划线开头的列标签
一些数据源返回以下划线 (_) 为前缀的列标签。这是一个 Flux 约定,用于识别重要或保留的列名。虽然下划线并不会改变列的功能,但 Flux 标准库 中的许多函数期望或需要这些特定的列名。
对表进行操作
在其核心,Flux 在表上操作。 Flux 转换接收一系列表作为输入,但对每个表单独操作。 例如,聚合转换如 sum(),输出一系列表,每个对应的输入表对应一个表:
|> sum()
重构表格
流中的所有表由它们的 组键 定义。
要改变数据在表中的分区或分组方式,可以使用诸如
group() 或 window()
的函数来修改流中的表的组键。
data
|> group(columns: ["foo", "bar"], mode: "by")
表格分组示例
下面的表格表示从InfluxDB返回的数据,具有以下模式:
example测量loc标签包含两个值- 带有两个值的
sensorID标签 temp和hum字段
要修改组键并查看示例数据是如何被划分到新表中的,请选择要分组的列:
data
|> group(columns: ["_measurement", "loc", "sensorID", "_field"])