执行完全外连接
使用 join.full()
执行两个数据流的完全外连接。完全外连接为 left 和 right 输入流中的所有行输出一行,并根据 on
谓词连接匹配的行。
使用 join.full 连接您的数据
导入
join
包。定义要连接的 left 和 right 数据流
- 每个流必须有一个或多个具有公共值的列。列标签不需要匹配,但列值需要匹配。
- 每个流应具有相同的 分组键。
有关更多信息,请参阅连接数据要求。
使用
join.full()
将两个流连接在一起。提供以下必需的参数left
: 表示连接左侧的数据流。right
: 表示连接右侧的数据流。on
: 连接谓词。例如:(l, r) => l.column == r.column
。as
: 连接输出函数,返回包含来自每个输入流的值的记录。考虑缺失的非分组键值
在完全外连接中,左 (
l
) 或右 (r
) 可能包含用于连接操作的列的 *null* 值,并默认为默认记录(填充分组键列,其他列为 *null*)。l
和r
永远不会同时使用默认记录。为确保非分组键列的输出中包含非空值,请检查
l
或r
记录中是否存在值,并返回存在的值(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"])
此页是否对您有帮助?
感谢您的反馈!