- 类别:
SEMANTIC_VIEW¶
指定要 查询 的 语义视图。您在 SELECT 语句的 FROM 子句中指定 SEMANTIC_VIEW(...)。
语法¶
SEMANTIC_VIEW(
[<namespace>.]<semantic_view_name>
[
{
METRICS <metric> [ , ... ] |
FACTS <fact_expr> [ , ... ]
}
]
[ DIMENSIONS <dimension_expr> [ , ... ] ]
[ WHERE <predicate> ]
)
参数¶
[namespace.]semantic_view_name
指定要查询的语义视图的标识符。
如果标识符包含空格或特殊字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。
有关更多信息,请参阅 标识符要求。
METRICS metric [ , ... ]
指定要在结果中返回的指标。
备注
您不能指定使用指标的表达式。例如,您不能指定
t1.metric_1 + 1
。对于指标的名称:
您可以限定指标的名称(例如,
my_logical_table.my_metric
)。仅当语义视图中没有其他具有相同非限定名称的标识符时,使用非限定名称才有效。例如,如果指标和维度使用相同的非限定名称,则必须在查询中限定该指标的名称。
要指定逻辑表中的所有指标,请使用由逻辑表名称(例如,
my_logical_table.*
)限定的星号作为通配符。您不能指定未使用表名限定的星号。
按照指标应在结果中显示的顺序指定指标。
FACTS fact_expr [ , ... ]
指定要在结果中返回的事实。您还可以指定标量表达式,引用语义视图中的事实或维度。如果指定标量表达式,则该表达式中的维度和事实必须属于同一个逻辑表。
与 DIMENSIONS 子句中指定的维度不同,查询不对 FACTS 子句中指定的事实进行分组。不同的行可以包含相同的事实值。
按照事实应在结果中显示的顺序指定事实。
DIMENSIONS dimension_expr [ , ... ]
指定要在结果中返回的维度。您还可以指定标量表达式,引用语义视图中的维度或事实。如果指定标量表达式,则该表达式中的维度和事实必须属于同一个逻辑表。
查询按您在此处指定的维度对结果进行分组。例如,如果逻辑表包含一个维度的五个不同值,则在 DIMENSIONS 子句中指定该维度将返回五行。
对于维度的名称:
您可以限定维度的名称(例如,
my_logical_table.my_dimension
)。仅当语义视图中没有其他具有相同非限定名称的标识符时,使用非限定名称才有效。例如,如果指标和维度使用相同的非限定名称,则必须在查询中限定该维度的名称。要指定逻辑表中的所有维度,请使用由逻辑表名称(例如,
my_logical_table.*
)限定的星号作为通配符。您不能指定未使用表名限定的星号。
如果您指定标量表达式,则无法在其他语义视图或指标中引用维度。
按照维度应在结果中显示的顺序指定指标。
备注
如果要返回窗口函数指标,则还必须返回在该语义视图 CREATE SEMANTIC VIEW 语句中的 PARTITION BY
dimension
、PARTITION BY EXCLUDINGdimension
和 ORDER BYdimension
子句中指定的维度。请参阅 定义和查询窗口函数指标。
WHERE predicate
布尔表达式。该表达式可以包含 逻辑运算符、内置函数 和 用户定义的函数 (UDFs)。
在此条件下,您只能引用维度、事实或使用维度和事实的表达式。
如果您指定来自不同实体的事实,则语义视图定义中的 RELATIONSHIPS 子句必须定义这些实体之间的关系。
此筛选条件在计算指标之前应用。
使用说明¶
在 SEMANTIC_VIEW 子句中,必须至少指定以下子句之一:
METRICS
DIMENSIONS
FACTS
您不能在 SEMANTIC_VIEW 子句中省略所有这些子句。
在指定这些子句的组合时,请注意以下几点:
您不能在同一个 SEMANTIC_VIEW 子句中指定 FACTS 和 METRICS。
尽管可以在查询中同时指定 FACTS 和 DIMENSIONS,但只有当维度可以唯一地确定事实时才应这样做。
查询按维度对结果进行分组。如果事实不依赖于维度,则结果可能是不确定的。
如果同时指定 FACTS 和 DIMENSIONS,则查询中使用的所有事实和维度(包括 WHERE 子句中指定的事实和维度)都必须在同一个逻辑表中定义。
如果您指定一个维度和一个指标,则该维度的逻辑表必须与该指标的逻辑表相关。
此外,维度的逻辑表粒度必须等于或低于指标的逻辑表。
要确定哪些维度符合此标准,可以运行 SHOW SEMANTIC DIMENSIONS FOR METRIC 命令。
有关详细信息,请参阅 为给定指标选择可以返回的维度。
在 DIMENSIONS 子句中,您可以指定一个引用事实的表达式。同样,在 FACTS 子句中,您可以指定一个引用维度的表达式。例如:
-- Dimension expression that refers to a fact DIMENSIONS my_table.my_fact -- Fact expression that refers to a dimension FACTS my_table.my_dimension
使用 DIMENSIONS 和 FACTS 的主要区别之一是,查询按 DIMENSIONS 子句中指定的维度和表达式对结果进行分组。
按照您希望 METRICS、DIMENSIONS 和 FACTS 子句在结果中显示的顺序指定它们。
如果希望维度先在结果中显示,请在 METRICS 前面指定 DIMENSIONS。否则,请先指定 METRICS。
例如,假设您先指定 METRICS 子句:
SELECT * FROM SEMANTIC_VIEW( tpch_analysis METRICS customer.customer_order_count DIMENSIONS customer.customer_name ) ORDER BY customer_name LIMIT 5;
在输出中,第一列是指标列 (
customer_order_count
),第二列是维度列 (customer_name
):+----------------------+--------------------+ | CUSTOMER_ORDER_COUNT | CUSTOMER_NAME | |----------------------+--------------------| | 6 | Customer#000000001 | | 7 | Customer#000000002 | | 0 | Customer#000000003 | | 20 | Customer#000000004 | | 4 | Customer#000000005 | +----------------------+--------------------+
如果您改为先指定 DIMENSIONS 子句:
SELECT * FROM SEMANTIC_VIEW( tpch_analysis DIMENSIONS customer.customer_name METRICS customer.customer_order_count ) ORDER BY customer_name LIMIT 5;
在输出中,第一列是维度列 (
customer_name
),第二列是指标列 (customer_order_count
):+--------------------+----------------------+ | CUSTOMER_NAME | CUSTOMER_ORDER_COUNT | |--------------------+----------------------| | Customer#000000001 | 6 | | Customer#000000002 | 7 | | Customer#000000003 | 0 | | Customer#000000004 | 20 | | Customer#000000005 | 4 | +--------------------+----------------------+
您可以在其他 SQL 结构中使用由 SEMANTIC_VIEW 子句定义的关系,包括 JOIN、PIVOT、UNPIVOT、GROUP BY 和 公用表表达式 (CTEs)。
输出列标题使用指标和维度的非限定名称。
如果您有多个具有相同名称的指标和维度,请使用表别名为列标题分配不同的名称。请参阅 处理输出中重复的列名称。
示例¶
请参阅 查询语义视图。