CREATE INTERACTIVE TABLE

在当前/指定架构中创建新的交互式表或替换现有表。交互式表针对低延迟的交互式查询进行了优化,并在使用交互式仓库查询时可提供最佳性能。

交互式表支持的 SQL 操作集比标准表更为有限,其专为高并发、实时查询工作负载(如仪表板和数据驱动型 APIs)而设计。

备注

创建交互式表时,必须在一个或多个列上定义 CLUSTER BY 子句,这些列用于时效性要求最高的查询的 WHERE 子句。

您还可以使用以下 CREATE INTERACTIVE TABLE 变体:

  • :ref:`label-create_interactive_table_static`(创建从查询中填充数据的静态交互式表)

  • :ref:`label-create_interactive_table_dynamic`(创建具有自动刷新功能的动态交互式表)

对于用于标准 Snowflake 表的完整 CREATE TABLE 语法,请参阅 CREATE TABLE

小技巧

在创建和使用交互式表之前,您应该熟悉 限制和用例。交互式表最适合包含选择性 WHERE 子句的简单 SELECT 语句。

另请参阅:

CREATE WAREHOUSEALTER WAREHOUSESHOW TABLESSHOW WAREHOUSESDROP TABLE

语法

CREATE [ OR REPLACE ] INTERACTIVE TABLE [ IF NOT EXISTS ] <table_name>
  CLUSTER BY ( <expr> [ , <expr> , ... ] )
  [ TARGET_LAG = '<num> { seconds | minutes | hours | days }' ]
  [ WAREHOUSE = <warehouse_name> ]
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  AS <query>
Copy

必填参数

table_name

指定交互式表的标识符(即名称);对于在其中创建表的架构必须唯一。

此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,"My object")。放在双引号内的标识符也区分大小写。

有关更多详细信息,请参阅 标识符要求

CLUSTER BY ( expr [ , expr , ... ] )

必填。 将表中的一个或多个列或列表达式指定为群集密钥。请选择在时效性要求最高的查询的 WHERE 子句中使用的列,因为这将显著影响查询性能。

有关选择有效群集密钥的更多详细信息,请参阅 群集密钥和聚类表

AS query

必填。 指定填充交互式表的 SELECT 语句。在 CREATE INTERACTIVE TABLE 语句中,无论包含哪些其他参数,该查询都必须放在语句的最后。

该查询遵循 CREATE TABLE AS SELECT (CTAS) 模式,并定义交互式表的数据和架构。

可选参数

OR REPLACE

指定替换交互式表(如果该表在架构中已存在)。这相当于对现有表使用 DROP TABLE,然后创建同名新表。

IF NOT EXISTS

指定仅当架构中尚未存在交互式表时才创建该表。如果已存在同名表,则语句将成功,而不会创建新表。

备注

OR REPLACE 和 IF NOT EXISTS 子句是互斥的,它们不能在同一语句中使用。

TARGET_LAG = 'num { seconds | minutes | hours | days }'

指定交互式表自动刷新的最大滞后时间。指定后,交互式表将成为动态交互式表,该表会自动刷新以保持在源数据的指定滞后时间内。

  • 最小值为 60 秒(1 分钟)。

  • 如果未指定单位,则数字表示秒。

  • 如果 TARGET_LAG 未指定,则表将创建为静态交互式表。

指定 TARGET_LAG 时,还需要 WAREHOUSE 参数。

WAREHOUSE = warehouse_name

**当指定 TARGET_LAG 时需要此参数。**用于在设置 TARGET_LAG 时指定刷新操作所使用的标准仓库。该仓库必须是标准仓库,而非交互式仓库。

COPY GRANTS

指定在使用 CREATE OR REPLACE INTERACTIVE TABLE 替换交互式表时保留原始表的访问权限。

该参数将除 OWNERSHIP 之外的所有权限从现有表复制到新表。默认情况下,执行 CREATE INTERACTIVE TABLE 语句的角色拥有新表。

COMMENT = 'string_literal'

指定交互式表的注释。

访问控制要求

用于执行此操作的 角色 必须至少具有以下 权限

权限

对象

备注

CREATE INTERACTIVE TABLE

架构

在架构中创建交互式表时需要。

SELECT

表、外部表、视图

在 AS SELECT 子句中,对被查询的表和/或视图是必需的。

USAGE

数据库、架构

对于包含交互式表的数据库和架构是必需的。

USAGE

仓库

对 WAREHOUSE 参数中指定的仓库是必须的(当使用 TARGET_LAG 时)。

有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色

有关对 安全对象 执行 SQL 操作的相应角色和权限授予的一般信息,请参阅 访问控制概述

使用说明

  • 交互式表必须使用标准仓库(而不是交互式仓库)创建。

  • CLUSTER BY 子句对所有交互式表是必需的,且会显著影响查询性能。请根据最常见的 WHERE 子句模式谨慎选择群集列。

  • 通过交互式仓库查询时,交互式表可实现最佳性能。要获得交互式表的最佳性能,请执行以下操作:

    1. 创建交互式仓库

    2. 使用 ALTER WAREHOUSE ... ADD TABLES 将交互式表关联到交互式仓库

    3. 恢复交互式仓库

    4. 使用交互式仓库查询交互式表

  • 交互式表支持的 SQL 操作集相较于标准表更为有限:

    • 包含 WHERE 子句的 SELECT 语句已优化。

    • 支持简单的 GROUP BY 操作。

    • 不支持 DML 操作(INSERT、UPDATE、DELETE)。唯一允许的 DML 操作是 INSERT OVERWRITE。

    • 复杂查询操作可能无法显著提升性能。

  • 动态交互式表(带有 TARGET_LAG)使用指定的标准仓库自动刷新。滞后时间平衡了数据新鲜度和计算成本。

  • 静态交互式表需要手动刷新,才能使用源表中的新数据进行更新。

  • 交互式表存储额外的元数据和索引信息以加速查询,但这些信息经过压缩,对存储大小的影响微乎其微。

变体语法:静态交互式表

创建一个静态交互式表,该表从源查询中填充一次:

CREATE [ OR REPLACE ] INTERACTIVE TABLE <table_name>
  CLUSTER BY ( <expr> [ , <expr> , ... ] )
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  AS <query>
Copy

静态交互式表不会自动刷新,需要手动更新以反映源数据的更改。

变体语法:动态交互式表

创建根据指定的滞后时间自动刷新的动态交互式表:

CREATE [ OR REPLACE ] INTERACTIVE TABLE <table_name>
  CLUSTER BY ( <expr> [ , <expr> , ... ] )
  TARGET_LAG = '<num> { seconds | minutes | hours | days }'
  WAREHOUSE = <warehouse_name>
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  AS <query>
Copy

动态交互式表格会自动刷新,以保持与源数据指定的 TARGET_LAG 同步,并使用指定的标准仓库执行刷新操作。

示例

以下示例展示了创建交互式表的不同方法,并指定了其数据源以及如何刷新数据。

基本静态交互式表

根据现有订单数据创建静态交互式表,按客户和日期聚类,以实现最佳查询性能:

CREATE INTERACTIVE TABLE orders_interactive
  CLUSTER BY (customer_id, order_date)
  COMMENT = 'Interactive table for real-time order analytics'
AS
  SELECT customer_id, order_date, product_id, quantity, total_amount
  FROM orders_staging
  WHERE order_date >= '2024-01-01';
Copy

具有自动刷新功能的动态交互式表

创建每 5 分钟刷新一次的动态交互式表,以提供近乎实时的销售摘要:

CREATE INTERACTIVE TABLE sales_summary_interactive
  CLUSTER BY (region, product_category)
  TARGET_LAG = '5 minutes'
  WAREHOUSE = refresh_warehouse
  COMMENT = 'Real-time sales dashboard data'
AS
  SELECT
    region,
    product_category,
    SUM(sales_amount) as total_sales,
    COUNT(*) as transaction_count,
    AVG(sales_amount) as avg_sale
  FROM sales_data
  GROUP BY region, product_category;
Copy

用于复杂查询的多列聚类

使用针对各种查询模式进行了优化的多列聚类创建交互式表:

CREATE INTERACTIVE TABLE customer_analytics_interactive
  CLUSTER BY (customer_tier, region, signup_date)
  TARGET_LAG = '10 minutes'
  WAREHOUSE = analytics_warehouse
AS
  SELECT
    customer_id,
    customer_tier,
    region,
    signup_date,
    total_orders,
    lifetime_value,
    last_order_date
  FROM customer_metrics
  WHERE customer_tier IN ('GOLD', 'PLATINUM', 'DIAMOND');
Copy

替换现有的交互式表

使用更新的聚类和刷新设置替换现有的交互式表:

CREATE OR REPLACE INTERACTIVE TABLE product_performance_interactive
  CLUSTER BY (category, brand, launch_date)
  TARGET_LAG = '2 minutes'
  WAREHOUSE = fast_refresh_warehouse
  COPY GRANTS
AS
  SELECT
    product_id,
    category,
    brand,
    launch_date,
    units_sold,
    revenue,
    customer_rating
  FROM product_sales_view
  WHERE launch_date >= DATEADD('month', -6, CURRENT_DATE());
Copy
语言: 中文