dbt 语义模型提供语言描述方式快速定义业务指标。本文介绍语义模型作用和意义,以及语义模型的组成部分,后面会继续介绍如何定义语义模型,基于语义模型定义指标,如何通过MetricFlow(语义层框架)能够构建用于定义度量的查询。为了减轻阅读压力,我们拆分为几篇短文,结合实际案例,让你轻松掌握dbt语义模型及指标应用。
dbt语义层介绍
在数据分析中,语义层起着关键作用,充当原始数据和有意义的见解之间的桥梁。这种逻辑抽象是一种决定性的翻译,它简化了复杂的数据结构,并促进了整个组织对数据的共同理解。这样做可以将复杂的数据库设置转换为用户友好的语言,使从数据分析师到业务领导者的各种受众都可以轻松访问和理解数据。除了简化之外,语义层还提供数据完整性和可靠性,保证数据是可理解和可信的。
dbt语义层的本质区别于传统的语义层。在许多语义层中,用户通过显式指定左键和右键来描述数据中的连接。然而,dbt语义层规范通过引入实体采用了一种独特的方法。这些实体使我们能够在语义层内自动推断数据连接,即语义图之间的边(关系)。
例如,考虑一个以customer_id为主键的客户表和一个以customer_id实体为外键的订单表——这可以形成一个关系,或者更准确地说,在我们的数据图中形成一条边。这种创新大大减少了人工逻辑维护的需要,因为图的节点通常比边少。
这种方法的优点在于它的简单和高效。它以一种异常DRY的方式封装语义逻辑,促进更广泛的度量和维度组合,并产生更简洁的SQL。这些优势使数据团队更容易监督、开发和利用他们的数据模型。
dbt语义层组件
dbt语义层的核心是两个基本组件:语义模型和指标。
语义模型
语义模型是基本的构建块,包括三个:创建度量的实体、维度和度量。定义好语义模型,就可以基于语义模型定义指标。这些组件使MetricFlow(语义层框架)能够构建指标的查询及应用。
- 实体
实体是指在特定上下文中独立的、可识别的对象。在数据库语言中,实体通常对应于表,作为我们数据收集工作的核心主题。实体表示业务中真实世界的概念,例如包含客户或订单。在我们的语义模型中,实体使用ID列表示,ID列作为连接键,用于连接语义图中的其他语义模型。
实体在帮助语义引擎理解表或数据集之间的关系方面是必不可少的。这使引擎能够理解数据是如何相互连接的,确保当查询涉及特定实体时,引擎知道在哪里检索相关信息。
- 维度
另一方面,维度通过作为分类属性为度量提供上下文,允许在分析过程中以不同的方式对数据进行分解。维度通常描述与模型中其他元素相关联的特征。
维度被配置为使用户能够从不同的角度探索和分析数据。语义引擎利用这些维度根据用户偏好定制查询。
- 度量
最后,测量是可量化的数据点,是分析的主要焦点,代表我们打算检查的指标。度量通常需要聚合,在许多情况下,BI工具的一个基本角色是跨不同维度聚合这些度量。度量的定义确保计算在所有查询和报告中保持一致性,消除任何语义歧义。
指标
指标是我们用来衡量和分析数据的工具。它们在语义模型之上运行,支持创建基于可重用组件的复杂而精细的定义。如前所述,语义层依赖于三个基本概念来创建指标:实体、维度和度量。
已经创建了语义模型,就该开始添加度量了。可以在与语义模型相同的YAML文件中定义度量,也可以将度量拆分为单独的YAML文件,放入任何其他子目录中(前提是这些子目录也位于相同的dbt项目repo中)。
指标包括四个属性:
name:
指标名称,如:收入指标description:
用于生成文档,指标的描述信息.label:
用于在下游工具中显示指标的名称.type:
可以为simple
,ratio
, 或derived
.
总结
本文介绍dbt语义层组件及其关系,后续接着介绍每个组件及相关定义规范,以及如何基于MetricFlow实现指标查询及应用。