类别:

查询语法

SEMANTIC_VIEW

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

备注

You can't query private facts or metrics or use them in the WHERE condition.

另请参阅:

FROM查询语义视图

语法

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

参数

[namespace.]semantic_view_name

指定要查询的语义视图的标识符。

如果标识符包含空格或特殊字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。

有关更多信息,请参阅 标识符要求

METRICS metric [ [ AS ] alias ] [ , ... ]

指定要在结果中返回的指标。

备注

  • 您不能指定使用指标的表达式。例如,您不能指定 t1.metric_1 + 1

  • You can't specify private metrics.

对于指标的名称:

  • 您可以限定指标的名称(例如,my_logical_table.my_metric)。

    仅当语义视图中没有其他具有相同非限定名称的标识符时,使用非限定名称才有效。例如,如果指标和维度使用相同的非限定名称,则必须在查询中限定该指标的名称。

  • 要指定逻辑表中的所有指标,请使用由逻辑表名称(例如,my_logical_table.*)限定的星号作为通配符。

    您不能指定未使用表名限定的星号。

You can specify an alias for a metric after the name of the metric. You can use the optional AS keyword before the alias.

按照指标应在结果中显示的顺序指定指标。

FACTS fact_expr [ , ... ]

指定要在结果中返回的事实。您还可以指定标量表达式,引用语义视图中的事实或维度。如果指定标量表达式,则该表达式中的维度和事实必须属于同一个逻辑表。

备注

You can't specify private facts.

与 DIMENSIONS 子句中指定的维度不同,查询不对 FACTS 子句中指定的事实进行分组。不同的行可以包含相同的事实值。

按照事实应在结果中显示的顺序指定事实。

DIMENSIONS dimension_expr [ [ AS ] alias ] [ , ... ]

指定要在结果中返回的维度。您还可以指定标量表达式,引用语义视图中的维度或事实。如果指定标量表达式,则该表达式中的维度和事实必须属于同一个逻辑表。

查询按您在此处指定的维度对结果进行分组。例如,如果逻辑表包含一个维度的五个不同值,则在 DIMENSIONS 子句中指定该维度将返回五行。

对于维度的名称:

  • 您可以限定维度的名称(例如,my_logical_table.my_dimension)。仅当语义视图中没有其他具有相同非限定名称的标识符时,使用非限定名称才有效。例如,如果指标和维度使用相同的非限定名称,则必须在查询中限定该维度的名称。

  • 要指定逻辑表中的所有维度,请使用由逻辑表名称(例如,my_logical_table.*)限定的星号作为通配符。

    您不能指定未使用表名限定的星号。

You can specify an alias for a dimension after the expression for the dimension. You can use the optional AS keyword before the alias.

如果您指定标量表达式,则无法在其他语义视图或指标中引用维度。

按照维度应在结果中显示的顺序指定指标。

备注

如果要返回窗口函数指标,则还必须返回在该语义视图 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)

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

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

示例

请参阅 查询语义视图

语言: 中文