求助:SQL中SELECT * FROM MEASUREMENT WHERE end_date>...的等价Flux查询
解决Flux查询等价SQL
SELECT * FROM MEASUREMENT WHERE end_date > ...的问题 你的核心问题是原Flux查询仅过滤并返回了end_date字段,要获取该measurement下的所有字段,需要先定位到符合end_date条件的时间点,再拉取这些时间点对应的全量字段数据。
修正后的Flux查询
// 第一步:提取end_date满足条件的所有时间戳 validTimes = from(bucket: "some_bucket") |> range(start: 0) |> filter(fn: (r) => r._measurement == "MEASUREMENT" and r._field == "end_date" and r._value > 1687447435983242) |> keep(columns: ["_time"]) // 第二步:拉取该measurement的所有字段,过滤出时间戳在有效集合内的记录 from(bucket: "some_bucket") |> range(start: 0) |> filter(fn: (r) => r._measurement == "MEASUREMENT") |> filter(fn: (r) => exists validTimes[r._time]) |> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
代码说明
- 第一部分
validTimes:仅筛选end_date符合条件的记录,只保留_time列,得到所有符合要求的时间戳集合。 - 第二部分:先获取
MEASUREMENT下的所有字段数据,再通过exists validTimes[r._time]过滤出时间戳在有效集合内的记录,最后用pivot将字段转为列,实现SQL中SELECT *的效果。
补充提示
如果你的数据中同一条业务记录的所有字段是同一时间戳写入的,这个方法可以精准匹配;如果存在时间戳不一致的情况,可根据实际场景调整时间匹配逻辑(比如改用时间范围匹配)。
内容的提问来源于stack exchange,提问作者deadlock
相关产品推荐
相关产品推荐

