WATCH 语句(实验性)
注意
这是一个实验性功能,在将来的版本中可能会发生向后不兼容的更改。 使用 `set allow_experimental_live_view = 1` 启用实时视图和 `WATCH` 查询。
WATCH [db.]live_view
[EVENTS]
[LIMIT n]
[FORMAT format]
The `WATCH` 查询从 LIVE VIEW 表中持续检索数据。 除非指定了 `LIMIT` 子句,否则它会从 LIVE VIEW 提供无限的查询结果流。
WATCH [db.]live_view [EVENTS] [LIMIT n] [FORMAT format]
虚拟列
查询结果中的虚拟 `_version` 列指示当前结果版本。
示例
CREATE LIVE VIEW lv WITH REFRESH 5 AS SELECT now();
WATCH lv;
┌───────────────now()─┬─_version─┐
│ 2021-02-21 09:17:21 │ 1 │
└─────────────────────┴──────────┘
┌───────────────now()─┬─_version─┐
│ 2021-02-21 09:17:26 │ 2 │
└─────────────────────┴──────────┘
┌───────────────now()─┬─_version─┐
│ 2021-02-21 09:17:31 │ 3 │
└─────────────────────┴──────────┘
...
默认情况下,请求的数据将返回给客户端,而与 INSERT INTO 结合使用时,它可以转发到另一个表。
示例
INSERT INTO [db.]table WATCH [db.]live_view ...
EVENTS 子句
The `EVENTS` 子句可用于获取 `WATCH` 查询的简短形式,其中您将只获得最新的查询结果版本,而不是查询结果本身。
WATCH [db.]live_view EVENTS;
示例
CREATE LIVE VIEW lv WITH REFRESH 5 AS SELECT now();
WATCH lv EVENTS;
┌─version─┐
│ 1 │
└─────────┘
┌─version─┐
│ 2 │
└─────────┘
...
LIMIT 子句
The `LIMIT n` 子句指定 `WATCH` 查询在终止之前应等待的更新次数。 默认情况下,更新次数没有限制,因此查询不会终止。 值 `0` 表示 `WATCH` 查询不应等待任何新的查询结果,因此一旦评估查询结果,它将立即返回。
WATCH [db.]live_view LIMIT 1;
示例
CREATE LIVE VIEW lv WITH REFRESH 5 AS SELECT now();
WATCH lv EVENTS LIMIT 1;
┌─version─┐
│ 1 │
└─────────┘
FORMAT 子句
The `FORMAT` 子句的工作方式与 SELECT 相同。
注意
当通过 HTTP 接口监视 LIVE VIEW 表时,应使用 JSONEachRowWithProgress 格式。 进度消息将添加到输出中,以使长期 HTTP 连接保持活动状态,直到查询结果更改。 进度消息之间的间隔由 live_view_heartbeat_interval 设置控制。