Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
指标视图中的联接支持从事实数据表到维度表(星型架构)的直接联接,以及从事实数据表遍历到维度表的联接,再到细分表,从而允许跨规范化维度表(雪花架构)进行多跃点联接。 本页介绍如何在指标视图的 YAML 定义中定义联接。
模型星型架构
在星型架构中,source
是事实数据表,并使用LEFT OUTER JOIN
与一个或多个维度表连接。 指标视图根据所选维度和度量值联接特定查询所需的事实和维度表。
使用 ON
子句或 USING
子句在指标视图中指定联接列。
-
ON
子句:使用布尔表达式定义联接条件。 -
USING
子句:列出父表和联接表中名称相同的列。 对于第一级联接,父级是指标视图的源。 对于雪花架构中的嵌套联接,父级是直接的上游联接。
联接应遵循多对一关系。 在多对多关系的情况下,从联接维度表中选择第一个匹配的行。
注释
YAML 1.1 解析器(如 PyYAML)可能会错误地将某些未加引号的键(例如 on
、off
、yes
、no
或 NO
)解释为布尔值。 这可能会导致联接错误。若要避免此问题,请将这些密钥包装在引号中。 例如:'on': source.dim_fk = dim.pk
source: catalog.schema.fact_table
joins:
# The on clause supports a boolean expression
- name: dimension_table_1
source: catalog.schema.dimension_table_1
on: source.dimension_table_1_fk = dimension_table_1.pk
# The using clause supports an array of columns
# found in both of the tables being joined.
- name: dimension_table_2
source: catalog.schema.dimension_table_2
using:
- dimension_table_2_key_a
- dimension_table_2_key_b
dimensions:
# Dimension referencing a join column from dimension_table_1 using dot notation
- name: Dimension table 1 key
expr: dimension_table_1.pk
measures:
# Measure referencing a join column from dimension_table_1
- name: Count of dimension table 1 keys
expr: COUNT(dimension_table_1.pk)
注释
命名空间 source
引用指标视图源中的列,而联接 name
引用联接表中的列。 例如,在联接条件 source.dimension_table_1_fk = dimension_table_1.pk
中, source
引用指标视图的源表(fact_table
),并 dimension_table_1
引用联接表。 如果在on
子句中没有提供前缀,则引用默认为联接表。
模型雪花架构
雪花架构通过标准化维度表并将其连接到子维度来扩展星型架构。 这会创建一个多级联接结构,该结构可以匹配数据模型的深度。
注释
Snowflake 联接需要 Databricks Runtime 计算引擎 17.1 及更高版本。
定义建模雪花架构的联接:
创建指标视图。
添加第一级(星型架构)联接。
与其他维度表联接。
通过在视图中添加维度来显现出嵌套维度。
以下示例使用 TPCH 数据集来说明如何建模雪花型模式。 可以在 Azure Databricks 工作区的目录中访问 samples
TPCH 数据集。
source: samples.tpch.orders
joins:
- name: customer
source: samples.tpch.customer
on: source.o_custkey = customer.c_custkey
joins:
- name: nation
source: samples.tpch.nation
on: customer.c_nationkey = nation.n_nationkey
joins:
- name: region
source: samples.tpch.region
on: nation.n_regionkey = region.r_regionkey
dimensions:
- name: clerk
expr: o_clerk
- name: customer
expr: customer # returns the full customer row as a struct
- name: customer_name
expr: customer.c_name
- name: nation
expr: customer.nation
- name: nation_name
expr: customer.nation.n_name