メトリック ビューでの結合は、ファクト テーブルからディメンション テーブル (スター スキーマ) への直接結合と、ファクト テーブルからディメンション テーブルへの走査、およびサブディメンション テーブルへの結合の両方をサポートし、正規化されたディメンション テーブル (スノーフレーク スキーマ) 間でのマルチホップ結合を可能にします。 このページでは、メトリック ビューの YAML 定義で結合を定義する方法について説明します。
注
結合テーブルに MAP 型の列を含めることはできません。
MAP型の列から値をアンパックする方法については、「マップまたは配列から入れ子になった要素を分解する」を参照してください。
モデル スター スキーマ
スター スキーマでは、 source はファクト テーブルであり、 LEFT OUTER JOINを使用して 1 つ以上のディメンション テーブルと結合します。 メトリック ビューは、選択したディメンションとメジャーに基づいて、特定のクエリに必要なファクト テーブルとディメンション テーブルを結合します。
ON句または USING 句を使用して、メトリック ビューで結合列を指定します。
-
ON句: ブール式を使用して結合条件を定義します。 -
USING句: 親テーブルと結合テーブルの両方で同じ名前の列を一覧表示します。 第 1 レベルの結合の場合、親はメトリック ビューのソースです。 スノーフレーク スキーマにおける入れ子結合の場合、親となる結合は直接の上流結合です。
結合は「多対一の関係」に従う必要があります。 多対多の場合、結合されたディメンション テーブルから最初に一致する行が選択されます。
注
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 以降が必要です。
スノーフレーク スキーマをモデル化する結合を定義するには:
- メトリック ビューを作成します。
- 第 1 レベル (スター スキーマ) 結合を追加します。
- 他のディメンション テーブルと結合します。
- ビューにディメンションを追加して、入れ子になったディメンションを表示します。
次の例では、TPCH データセットを使用して、スノーフレーク スキーマをモデル化する方法を示します。 TPCH データセットには、Azure Databricks ワークスペースの samples カタログからアクセスできます。
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