【发布时间】:2023-10-22 09:16:01
【问题描述】:
我在 InfluxQL 查询中使用 LIMIT 和 OFFSET 来处理分页。
例如,在有 3 行的测量中。
> SELECT *::field FROM i2QYtZBVSnuXjLhQhuAV6w;
name: i2QYtZBVSnuXjLhQhuAV6w
time hello
---- -----
2018-02-23T18:00:00Z 1000
2018-02-23T18:30:00Z 1200
2018-02-23T19:00:00Z 990
假设我使用LIMIT 和OFFSET 逐行读取:
> SELECT *::field FROM i2QYtZBVSnuXjLhQhuAV6w LIMIT 1;
name: i2QYtZBVSnuXjLhQhuAV6w
time hello
---- -----
2018-02-23T18:00:00Z 1000
> SELECT *::field FROM i2QYtZBVSnuXjLhQhuAV6w LIMIT 1 OFFSET 1;
name: i2QYtZBVSnuXjLhQhuAV6w
time hello
---- -----
2018-02-23T18:30:00Z 1200
> SELECT *::field FROM i2QYtZBVSnuXjLhQhuAV6w LIMIT 1 OFFSET 2;
name: i2QYtZBVSnuXjLhQhuAV6w
time hello
---- -----
2018-02-23T19:00:00Z 990
有没有办法在不执行额外查询的情况下知道之后没有更多数据?
编辑:我的用例是为面向用户的 REST API 生成“下一页令牌”。我想避免给用户一个只会返回空行集的令牌。
【问题讨论】:
-
可以提前数数,到数就停止。 “SELECT COUNT(column_name) FROM series_name group by time(10m)”。显然,自第一次计数以来,可能会有更多数据进入数据库 - 但如果您想要实时流式传输,那是另一种情况,您需要 Kapacitor。根据您的实现,另一种选择是捕获空结果并停止分页。
-
感谢您的提示。我想到了第一种方法,但它仍然是一个额外的请求。如果我找不到另一条路,我会沿着这条路走。第二种方法有一个错误的情况:当行集是页面的精确倍数时。那么就没有办法知道了。
标签: pagination time-series influxdb