本页介绍如何使用 SQL 创建和管理指标视图。
先决条件
- 你必须对源数据对象具有
SELECT特权。 - 必须在要在其中创建指标视图的架构中拥有
CREATE TABLE特权 和USE SCHEMA特权 。 - 还必须对架构的父目录具有
USE CATALOG特权 。 - 可以对运行 Databricks Runtime 17.2 或更高版本的 SQL 仓库或其他计算资源拥有使用权限。
元存储管理员或目录所有者可以授予所有这些权限。 具有 MANAGE 权限的架构所有者或用户可以在架构上授予您 USE SCHEMA 和 CREATE TABLE 权限。
创建指标视图
与 CREATE VIEW 子句一起使用 WITH METRICS 以创建指标视图。 必须在正文中使用有效的 YAML 规范定义指标视图。 指标视图的源数据可以是表、视图或 SQL 查询。
以下指标视图的源数据是一个表,该表可在大多数 Azure Databricks 部署的样本目录中找到。 以下 SQL DDL 创建一个在当前目录和架构中命名 orders_metric_view 的指标视图。 若要指定不同的目录和架构,请使用 Unity 目录三级命名空间。
可以将表级和列级注释添加到指标视图定义。
CREATE OR REPLACE VIEW orders_metric_view
WITH METRICS
LANGUAGE YAML
AS $$
version: 1.1
comment: "Orders KPIs for sales and financial analysis"
source: samples.tpch.orders
filter: o_orderdate > '1990-01-01'
dimensions:
- name: Order Month
expr: DATE_TRUNC('MONTH', o_orderdate)
- name: Order Status
expr: CASE
WHEN o_orderstatus = 'O' then 'Open'
WHEN o_orderstatus = 'P' then 'Processing'
WHEN o_orderstatus = 'F' then 'Fulfilled'
END
- name: Order Priority
expr: SPLIT(o_orderpriority, '-')[1]
measures:
- name: Order Count
expr: COUNT(1)
- name: Total Revenue
expr: SUM(o_totalprice)
- name: Total Revenue per Customer
expr: SUM(o_totalprice) / COUNT(DISTINCT o_custkey)
- name: Total Revenue for Open Orders
expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus='O')
$$
更改指标视图
若要更改与指标视图关联的定义,请使用 ALTER VIEW。 以下示例将在 orders_metric_view 度量视图中为维度和度量添加注释。
ALTER VIEW orders_metric_view
AS $$
version: 1.1
comment: "Orders KPIs for sales and financial analysis"
source: samples.tpch.orders
filter: o_orderdate > '1990-01-01'
dimensions:
- name: Order Month
expr: DATE_TRUNC('MONTH', o_orderdate)
comment: "Month of order"
- name: Order Status
expr: CASE
WHEN o_orderstatus = 'O' then 'Open'
WHEN o_orderstatus = 'P' then 'Processing'
WHEN o_orderstatus = 'F' then 'Fulfilled'
END
comment: "Status of order: open, processing, or fulfilled"
- name: Order Priority
expr: SPLIT(o_orderpriority, '-')[1]
comment: "Numeric priority 1 through 5; 1 is highest"
measures:
- name: Order Count
expr: COUNT(1)
- name: Total Revenue
expr: SUM(o_totalprice)
comment: "Sum of total price"
- name: Total Revenue per Customer
expr: SUM(o_totalprice) / COUNT(DISTINCT o_custkey)
comment: "Sum of total price by customer"
- name: Total Revenue for Open Orders
expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus='O')
comment: "Potential revenue from open orders"
$$
授予对指标视图的权限
指标视图是 Unity 目录安全对象,遵循与其他视图相同的权限模型。 特权是分层的,因此元数据存储、数据目录或架构上的特权逐级影响其所包含的对象。 以下示例授予 data_consumers 组中的用户查询度量视图所需的最低权限。
GRANT SELECT ON orders_metric_view to `data-consumers`;
若要详细了解 Unity 目录中的特权,请参阅 “管理 Unity 目录中的权限”。 若要详细了解如何创建和管理组,请参阅 “组”。
获取指标视图定义
使用 DESCRIBE TABLE EXTENDED 和可选的 AS JSON 参数来查看指标视图的定义。
AS JSON 参数是可选的。 省略它为人类读者提供了更好的输出,同时包括它更适合机器使用者。 以下示例返回描述指标视图及其组件的 JSON 字符串。
DESCRIBE TABLE EXTENDED orders_metric_view AS JSON
删除指标视图
使用 DROP VIEW 语法删除指标视图。
DROP VIEW orders_metric_view;
后续步骤
使用 SQL 创建指标视图后,请浏览以下相关主题: