文档文档

在计算中使用多个字段

要在数学计算中使用多个字段的值,请完成以下步骤

  1. 按计算中需要的字段过滤
  2. 将字段透视为列
  3. 执行数学计算

按字段过滤

使用 filter() 仅返回计算所需的字段。使用 or 逻辑运算符 按多个字段过滤。

以下示例查询两个字段,AB

from(bucket: "example-bucket")
    |> range(start: -1m)
    |> filter(fn: (r) => r._field == "A" or r._field == "B")

此查询为每个字段返回一个或多个表。例如

_time_field_value
2021-01-01T00:00:00ZA12.4
2021-01-01T00:00:15ZA12.2
2021-01-01T00:00:30ZA11.6
2021-01-01T00:00:45ZA11.9
_time_field_value
2021-01-01T00:00:00ZB3.1
2021-01-01T00:00:15ZB4.8
2021-01-01T00:00:30ZB2.2
2021-01-01T00:00:45ZB3.3

将字段透视为列

使用 pivot() 按时间对齐多个字段。

要正确地在 _time 上透视,每个字段的数据点必须具有相同的时间戳。如果时间戳不规则或未完美对齐,请参阅 规范化不规则时间戳

// ...
  |> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")

使用 上面 查询的数据,此 pivot() 函数返回

_timeAB
2021-01-01T00:00:00Z12.43.1
2021-01-01T00:00:15Z12.24.8
2021-01-01T00:00:30Z11.62.2
2021-01-01T00:00:45Z11.93.3

执行计算

使用 map() 使用列值作为操作数执行数学运算。

以下示例使用 AB 列中的值来计算新的 _value

// ...
    |> map(fn: (r) => ({ r with _value: r.A * r.B }))

使用上面的透视数据,此 map() 函数返回

_timeAB_value
2021-01-01T00:00:00Z12.43.138.44
2021-01-01T00:00:15Z12.24.858.56
2021-01-01T00:00:30Z11.62.225.52
2021-01-01T00:00:45Z11.93.339.27

完整示例查询

from(bucket: "example-bucket")
    |> range(start: -1m)
    |> filter(fn: (r) => r._field == "A" or r._field == "B")
    |> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
    |> map(fn: (r) => ({r with _value: r.A * r.B}))

此页内容对您有帮助吗?

感谢您的反馈!


Flux 的未来

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

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

启动快速。扩展更快。

获取更新

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

有关更多信息,请查看