文档文档

按时间连接

使用 join.time() 基于 _time 列中的时间值连接两个数据流。当连接两个时间序列数据流时,这种类型的连接操作很常见。

join.time() 可以使用任何可用的连接方法。您使用哪种方法取决于您期望的行为

  • inner (默认): 删除两个输入流中在另一个流中没有匹配行的任何行。

  • left: 为 left 数据流中的每一行输出一行,其中包含来自 right 数据流的匹配数据。如果 right 数据流中没有匹配的数据,则来自 right 数据流的非分组键列的值为 null

  • right: 为 right 数据流中的每一行输出一行,其中包含来自 left 数据流的匹配数据。如果 left 数据流中没有匹配的数据,则来自 left 数据流的非分组键列的值为 null

  • full: 为 leftright 输入流中的所有行输出一行,并连接基于其 _time 值匹配的行。

使用 join.time 连接您的数据

  1. 导入 join 包。

  2. 定义要连接的 leftright 数据流

    • 每个流还必须有一个 _time 列。
    • 每个流必须有一个或多个具有公共值的列。列标签不需要匹配,但列值需要匹配。
    • 每个流应具有相同的分组键

    有关更多信息,请参阅连接数据要求

  3. 使用 join.time() 基于时间值将两个流连接在一起。提供以下参数

    • left: (必需) 表示连接左侧的数据流。
    • right: (必需) 表示连接右侧的数据流。
    • as: (必需) 连接输出函数,返回一个包含来自每个输入流的值的记录。例如: (l, r) => ({r with column1: l.column1, column2: l.column2})
    • method: 要使用的连接方法。默认为 inner

以下示例使用来自 machineProduction 示例数据集的过滤选择作为 leftright 数据流。

示例数据分组

下面的示例重新分组了 left 和 right 流,以从分组键中删除 _field 列。由于 join.time() 仅比较具有匹配分组键实例的表,因此要连接具有不同 _field 列值的流,_field 不能是分组键的一部分。

import "influxdata/influxdb/sample"
import "join"

left =
    sample.data(set: "machineProduction")
        |> filter(fn: (r) => r.stationID == "g1" or r.stationID == "g2" or r.stationID == "g3")
        |> filter(fn: (r) => r._field == "pressure")
        |> limit(n: 5)
        |> group(columns: ["_time", "_value", "_field"], mode: "except")

right =
    sample.data(set: "machineProduction")
        |> filter(fn: (r) => r.stationID == "g1" or r.stationID == "g2" or r.stationID == "g3")
        |> filter(fn: (r) => r._field == "pressure_target")
        |> limit(n: 5)
        |> group(columns: ["_time", "_value", "_field"], mode: "except")

join.time(method: "left", left: left, right: right, as: (l, r) => ({l with target: r._value}))

查看示例输入和输出数据


此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

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

了解更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

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

有关更多信息,请查看