在计算中使用多个字段
要在数学计算中使用多个字段的值,请完成以下步骤
按字段过滤
使用 filter() 仅返回计算所需的字段。使用 or 逻辑运算符 按多个字段过滤。
以下示例查询两个字段,A 和 B
from(bucket: "example-bucket")
|> range(start: -1m)
|> filter(fn: (r) => r._field == "A" or r._field == "B")
此查询为每个字段返回一个或多个表。例如
| _time | _field | _value |
|---|---|---|
| 2021-01-01T00:00:00Z | A | 12.4 |
| 2021-01-01T00:00:15Z | A | 12.2 |
| 2021-01-01T00:00:30Z | A | 11.6 |
| 2021-01-01T00:00:45Z | A | 11.9 |
| _time | _field | _value |
|---|---|---|
| 2021-01-01T00:00:00Z | B | 3.1 |
| 2021-01-01T00:00:15Z | B | 4.8 |
| 2021-01-01T00:00:30Z | B | 2.2 |
| 2021-01-01T00:00:45Z | B | 3.3 |
将字段透视为列
使用 pivot() 按时间对齐多个字段。
要正确地在 _time 上透视,每个字段的数据点必须具有相同的时间戳。如果时间戳不规则或未完美对齐,请参阅 规范化不规则时间戳。
// ...
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
使用 上面 查询的数据,此 pivot() 函数返回
| _time | A | B |
|---|---|---|
| 2021-01-01T00:00:00Z | 12.4 | 3.1 |
| 2021-01-01T00:00:15Z | 12.2 | 4.8 |
| 2021-01-01T00:00:30Z | 11.6 | 2.2 |
| 2021-01-01T00:00:45Z | 11.9 | 3.3 |
执行计算
使用 map() 使用列值作为操作数执行数学运算。
以下示例使用 A 和 B 列中的值来计算新的 _value 列
// ...
|> map(fn: (r) => ({ r with _value: r.A * r.B }))
使用上面的透视数据,此 map() 函数返回
| _time | A | B | _value |
|---|---|---|---|
| 2021-01-01T00:00:00Z | 12.4 | 3.1 | 38.44 |
| 2021-01-01T00:00:15Z | 12.2 | 4.8 | 58.56 |
| 2021-01-01T00:00:30Z | 11.6 | 2.2 | 25.52 |
| 2021-01-01T00:00:45Z | 11.9 | 3.3 | 39.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}))
此页内容对您有帮助吗?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一份子!我们欢迎并鼓励您提供关于 InfluxDB 和本文档的反馈和错误报告。要获得支持,请使用以下资源
拥有年度合同或支持合同的客户 可以联系 InfluxData 支持。