文档文档

join.full() 函数

join.full() 对两个表流执行全外连接。

该函数调用 join.tables(),并将 method 参数设置为 "full"

函数类型签名
(<-left: stream[A], as: (l: A, r: B) => C, on: (l: A, r: B) => bool, right: stream[B]) => stream[C] where A: Record, B: Record, C: Record

有关更多信息,请参阅 函数类型签名

参数

left

左侧输入流。默认为管道转发数据 (<-)。

(必需) 右侧输入流。

on

(必需) 接受左侧和右侧记录 (lr) 并返回布尔值的函数。

函数的主体必须是单个布尔表达式,由 l 的属性和 r 的属性之间的一个或多个相等性比较组成,每个比较都通过 and 运算符链接在一起。

as

(必需) 接受左侧和右侧记录(分别为 lr)并返回记录的函数。返回的记录包含在最终输出中。

示例

执行全外连接

在全外连接中,lr 可以是默认记录,但它们永远不会同时是默认记录。

要获取输出记录的非空值,请检查 lr 以查看哪个包含所需的值。

下面的示例为 as 参数定义了一个函数,该函数适当地处理了全外连接的不确定性。

v_leftv_right 仍然直接使用来自 lr 的值,因为我们预计它们有时在输出表中为空。

有关外连接行为的更多信息,请参阅 join 包文档中的 外连接 部分。

import "array"
import "join"

left =
    array.from(
        rows: [
            {_time: 2022-01-01T00:00:00Z, _value: 1, label: "a"},
            {_time: 2022-01-01T00:00:00Z, _value: 2, label: "b"},
            {_time: 2022-01-01T00:00:00Z, _value: 3, label: "d"},
        ],
    )
right =
    array.from(
        rows: [
            {_time: 2022-01-01T00:00:00Z, _value: 0.4, id: "a"},
            {_time: 2022-01-01T00:00:00Z, _value: 0.5, id: "c"},
            {_time: 2022-01-01T00:00:00Z, _value: 0.6, id: "d"},
        ],
    )

join.full(
    left: left,
    right: right,
    on: (l, r) => l.label == r.id and l._time == r._time,
    as: (l, r) => {
        time = if exists l._time then l._time else r._time
        label = if exists l.label then l.label else r.id

        return {_time: time, label: label, v_left: l._value, v_right: r._value}
    },
)

查看示例输出


此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

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

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

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

有关更多信息,请查看