在Flux中提取标量值
使用 Flux 动态查询函数 从 Flux 查询输出中提取标量值。这使您可以例如使用查询结果动态设置变量。
从输出中提取标量值:
本页面上的样本使用了下面提供的示例数据。
输出标量值
InfluxDB /api/v2/query HTTP API 端点及所有使用它的客户端
(InfluxDB UI, influx CLI 等)仅支持返回表流的查询。
此端点不支持原始标量输出。
要将标量值作为表格流的一部分输出:
- 导入
array包。 - 使用
array.from()和display()将标量值的字面表示包装在表格流中并将其作为输出返回。
表格提取
Flux 格式将查询结果作为一个表流。
findColumn() 和 findRecord()
提取在一系列表中第一个其 group key 值匹配 fn 谓词函数 的表。
提取正确的表
Flux 函数不保证表的顺序。
findColumn() 和 findRecord() 仅提取与 fn 谓词匹配的 第一个 表。
要提取正确的表,请使用 fn 谓词函数来特定识别要提取的表,或者
过滤并转换您的数据,以最小化传递到函数中的表的数量。
提取一列
使用findColumn()函数输出从提取的表中特定列的值数组。
请参见下面的样本数据。
sampleData
|> findColumn(
fn: (key) => key._field == "temp" and key.location == "sfo",
column: "_value",
)
// Returns [65.1, 66.2, 66.3, 66.8]
要从 InfluxDB 查询 API、InfluxDB UI 或 influx CLI 返回此值,请参见 输出标量值。
使用提取的列值
使用变量来存储值的数组。 在下面的示例中, SFOTemps 代表值的数组。 在数组中引用特定索引(从 0 开始的整数)以返回该索引处的值。
请参阅下面的 示例数据。
SFOTemps = sampleData
|> findColumn(
fn: (key) => key._field == "temp" and key.location == "sfo",
column: "_value",
)
SFOTemps
// Returns [65.1, 66.2, 66.3, 66.8]
SFOTemps[0]
// Returns 65.1
SFOTemps[2]
// Returns 66.3
要从 InfluxDB 查询 API、InfluxDB UI 或 influx CLI 返回此值,请参见 Output scalar values。
提取一行
使用findRecord() 函数从提取的表中的单行输出数据。使用idx参数指定要输出的行的索引。该函数输出一个包含每个列的键值对的记录。
sampleData
|> findRecord(
fn: (key) => key._field == "temp" and key.location == "sfo",
idx: 0,
)
// Returns {
// _time:2019-11-11T12:00:00Z,
// _field:"temp",
// location:"sfo",
// _value: 65.1
// }
要从 InfluxDB 查询 API、InfluxDB UI 或 influx CLI 返回此值,请参见 输出标量值。
使用提取的行记录
使用变量来存储提取的行记录。
在下面的示例中,tempInfo表示提取的行。
使用点或括号表示法
来引用记录中的键。
tempInfo = sampleData
|> findRecord(
fn: (key) => key._field == "temp" and key.location == "sfo",
idx: 0,
)
tempInfo
// Returns {
// _time:2019-11-11T12:00:00Z,
// _field:"temp",
// location:"sfo",
// _value: 65.1
// }
tempInfo._time
// Returns 2019-11-11T12:00:00Z
tempInfo.location
// Returns sfo
要从InfluxDB查询API、InfluxDB UI或influx CLI中返回此值,请参阅 输出标量值。
示例辅助函数
创建自定义助手函数以从查询输出中提取标量值。
提取标量场值
// Define a helper function to extract field values
getFieldValue = (tables=<-, field) => {
extract = tables
|> findColumn(fn: (key) => key._field == field, column: "_value")
return extract[0]
}
// Use the helper function to define a variable
lastJFKTemp = sampleData
|> filter(fn: (r) => r.location == "kjfk")
|> last()
|> getFieldValue(field: "temp")
lastJFKTemp
// Returns 71.2
要从 InfluxDB 查询 API、InfluxDB UI 或 influx CLI 返回该值,请参见 输出标量值。
提取标量行数据
// Define a helper function to extract a row as a record
getRow = (tables=<-, field, idx=0) => {
extract = tables
|> findRecord(fn: (key) => true, idx: idx)
return extract
}
// Use the helper function to define a variable
lastReported = sampleData
|> last()
|> getRow(field: "temp")
"The last location to report was ${lastReported.location}.
The temperature was ${string(v: lastReported._value)}°F."
// Returns:
// The last location to report was kord.
// The temperature was 38.9°F.
要从 InfluxDB 查询 API、InfluxDB 用户界面或 influx CLI 返回此值,请参见 输出标量值。
示例数据
以下示例数据集代表从三个位置收集的虚构温度指标。它格式化为Flux records 的数组,并使用 array.from() 函数 结构化为稳定流。
在查询的开头放置以下内容以使用示例数据:
import "array"
sampleData =
array.from(
rows: [
{_time: 2019-11-01T12:00:00Z, location: "sfo", _field: "temp", _value: 65.1},
{_time: 2019-11-01T13:00:00Z, location: "sfo", _field: "temp", _value: 66.2},
{_time: 2019-11-01T14:00:00Z, location: "sfo", _field: "temp", _value: 66.3},
{_time: 2019-11-01T15:00:00Z, location: "sfo", _field: "temp", _value: 66.8},
{_time: 2019-11-01T12:00:00Z, location: "kjfk", _field: "temp", _value: 69.4},
{_time: 2019-11-01T13:00:00Z, location: "kjfk", _field: "temp", _value: 69.9},
{_time: 2019-11-01T14:00:00Z, location: "kjfk", _field: "temp", _value: 71.0},
{_time: 2019-11-01T15:00:00Z, location: "kjfk", _field: "temp", _value: 71.2},
{_time: 2019-11-01T12:00:00Z, location: "kord", _field: "temp", _value: 46.4},
{_time: 2019-11-01T13:00:00Z, location: "kord", _field: "temp", _value: 46.3},
{_time: 2019-11-01T14:00:00Z, location: "kord", _field: "temp", _value: 42.7},
{_time: 2019-11-01T15:00:00Z, location: "kord", _field: "temp", _value: 38.9},
],
)
|> group(columns: ["location", "_field"])