按时间连接
使用 join.time()
基于 _time
列中的时间值连接两个数据流。当连接两个时间序列数据流时,这种类型的连接操作很常见。
join.time()
可以使用任何可用的连接方法。您使用哪种方法取决于您期望的行为
inner (默认): 删除两个输入流中在另一个流中没有匹配行的任何行。
left: 为 left 数据流中的每一行输出一行,其中包含来自 right 数据流的匹配数据。如果 right 数据流中没有匹配的数据,则来自 right 数据流的非分组键列的值为 null。
right: 为 right 数据流中的每一行输出一行,其中包含来自 left 数据流的匹配数据。如果 left 数据流中没有匹配的数据,则来自 left 数据流的非分组键列的值为 null。
full: 为 left 和 right 输入流中的所有行输出一行,并连接基于其
_time
值匹配的行。
使用 join.time 连接您的数据
导入
join
包。定义要连接的 left 和 right 数据流
- 每个流还必须有一个
_time
列。 - 每个流必须有一个或多个具有公共值的列。列标签不需要匹配,但列值需要匹配。
- 每个流应具有相同的分组键。
有关更多信息,请参阅连接数据要求。
- 每个流还必须有一个
使用
join.time()
基于时间值将两个流连接在一起。提供以下参数left
: (必需) 表示连接左侧的数据流。right
: (必需) 表示连接右侧的数据流。as
: (必需) 连接输出函数,返回一个包含来自每个输入流的值的记录。例如:(l, r) => ({r with column1: l.column1, column2: l.column2})
。method
: 要使用的连接方法。默认为inner
。
以下示例使用来自 machineProduction 示例数据集的过滤选择作为 left 和 right 数据流。
示例数据分组
下面的示例重新分组了 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}))
此页是否对您有帮助?
感谢您的反馈!