在计算中使用多个字段
要在数学计算中使用多个字段的值,请完成以下步骤
按字段过滤
使用 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 支持。