文档文档

执行完全外连接

使用 join.full() 执行两个数据流的完全外连接。完全外连接为 leftright 输入流中的所有行输出一行,并根据 on 谓词连接匹配的行。

查看完全外连接的表格图示

使用 join.full 连接您的数据

  1. 导入 join 包。

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

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

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

  3. 使用 join.full() 将两个流连接在一起。提供以下必需的参数

    • left: 表示连接左侧的数据流。

    • right: 表示连接右侧的数据流。

    • on: 连接谓词。例如:(l, r) => l.column == r.column

    • as: 连接输出函数,返回包含来自每个输入流的值的记录。

      考虑缺失的非分组键值

      在完全外连接中,左 (l) 或右 (r) 可能包含用于连接操作的列的 *null* 值,并默认为默认记录(填充分组键列,其他列为 *null*)。lr 永远不会同时使用默认记录。

      为确保非分组键列的输出中包含非空值,请检查 lr 记录中是否存在值,并返回存在的值

      (l, r) => {
          id = if exists l.id then l.id else r.id
      
          return {_time: l.time, location: r.location, id: id}
      }
      

以下示例使用来自 machineProduction 示例数据集 的过滤选择作为 left 数据流,并使用 array.from() 创建的临时表作为 right 数据流。

示例数据分组

以下示例取消分组 left 流以匹配 right 流的分组。在两个流连接在一起后,连接的数据按 stationID 分组,并按 _time 排序。

import "array"
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 == "oil_temp")
        |> limit(n: 5)

right =
    array.from(
        rows: [
            {station: "g1", opType: "auto", last_maintained: 2021-07-15T00:00:00Z},
            {station: "g2", opType: "manned", last_maintained: 2021-07-02T00:00:00Z},
            {station: "g4", opType: "auto", last_maintained: 2021-08-04T00:00:00Z},
        ],
    )

join.full(
    left: left |> group(),
    right: right,
    on: (l, r) => l.stationID == r.station,
    as: (l, r) => {
        stationID = if exists l.stationID then l.stationID else r.station

        return {
            stationID: stationID,
            _time: l._time,
            _field: l._field,
            _value: l._value,
            opType: r.opType,
            maintained: r.last_maintained,
        }
    },
)
    |> group(columns: ["stationID"])
    |> sort(columns: ["_time"])

查看示例输入和输出数据


此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

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

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

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

有关更多信息,请查看