SEMANTIC_VIEW 查询
在
FROM
FROM
子句中使用
SEMANTIC_VIEW()
SEMANTIC_VIEW()
表函数查询语义视图。
语法
SELECT ... FROM SEMANTIC_VIEW(
<view_name>
{
METRICS <metric_expr> [ [ AS ] <alias> ] [ , ... ] |
FACTS <fact_expr> [ , ... ]
}
[ DIMENSIONS <dimension_expr> [ [ AS ] <alias> ] [ , ... ] ]
[ WHERE <predicate> ]
[ VARIABLES <var_name> = <value> [ , ... ] ]
)
参数说明
| 参数 | 描述 |
|---|
<view_name>
<view_name> | 语义视图名称。支持多段标识符(如 db.schema.view
db.schema.view )。 |
METRICS <metric_expr> [AS <alias>] [,...]
METRICS <metric_expr> [AS <alias>] [,...] | 指定要返回的指标。可以包含引用指标的标量表达式或同一逻辑表内维度的聚合。必须与 DIMENSIONS 或 FACTS 至少指定一个。不能与 FACTS 同时使用。 |
FACTS <fact_expr> [,...]
FACTS <fact_expr> [,...] | 指定要返回的事实。查询不会对 FACTS 进行分组。FACTS 和 DIMENSIONS 必须在同一逻辑表中。不能与 METRICS 同时使用。 |
DIMENSIONS <dimension_expr> [AS <alias>] [,...]
DIMENSIONS <dimension_expr> [AS <alias>] [,...] | 指定要返回的维度。查询按指定的维度进行分组。DIMENSIONS 可以与 METRICS 或 FACTS 任意组合使用。 |
WHERE <predicate>
WHERE <predicate> | 可选。在聚合之前过滤数据。只能引用维度、事实以及使用维度或事实的表达式。 |
VARIABLES <var_name> = <value> [,...]
VARIABLES <var_name> = <value> [,...] | 可选。覆盖语义视图中声明的变量默认值。 |
使用说明
- 至少指定 METRICS、DIMENSIONS 或 FACTS — 三者不能全部省略。
- METRICS 和 FACTS 互斥 — 不能在同一个
SEMANTIC_VIEW()
SEMANTIC_VIEW()
查询中同时使用 METRICS 和 FACTS。
- FACTS + DIMENSIONS 同表约束 — 使用 FACTS 时,所有 FACTS 和 DIMENSIONS 必须来自同一个逻辑表。
- 子句顺序 — METRICS、FACTS、DIMENSIONS 子句的顺序无关,输出列的顺序按书写顺序排列。
- WHERE 位置 — WHERE 条件放在
SEMANTIC_VIEW()
SEMANTIC_VIEW()
内部(预聚合过滤),而不是外层 SELECT 的 WHERE(后过滤)。内部 WHERE 只能引用维度。
- 通配符 — 支持
tbl.*
tbl.*
限定通配符,展开为指定逻辑表的所有维度。
- 标量表达式 — 可以在外层 SELECT 中对 METRICS 结果进行计算。
- VARIABLES — 查询时指定的变量值会覆盖 CREATE 时声明的 DEFAULT 值。
权限要求
| 权限 | 对象 | 说明 |
|---|
| 任意权限 | 语义视图 | 至少需要对语义视图拥有一个权限 |
示例
METRICS + DIMENSIONS
SELECT * FROM SEMANTIC_VIEW(
tpch_analysis
DIMENSIONS customer.customer_name
METRICS customer.customer_order_count
)
ORDER BY customer_name
LIMIT 5;
DIMENSIONS 内部 WHERE
SELECT * FROM SEMANTIC_VIEW(
tpch_analysis
DIMENSIONS region.r_name
METRICS orders.total_revenue
WHERE region.r_name = 'ASIA'
);
FACTS + DIMENSIONS(同表)
SELECT * FROM SEMANTIC_VIEW(
sv
DIMENSIONS orders.o_orderdate
FACTS orders.raw_price
WHERE orders.o_orderdate = '1996-01-02'
);
子句顺序无关
-- METRICS 在前
SELECT * FROM SEMANTIC_VIEW(
tpch_analysis
METRICS orders.total_revenue
DIMENSIONS region.r_name
);
-- DIMENSIONS 在前
SELECT * FROM SEMANTIC_VIEW(
tpch_analysis
DIMENSIONS region.r_name
METRICS orders.total_revenue
);
输出列的顺序按书写顺序排列。
限定通配符
SELECT * FROM SEMANTIC_VIEW(
sv
DIMENSIONS cust.*
METRICS orders.total_rev
)
LIMIT 5;
外层标量表达式
SELECT
region_name,
total_revenue,
total_revenue * 2 AS double_revenue
FROM SEMANTIC_VIEW(
tpch_analysis
DIMENSIONS region.r_name
METRICS orders.total_revenue
);
外层 WHERE + ORDER BY
SELECT * FROM SEMANTIC_VIEW(
tpch_analysis
DIMENSIONS region.r_name
METRICS orders.total_revenue
)
WHERE total_revenue > 80000
ORDER BY total_revenue DESC;
WITH VARIABLES
SELECT * FROM SEMANTIC_VIEW(
sv
DIMENSIONS region.r_name
METRICS orders.total_revenue
VARIABLES min_amt = 1000
);
相关命令