支持的动态表查询

动态表支持标准 SQL 表达式和 Snowflake 支持的函数,包括数学运算、字符串函数、日期函数等。本主题介绍动态表在增量和完全刷新模式下支持的表达式、构造、函数、运算符和子句。

如果查询使用增量刷新不支持的表达式、关键字、运算符或子句,则自动刷新流程将改为使用完全刷新,这可能会产生额外费用

支持的数据类型

动态表支持所有 Snowflake SQL 数据类型,用于增量和完全刷新,但以下类型除外:

  • 结构化数据类型。

  • 地理空间数据类型(仅完全刷新)。

增量和完全刷新模式下支持的查询

关键字

增量刷新模式

完全刷新模式

DISTINCT

支持

支持

外部函数

不支持

不支持

FROM

源表、视图、Snowflake 管理的 Apache Iceberg™ 表和其他动态表。

不支持 FROM 子句(例如 WHERE EXISTS)外部的子查询。

支持

GROUP BY

支持

支持

CROSS JOIN

支持。您可以在联接中指定任意数量的表,联接中所有表的更新都会反映在查询结果中。

支持

INNER JOIN

支持。您可以在联接中指定任意数量的表,联接中所有表的更新都会反映在查询结果中。

支持

LATERAL JOIN

不支持。但是,您可以将 LATERAL 与 FLATTEN() 结合使用。例如:

CREATE TABLE persons
 AS
  SELECT column1 AS id, parse_json(column2) AS entity
  FROM values
   (12712555,
   '{ name:  { first: "John", last: "Smith"},
     contact: [
     { business:[
       { type: "phone", content:"555-1234" },
       { type: "email", content:"j.smith@example.com" } ] } ] }'),
   (98127771,
    '{ name:  { first: "Jane", last: "Doe"},
     contact: [
     { business:[
       { type: "phone", content:"555-1236" },
       { type: "email", content:"j.doe@example.com" } ] } ] }');
Copy
CREATE DYNAMIC TABLE my_dynamic_table
 TARGET_LAG = DOWNSTREAM
 WAREHOUSE = mywh
 AS
  SELECT p.id, f.value, f.path
  FROM persons p,
  LATERAL FLATTEN(input => p.entity) f;
Copy

使用横向展平和增量刷新时,请注意以下行为:

  • 不支持从横向展平联接中选择展平 SEQ 列。

  • 使用 AUTO 参数时,Snowflake 通常会为具有横向展平联接的查询选择增量刷新,除非受其他限制阻止。

支持。

OUTER-EQUI JOIN。

支持。您可以在联接中指定任意数量的表,联接中所有表的更新都会反映在查询结果中。

支持

[{LEFT | RIGHT | FULL }] OUTER JOIN

不支持以下内容:

  • 外部联接,联接双方位于同一表。

  • 外部联接,联接双方都具有 GROUP BY 子句的子查询。

  • 带有非相等谓词的外部联接。

否则,您可以在外部联接中指定任意数量的表,联接中所有表的更新都会反映在查询结果中。

支持

ML 或 LLM 函数

不支持

支持

PIVOTUNPIVOT

不支持

不支持

SAMPLE / TABLESAMPLE

不支持

不支持

标量汇总

支持

支持

SELECT

包括使用确定性内置函数和 不可变 用户定义函数 的表达式。

支持

:doc:`/sql-reference/operators-query`(UNION、MINUS、EXCEPT、INTERSECT)

不支持

支持

序列

不支持

不支持

所有 子查询运算符

不支持

支持

UNION ALL

支持

支持

用户定义函数 (UDFs)

支持,但以下限制除外:

  • 不支持以 Python、Java、Scala 或 Javascript 编写、用于指定 VOLATILE 参数的 UDFs。

  • 不支持以 SQL 编写、包含子查询的 UDFs(例如,SELECT 语句)。

  • 当使用增量刷新的动态表使用 IMMUTABLE UDF 时,替换该函数会导致刷新失败。

  • 不支持从外部暂存区导入 UDFs。

支持

用户定义的表函数 (UDTFs)

支持,但以下限制除外:

  • 不支持以 SQL 编写的 UDTFs。

  • 从 UDTFs 读取的 SELECT 块必须明确指定列,并且不能使用 *

支持

WHERE/HAVING/QUALIFY

支持具有在 SELECT 中有效的相同表达式的筛选器。

支持具有 CURRENT_TIMESTAMP、CURRENT_TIME 和 CURRENT_DATE 函数及其别名的筛选器。

支持。

支持具有 CURRENT_TIMESTAMP、CURRENT_TIME 和 CURRENT_DATE 函数及其别名的筛选器。

窗口函数

支持,但以下限制除外:

  • 不支持同一动态表定义中有多个窗口函数,其中 PARTITION BY 子句要么不是相同的,要么出现在不同的查询块中。

  • 不支持使用带有滑动窗口框架的窗口函数 PERCENT_RANK、DENSE_RANK、RANK。

  • 不支持使用 ANY_VALUE,因为它是一个非确定性函数。

支持

WITH

支持 公用表表达式 (CTEs) 在子查询中使用支持增量刷新的功能。

不支持 WITH RECURSIVE。

支持

在增量和完全刷新模式下支持的非确定性函数

非确定性函数

增量刷新模式

完全刷新模式

ANY_VALUE

不支持

不支持

CLASSIFY_TEXT (SNOWFLAKE.CORTEX)

不支持

支持

COMPLETE (SNOWFLAKE.CORTEX)

不支持

支持

CURRENT_ACCOUNT

不支持

支持

:doc:`/sql-reference/functions/current_date`(以及别名)

支持

支持

CURRENT_REGION

不支持

支持

CURRENT_ROLE

不支持

支持

:doc:`/sql-reference/functions/current_time`(以及别名)

支持

支持

:doc:`/sql-reference/functions/current_timestamp`(以及别名)

支持

支持

依赖 CURRENT_USER 的函数。

不支持。动态表刷新由一个特殊 SYSTEM 用户作为其所有者角色。

不支持。动态表刷新由一个特殊 SYSTEM 用户作为其所有者角色。

CURRENT_WAREHOUSE

不支持

支持

DENSE_RANK

不支持

支持

EMBED_TEXT_768 (SNOWFLAKE.CORTEX)

不支持

支持

EMBED_TEXT_1024 (SNOWFLAKE.CORTEX)

不支持

支持

EXTRACT_ANSWER (SNOWFLAKE.CORTEX)

不支持

支持

FINETUNE (SNOWFLAKE.CORTEX)

不支持

支持

FIRST_VALUE

支持

支持

LAST_VALUE

支持

支持

NTH_VALUE

支持

支持

RANK

不支持

支持

ROW_NUMBER

不支持

支持

SENTIMENT (SNOWFLAKE.CORTEX)

不支持

支持

序列函数 (例如 SEQ1SEQ2

不支持

支持

TRANSLATE (SNOWFLAKE.CORTEX)

不支持

支持

VOLATILE 用户定义的函数

不支持

支持

语言: 中文