使用 SQL 创建和管理指标视图

本页介绍如何使用 SQL 创建和管理指标视图。

先决条件

  • 你必须对源数据对象具有 SELECT 特权。
  • 必须在要在其中创建指标视图的架构中拥有 CREATE TABLE 特权USE SCHEMA 特权
  • 还必须对架构的父目录具有 USE CATALOG 特权
  • 可以对运行 Databricks Runtime 17.2 或更高版本的 SQL 仓库或其他计算资源拥有使用权限。

元存储管理员或目录所有者可以授予所有这些权限。 具有 MANAGE 权限的架构所有者或用户可以在架构上授予您 USE SCHEMACREATE 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 创建指标视图后,请浏览以下相关主题:

查询和使用指标视图

高级指标视图功能

替代创建方法

治理和安全性