CREATE SEMANTIC VIEW¶
在当前/指定的架构中创建新的 语义视图。
语义视图必须符合 这些验证规则。
- 另请参阅:
DESCRIBE SEMANTIC VIEW、DROP SEMANTIC VIEW、SHOW SEMANTIC VIEWS、SHOW SEMANTIC DIMENSIONS、SHOW SEMANTIC METRICS、SHOW SEMANTIC DIMENSIONS FOR METRIC
语法¶
CREATE [ OR REPLACE ] SEMANTIC VIEW [ IF NOT EXISTS ] <name>
TABLES ( logicalTable [ , ... ] )
[ RELATIONSHIPS ( relationshipDef [ , ... ] ) ]
[ FACTS ( semanticExpression [ , ... ] ) ]
[ DIMENSIONS ( semanticExpression [ , ... ] ) ]
[ METRICS ( semanticExpression [ , ... ] ) ]
[ COMMENT = '<comment_about_semantic_view>' ]
[ COPY GRANTS ]
其中:
逻辑表的参数 为:
logicalTable ::= [ <table_alias> AS ] <table_name> [ PRIMARY KEY ( <primary_key_column_name> [ , ... ] ) ] [ UNIQUE ( <unique_column_name> [ , ... ] ) [ ... ] ] [ WITH SYNONYMS [ = ] ( '<synonym>' [ , ... ] ) ] [ COMMENT = '<comment_about_table>' ]
关系的参数 为:
relationshipDef ::= [ <relationship_identifier> AS ] <table_alias> ( <column_name> [ , ... ] ) REFERENCES <ref_table_alias> [ ( <ref_column_name> [ , ... ] ) ]
-
semanticExpression ::= <table_alias>.<dim_fact_or_metric> AS <sql_expr> [ WITH SYNONYMS [ = ] ( '<synonym>' [ , ... ] ) ] [ COMMENT = '<comment_about_dim_fact_or_metric>' ]
您可以使用以下语法定义使用窗口函数的指标(窗口函数指标):
windowFunctionMetricDefinition ::= <window_function>( <metric> ) OVER ( [ PARTITION BY { <exprs_using_dimensions_or_metrics> | EXCLUDING <dimensions> } ] [ ORDER BY <exprs_using_dimensions_or_metrics> [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ] [ <windowFrameClause> ] )
有关此语法的信息,请参阅 窗口函数指标的参数。
备注
子句的顺序很重要。例如,您必须在 FACTS 子句之前指定 DIMENSIONS 子句。
您可以引用后面子句中定义的语义表达式。例如,即使 fact_2
是在 fact_1
之后定义,您仍然可以在 fact_1
的定义中使用 fact_2
。
必填参数¶
name
指定语义视图的名称;该名称对于创建表的架构必须唯一。
此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,
"My object"
)。放在双引号内的标识符也区分大小写。有关更多信息,请参阅 标识符要求。
可选参数¶
COMMENT = 'comment_about_semantic_view'
指定有关语义视图的注释。
COPY GRANTS
当您指定 OR REPLACE 用新的语义视图替换现有语义视图时,您可以设置此参数,将授予的现有语义视图的任何权限复制到新的语义视图。
该命令将现有语义视图 之外 OWNERSHIP 的所有权限授权复制到新的语义视图。默认情况下,执行 CREATE SEMANTIC VIEW 语句的角色拥有新视图。
新语义视图 不会 继承为架构中对象类型定义的任何未来授权。
复制授权的操作在 CREATE SEMANTIC VIEW 语句中(换句话说,在同一事务中)自动发生。
如果您省略 COPYGRANTS,则新的语义视图 不会 继承对现有语义视图授予的任何显式访问权限,但会继承为架构中对象类型定义的任何未来授权。
逻辑表的参数¶
这些参数是 逻辑表语法的 一部分:
table_alias AS
为逻辑表指定可选别名。
如果您指定别名,则在关系、事实、维度和指标中引用逻辑表时必须使用此别名。
如果未指定别名,则使用非限定逻辑表名来引用该表。
table_name
指定逻辑表的名称。
PRIMARY KEY ( primary_key_column_name [ , ... ] )
指定逻辑表中用作表主键的一列或多列的名称。
UNIQUE ( unique_column_name [ , ... ] )
指定包含唯一值的列的名称或包含唯一值组合的列的名称。
例如,如果列
service_id
包含唯一值,请指定:TABLES( ... product_table UNIQUE (service_id)
如果
product_area_id
和product_id
列中的值组合唯一,请指定:TABLES( ... product_table UNIQUE (product_area_id, product_id) ...
您可以在给定逻辑表中将多个列和多个列组合标识为唯一:
TABLES( ... product_table UNIQUE (product_area_id, product_id) UNIQUE (service_id) ...
备注
如果您已经将某列标识为主键列(使用 PRIMARYKEY),请不要为该列添加 UNIQUE 子句。
WITH SYNONYMS [ = ] ( 'synonym' [ , ... ] )
为逻辑表指定一个或多个同义词。与别名不同,同义词仅用于提供信息。不要使用同义词来引用关系、维度、指标和事实中的逻辑表。
COMMENT = 'comment_about_table'
指定有关逻辑表的注释。
关系的参数¶
这些参数是 关系语法的 一部分:
relationship_identifier AS
为关系指定可选标识符。
table_alias ( column_name [ , ... ] )
指定引用另一个逻辑表中列的一个逻辑表及其一个或多个列。
ref_table_alias [ ( ref_column_name [ , ... ] ) ]
指定第一个逻辑表所引用的另一个逻辑表及其一个或多个列。
在 逻辑表定义 中,这些列必须标识为 PRIMARY KEY 或 UNIQUE。
事实、维度和指标的参数¶
在语义视图中,您必须定义至少一个维度或指标,这意味着您必须至少指定一个 DIMENSIONS 或 METRICS 子句。
这些参数是 定义事实、维度或指标的语法 的一部分:
table_alias.semantic_expression_name AS sql_expr
指定维度、事实或指标的名称,以及用于计算该维度、事实或指标的 SQL 表达式。
有关定义有效语义视图的规则,请参阅 Snowflake 如何验证语义视图。
WITH SYNONYMS [ = ] ( 'synonym' [ , ... ] )
为维度、事实或指标指定一个或多个可选同义词。请注意,同义词仅用于提供信息。您不能使用同义词来引用另一个维度、事实或指标中的维度、事实或指标。
COMMENT = 'comment_about_dim_fact_or_metric'
指定有关维度、事实或指标的可选注释。
窗口函数指标的参数¶
这些参数是 定义窗口函数指标的语法 的一部分:
metric
为该窗口函数指定指标表达式。您可以指定指标或任何有效的指标表达式,用于在该实体中定义指标。
PARTITION BY ...
将行分组为分区。您可以按一组指定的表达式进行分区,也可以按查询中指定的所有维度(选定维度除外)进行分区:
PARTITION BY exprs_using_dimensions_or_metrics
按 SQL 表达式将行分组。在 SQL 表达式中:
表达式中的任何维度都必须可以通过定义窗口函数指标的同一个实体来访问。
任何指标都必须属于定义该指标的同一个表。
您无法指定汇总、窗口函数或子查询。
PARTITION BY EXCLUDING dimensions
按查询的 SEMANTIC_VIEW 子句中指定的所有维度将行分成分区,由
dimensions
指定的维度除外。dimensions
必须仅引用可从定义窗口函数指标的实体访问的维度。例如,假设您将维度
table_1.dimension_1
排除在分区之外:CREATE SEMANTIC VIEW sv ... METRICS ( table_1.metric_2 AS SUM(table_1.metric_1) OVER (PARTITION BY EXCLUDING table_l.dimension_1 ORDER BY table_1.dimension_2) ) ...
假设您运行了指定维度
table_1.dimension_1
的查询:SELECT * FROM SEMANTIC VIEW( sv METRICS ( table_1.metric_2 ) DIMENSIONS ( table_1.dimension_1, table_1.dimension_2, table_1.dimension_3 );
在查询中,指标
table_1.metric_2
的评估结果为:SUM(table_1.metric_1) OVER ( PARTITION BY table_1.dimension_2, table_1.dimension_3 ORDER BY table_1.dimension_2 )
注意如何将
table_1.dimension_1
从 PARTITION BY 子句中排除。备注
在语义视图中,您不能在指标定义之外使用 EXCLUDING。EXCLUDING 在任何其他上下文的窗口函数调用中都不受支持。
ORDER BY exprs_using_dimensions_or_metrics [ ASC | DESC ] [ NULLS FIRST | LAST ] [, ... ]
对每个分区内的行进行排序。在 SQL 表达式中:
表达式中的任何维度都必须可以通过定义窗口函数指标的同一个实体来访问。
任何指标都必须属于定义该指标的同一个表。
您无法指定汇总、窗口函数或子查询。
windowFrameClause
请参阅 窗口函数的语法和用法。
有关窗口函数参数和示例的更多信息,请参阅 定义和查询窗口函数指标。
访问控制要求¶
权限 |
对象 |
备注 |
---|---|---|
CREATE SEMANTIC VIEW |
架构 |
创建新的语义视图时需要。 |
SELECT |
表、视图 |
语义视图定义中使用的任何表和/或视图都需要。 |
要对架构中的任何对象执行操作,需要对父数据库和架构具有 USAGE 权限。
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
使用说明¶
语义视图必须有效且必须遵循 Snowflake 如何验证语义视图 中描述的规则。
关于元数据:
注意
客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段。
CREATE OR REPLACE <object> 语句是原子的。也就是说,当对象被替换时,旧对象将被删除,新对象将在单个事务中创建。
示例¶
请参阅 创建语义视图。