重要
此功能目前以公共预览版提供。
指标视图提供了一种集中方法,用于定义和管理一致、可重用和管理的核心业务指标。 本页介绍指标视图、如何定义指标视图、控制访问并在下游工具中查询它们。
什么是指标视图?
指标视图将复杂的业务逻辑抽象化为集中式定义,使组织能够定义关键绩效指标一次,并在仪表板、Genie 空间和警报等报告工具中一致地使用这些指标。 指标视图以 YAML 格式定义,并在 Unity 目录中注册。 可以使用 SQL 或目录资源管理器 UI 创建它们。 与任何其他表或视图一样,可以使用 SQL 查询指标视图。
指标视图可以建模复杂的数据关系,同时支持星形架构和雪花架构。 这样,就可以通过多个规范化维度表的级别进行联接。 例如,你可以从订单联接到产品,然后联接到类别。 此方法在规范化数据环境中支持更灵活且可缩放的指标设计。
指标视图指定一组 指标定义,这些定义包括基于数据源的 维度 和 度量值;如果使用联接逻辑,则指定多个源。 在度量视图定义中的 source
可以是视图、表或 SQL 查询。 仅视图和表支持联接。
维度是一个分类属性,用于组织和筛选数据,例如产品名称、客户类型或区域。 维度提供有效分析度量值所需的标签和分组。
度量值是汇总业务活动的值,通常使用聚合函数(例如SUM()
或AVG()
)。 度量值的定义独立于维度,允许用户在运行时按任何维度聚合度量值。 例如,定义 total_revenue
度量值可按客户、供应商或区域进行聚合。 度量通常用作报表和仪表板中的 KPI。
以下代码块演示了度量值和维度在指标视图中如何定义的示例:
version: 0.1
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')
指标视图与标准视图的比较
标准视图通常设计为回答特定业务问题。 它们通常包括创建视图时必须指定的聚合逻辑和维度分组。 当用户想要查询原始视图中不包含的维度时,这可能会导致问题。 更复杂的度量值(如比率或非重复计数)通常无法重新聚合,否则会返回不正确的结果。
指标视图 允许作者独立于用户筛选和分组数据的方式定义度量值和维度。 这种分离允许系统根据用户的选择生成正确的查询,同时保留一致的集中式指标逻辑。
示例:
假设你想要分析不同地理级别的每个不同客户的收入。 使用标准视图时,您需要为每个分组(例如按州、地区或国家/地区)创建单独的视图,或者提前使用 GROUP BY CUBE()
计算所有组合,然后进行筛选。 这些解决方法会增加复杂性,并可能导致性能和治理问题。
使用指标视图,只需定义一次指标,在查询时可以按不同维度对其进行分组。 例如, 收入之和除以独立客户数量。 然后,用户可以按任何可用的地理维度进行分组。 查询引擎在后台重写查询以执行正确的计算,而不考虑数据的分组方式。
指标视图的用例
指标视图在以下情况下非常有用:
- 你需要跨团队和工具标准化指标定义。
- 你想要披露无法安全重新聚合的指标,例如比率或独特计数。
- 你想要为业务用户启用灵活的切片和筛选,同时通过 SQL 保持透明度和治理。
此方法有助于防止不一致、减少重复,并在整个组织中处理业务指标时简化用户体验。
定义指标视图
具有 CREATE TABLE
架构特权 的用户可以创建指标视图。 必须对源对象至少拥有 SELECT
特权。 可以使用目录资源管理器 UI 中的 YAML 编辑器或使用 SQL 创建指标视图。
指标视图的 YAML 定义包括六个顶级字段:
-
version
: 默认值为0.1
. 这是指标视图规范的版本。 -
source
: 指标视图的源数据。 这可以是表状结构的资产或 SQL 查询。 -
joins
: 可选。 支持星型架构和雪花架构联接。 -
filter
: 可选。 适用于所有查询的 SQL 布尔表达式;等效于子WHERE
句。 -
dimensions
: 维度定义的数组,包括维度名称和表达式。 -
measures
: 聚合表达式列的数组。
指标视图是可组合的,允许在单个视图中构建分层的可重用逻辑。 维度可以引用以前定义的维度,度量值可以引用任何维度或以前定义的度量值。 定义新维度或度量值时,还可以引用度量视图中已定义联接的列。
以下示例说明如何使用 Azure Databricks UI 创建指标视图。 有关使用 SQL 定义指标视图的信息,请参阅 CREATE VIEW 。
有关演示如何创建指标视图的完整示例,请参阅 “创建指标”视图。
查看或编辑指标视图
具有 SELECT
指标视图特权的任何人都可以查看详细的 YAML 定义。 如果你是指标视图所有者,则可以编辑定义。 查看详细信息或编辑现有指标视图:
点击边栏中的
目录。
单击要查看的指标视图的名称。
单击 “编辑” 以打开 YAML 编辑器。
请参阅指标视图 YAML 参考。 有关使用 SQL 编辑指标视图的信息,请参阅 ALTER VIEW 。
在指标视图中联接数据源
联接既支持从事实数据表到维度表的直接联接(星型架构),也支持通过事实数据表连接到维度,然后进一步连接到次级维度,允许在规范化的维度表间进行多跳联接(雪花架构)。 仅当使用 Databricks Runtime 计算 17.1 及更高版本时,才支持 Snowflake 联接。
管理指标视图权限
指标视图是 Unity 目录安全对象,遵循与其他视图相同的权限模型。 请参阅 Unity Catalog 特权和安全对象。
查看指标视图
可以像标准视图一样查询指标视图。 从连接到 SQL 仓库或运行 Databricks Runtime 16.4 或更高版本的其他计算资源的任何 SQL 编辑器中运行查询。 指标视图查询中的所有度量值都必须使用 MEASURE
聚合函数。
有关完整详细信息和语法,请参阅 measure
聚合函数。
还可以在整个 Azure Databricks 工作区中使用指标视图。 有关详细信息,请参阅关联的文档:
局限性
以下限制条件适用于指标视图:
指标视图不支持世系。
指标视图不支持Delta Sharing。
不支持 Lakehouse Monitoring。
在查询执行时不支持 JOIN 操作。 使用 CTE 连接数据源。
不支持
SELECT *
。无法重新聚合度量值。 例如,不支持类似
SUM(MEASURE(measure_name))
表达式。 仅将聚合应用于基字段,而不是聚合度量值。联接表不能包含
MAP
类型列。在
MEASURE
表达式中不能合并开窗度量值和聚合基字段。