类别:

查询语法

SEMANTIC_VIEW

指定要 查询语义视图。您在 SELECT 语句的 FROM 子句中指定 SEMANTIC_VIEW(...)。

另请参阅:

FROM查询语义视图

语法

SEMANTIC_VIEW(
  [<namespace>.]<semantic_view_name>
  [
    {
      METRICS <metric> [ , ... ] |
      FACTS <fact_expr>  [ , ... ]
    }
  ]
  [ DIMENSIONS <dimension_expr>  [ , ... ] ]
  [ WHERE <predicate> ]
)
Copy

参数

[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 EXCLUDING dimension 和 ORDER BY dimension 子句中指定的维度。

请参阅 定义和查询窗口函数指标

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
    
    Copy

    使用 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;
    
    Copy

    在输出中,第一列是指标列 (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;
    
    Copy

    在输出中,第一列是维度列 (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 子句定义的关系,包括 JOINPIVOTUNPIVOTGROUP BY公用表表达式 (CTEs)

  • 输出列标题使用指标和维度的非限定名称。

    如果您有多个具有相同名称的指标和维度,请使用表别名为列标题分配不同的名称。请参阅 处理输出中重复的列名称

示例

请参阅 查询语义视图

语言: 中文