支持的动态表查询¶
动态表支持标准 SQL 表达式和 Snowflake 支持的函数,包括数学运算、字符串函数、日期函数等。本主题介绍动态表在增量和完全刷新模式下支持的表达式、构造、函数、运算符和子句。
如果查询使用增量刷新不支持的表达式、关键字、运算符或子句,则自动刷新流程将改为使用完全刷新,这可能会产生额外费用。
支持的数据类型¶
动态表支持所有 Snowflake SQL 数据类型,用于增量和完全刷新,但以下类型除外:
结构化数据类型。
地理空间数据类型(仅完全刷新)。
增量和完全刷新模式下支持的查询¶
关键字 |
增量刷新模式 |
完全刷新模式 |
---|---|---|
支持 |
支持 |
|
不支持 |
不支持 |
|
源表、视图、Snowflake 管理的 Apache Iceberg™ 表和其他动态表。 不支持 FROM 子句(例如 WHERE EXISTS)外部的子查询。 |
支持 |
|
支持 |
支持 |
|
支持。您可以在联接中指定任意数量的表,联接中所有表的更新都会反映在查询结果中。 |
支持 |
|
支持。您可以在联接中指定任意数量的表,联接中所有表的更新都会反映在查询结果中。 |
支持 |
|
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" } ] } ] }');
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;
使用横向展平和增量刷新时,请注意以下行为:
|
支持。 |
OUTER-EQUI JOIN。 |
支持。您可以在联接中指定任意数量的表,联接中所有表的更新都会反映在查询结果中。 |
支持 |
[{LEFT | RIGHT | FULL }] OUTER JOIN |
不支持以下内容:
否则,您可以在外部联接中指定任意数量的表,联接中所有表的更新都会反映在查询结果中。 |
支持 |
Supported in the SELECT clause. |
支持 |
|
不支持 |
不支持 |
|
不支持 |
不支持 |
|
标量汇总 |
支持 |
支持 |
支持 |
||
:doc:`/sql-reference/operators-query`(UNION、MINUS、EXCEPT、INTERSECT) |
不支持,但 UNION 除外。在增量刷新中,UNION 集合运算符的工作原理类似于 UNION ALL 和 SELECT DISTINCT 运算符的组合。 |
支持 |
序列。 |
不支持 |
不支持 |
所有 子查询运算符。 |
不支持 |
支持 |
支持 |
支持 |
|
用户定义函数 (UDFs) |
支持,但以下限制除外: |
支持 |
用户定义的表函数 (UDTFs) |
支持,但以下限制除外:
|
支持 |
支持具有在 SELECT 中有效的相同表达式的筛选器。 支持具有 CURRENT_TIMESTAMP、CURRENT_TIME 和 CURRENT_DATE 函数及其别名的筛选器。 |
支持。 支持具有 CURRENT_TIMESTAMP、CURRENT_TIME 和 CURRENT_DATE 函数及其别名的筛选器。 |
|
支持,但以下限制除外:
|
支持 |
|
支持 公用表表达式 (CTEs) 在子查询中使用支持增量刷新的功能。 不支持 WITH RECURSIVE。 |
支持 |
在增量和完全刷新模式下支持的非确定性函数¶
非确定性函数 |
增量刷新模式 |
完全刷新模式 |
---|---|---|
不支持 |
不支持 |
|
Supported in the SELECT clause |
支持 |
|
Supported in the SELECT clause |
支持 |
|
不支持 |
支持 |
|
:doc:`/sql-reference/functions/current_date`(以及别名) |
仅支持作为 WHERE/HAVING/QUALIFY 子句的一部分。 |
仅支持作为 WHERE/HAVING/QUALIFY 子句的一部分。 |
不支持 |
支持 |
|
不支持 |
支持 |
|
:doc:`/sql-reference/functions/current_time`(以及别名) |
仅支持作为 WHERE/HAVING/QUALIFY 子句的一部分。 |
仅支持作为 WHERE/HAVING/QUALIFY 子句的一部分。 |
:doc:`/sql-reference/functions/current_timestamp`(以及别名) |
仅支持作为 WHERE/HAVING/QUALIFY 子句的一部分。 |
仅支持作为 WHERE/HAVING/QUALIFY 子句的一部分。 |
依赖 CURRENT_USER 的函数。 |
不支持。动态表刷新由一个特殊 SYSTEM 用户作为其所有者角色。 |
不支持。动态表刷新由一个特殊 SYSTEM 用户作为其所有者角色。 |
不支持 |
支持 |
|
支持 |
支持 |
|
Supported in the SELECT clause |
支持 |
|
Supported in the SELECT clause |
支持 |
|
Supported in the SELECT clause |
支持 |
|
Supported in the SELECT clause |
支持 |
|
支持 |
支持 |
|
支持 |
支持 |
|
支持 |
支持 |
|
支持 |
支持 |
|
支持 |
支持 |
|
Supported in the SELECT clause |
支持 |
|
序列函数 (例如 |
不支持 |
支持 |
Supported in the SELECT clause |
支持 |
|
VOLATILE 用户定义的函数 |
不支持 |
支持 |
Supported Snowflake Cortex AISQL functions¶
You can use Snowflake Cortex AISQL(包括 LLM 功能) in the SELECT clause for dynamic tables in incremental refresh mode. The same availability restrictions as described in AISQL 函数 apply.
Cortex AISQL lets you add AI-powered insights directly to your dynamic tables, automatically analyzing data as it updates. For example, it can classify customer reviews, support tickets, or survey responses as positive/negative or assign categories.
In the following example, review_sentiment
uses AI_FILTER to evaluate each review with an LLM. Cortex AISQL combines
the prompt The reviewer enjoyed the restaurant
with the actual review text. The output column enjoyed
is the classification
generated using Cortex AISQL based on the prompt, indicating whether the reviewer enjoyed the restaurant.
CREATE OR REPLACE TABLE reviews AS
SELECT 'Wow... Loved this place.' AS review
UNION ALL
SELECT 'The pizza is not good.' AS review;
CREATE OR REPLACE DYNAMIC TABLE review_sentiment
TARGET_LAG = DOWNSTREAM
WAREHOUSE = mywh
REFRESH_MODE = INCREMENTAL
AS
SELECT review, AI_FILTER(CONCAT('The reviewer enjoyed the restaurant', review), {'model': 'llama3.1-70b'}) AS enjoyed FROM reviews;