管理流

本主题描述与管理 Streams 相关的管理任务。

在视图和基础表上启用变更跟踪

为了让用户查询视图上的变更数据,必须在视图和基础表上启用变更跟踪。

只有给定视图或基础表上的对象所有者(即具有 OWNERSHIP 权限的角色)才能启用变更跟踪。

以下选项可用于启用变更跟踪:

  1. 使用视图所有者角色在视图上创建流。通过此操作可在视图上启用变更跟踪。

    如果同一角色也拥有基础表,则还会在表上启用变更跟踪。否则,表所有者必须对表显式启用变更跟踪。有关这些步骤,请参阅 在基础表上显式启用变更跟踪 (本主题内容)。

  2. 在视图和表上显式启用变更跟踪。有关说明,请参阅本节中的其余说明。

在视图上显式启用变更跟踪

在创建视图(使用 CREATE VIEW)或后续操作(使用 ALTER VIEW)时设置 CHANGE_TRACKING 参数。

请注意,还必须在视图的基础表上显式启用变更跟踪。有关说明,请参阅 `在基础表上显式启用变更跟踪`_(本主题内容)。

例如,在当前架构中创建一个安全视图,用于从表中选择行的子集:

CREATE SECURE VIEW v CHANGE_TRACKING = TRUE AS SELECT col1, col2 FROM t;
Copy

例如,修改现有视图以启用变更跟踪:

ALTER VIEW v2 SET CHANGE_TRACKING = TRUE;
Copy

在基础表上显式启用变更跟踪

重要

创建或更改视图以指定 CHANGE_TRACKING 时,关联的依赖数据库对象将自动更新以启用变更跟踪。 在操作过程中会锁定底层资源,这可能会导致 DDL/DML 操作延迟。有关更多信息,请参阅 资源锁定

如果执行语句的用户未指定具有足够权限 (OWNERSHIP) 的角色,则该语句将失败,基础数据库对象将不会更新,并会解锁。

在创建表(使用 CREATE TABLE)或后续操作(使用 ALTER TABLE)时设置 CHANGE_TRACKING 参数。

例如,要在当前架构中创建表:

CREATE TABLE t (col1 STRING, col2 NUMBER) CHANGE_TRACKING = TRUE;
Copy

例如,要修改现有表以启用变更跟踪:

ALTER TABLE t1 SET CHANGE_TRACKING = TRUE;
Copy

重要

当创建或更改 TABLE 以指定 CHANGE_TRACKING 时,表在操作期间会锁定,这可能会导致 DML 操作延迟。 有关更多信息,请参阅 资源锁定

避免流过期

为防止流过时,请在表的保留期内使用 DML 语句中的流记录,并定期在其 STALE_AFTER 时间戳之前(即在源对象的延长数据保留期内)使用其变更数据。此外,只要流为空且 SYSTEM$STREAM_HAS_DATA 函数返回 FALSE,则在流上调用 SYSTEM$STREAM_HAS_DATA 可防止其过期。

重要

When SYSTEM$STREAM_HAS_DATA returns TRUE for a stream, you should consume the stream in a DML operation, even if the result is a false positive. If you don't consume the stream, SYSTEM$STREAM_HAS_DATA returns TRUE, and any tasks that use this function in their WHEN clause won't skip execution. This results in unnecessary task runs and associated warehouse charges.

To consume the stream efficiently when the result is a false positive --- for example, querying the stream with SELECT COUNT(*) FROM stream_name returns no records --- use a statement like the following example:

CREATE TEMPORARY TABLE _unused_table AS SELECT * FROM my_stream WHERE 1=0;
Copy

This statement consumes the stream, because CREATE TABLE AS SELECT is a DML transaction. The WHERE 1=0 clause filters out all data, so nothing gets processed. This advances the stream offset, and SYSTEM$STREAM_HAS_DATA returns FALSE until new changes occur.

有关数据保留期的更多信息,请参阅 了解和使用 Time Travel

要查看流的数据保留期,请执行 DESCRIBE STREAMSHOW STREAMS 命令。stale_after 列时间戳指示当前预测流在何时会过期(如果此时间戳是过去,则为其过期时间)。此时间戳的计算方式是,将 DATA_RETENTION_TIME_IN_DAYSMAX_DATA_EXTENSION_TIME_IN_DAYS 参数设置中较大的值与当前时间戳相加。请注意,如果时间戳是过去的,则流可能已经过期。stale 列指示流是否应已过期,尽管该流实际上可能尚未过期。

使用流的变更数据会将 STALE_AFTER 时间戳向前移动。

有关更多信息,请参阅 数据保留期与过期

在 Snowsight 中查看和管理流

要在 Snowsight 中查看和管理流,请执行以下操作:

  1. Sign in to Snowsight.

  2. In the navigation menu, select Catalog » Database Explorer.

  3. 对于特定的数据库和架构,请选择 Streams,然后选择要管理的流。

在 Snowsight 中查看流时,您可以执行以下操作:

  • Details 部分,查看流适用的表名称、流的类型以及流是否过时。

  • 查看用于创建流的 SQL 语句。

  • 管理流权限。请参阅 使用 Snowsight 管理对象权限

语言: 中文