Documentation

在Flux中提取标量值

使用 Flux 动态查询函数 从 Flux 查询输出中提取标量值。这使您可以例如使用查询结果动态设置变量。

从输出中提取标量值:

  1. 从输入流中提取一列 从输入流中提取一行
  2. 使用返回的数组或记录来引用标量值。

本页面上的样本使用了下面提供的示例数据

输出标量值

InfluxDB /api/v2/query HTTP API 端点及所有使用它的客户端 (InfluxDB UI, influx CLI 等)仅支持返回表流的查询。 此端点不支持原始标量输出。

要将标量值作为表格流的一部分输出:

  1. 导入array
  2. 使用 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"])


Flux的未来

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

阅读更多

InfluxDB 3 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

InfluxDB 3 核心,是我们新的开源产品。 它是一个用于时间序列和事件数据的实时数据引擎。 InfluxDB 3 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始的更多信息,请查看: