跳至主要内容

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 设置控制。