メインコンテンツまでスキップ

メトリクス ビューで結合を使用する

メトリクス ビューでの結合は、ファクト テーブルからディメンション テーブルへの直接結合 (スター スキーマ) と、ファクト テーブルからディメンション テーブル、さらにサブディメンション テーブルへと移動する結合の両方をサポートし、正規化されたディメンション テーブル間でのマルチホップ結合 (スノーフレーク スキーマ) を可能にします。 このページでは、メトリクス ビューの YAML 定義で結合を定義する方法について説明します。

注記

結合されたテーブルにはMAPタイプの列を含めることはできません。MAP型の列から値を展開する方法については、 「マップまたは配列からネストされた要素を展開する」を参照してください。

モデルスタースキーマ

スター スキーマでは、 sourceはファクト テーブルであり、 LEFT OUTER JOINを使用して 1 つ以上のディメンション テーブルと結合します。メトリックス ビューは、選択されたディメンションとメジャーに基づいて、特定のクエリに必要なファクト テーブルとディメンション テーブルを結合します。

ON句またはUSING句を使用して、メトリクス ビューで結合列を指定します。

  • ON : ブール式を使用して結合条件を定義します。
  • USING : 親テーブルと結合テーブルの両方で同じ名前を持つ列をリストします。第 1 レベルの結合の場合、親はメトリクス ビューのソースです。 スノーフレーク スキーマ内のネストされた結合の場合、親は直上の上流の結合になります。

結合は多対 1 の関係に従う必要があります。多対多の場合、結合されたディメンション テーブルから最初に一致する行が選択されます。

注記

YAML 1.1 パーサー (PyYAML など) は、 onoffyesnoNOなどの引用符で囲まれていない特定のキーをブール値として誤って解釈することがあります。 これにより、結合エラーが発生する可能性があります。この問題を回避するには、これらのキーを引用符で囲みます。例えば: '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. メトリクス ビューを作成します。
  2. 第 1 レベル (スター スキーマ) の結合を追加します。
  3. 他のディメンション テーブルと結合します。
  4. ビューにディメンションを追加して、ネストされたディメンションを公開します。

次の例では、TPCH データセットを使用して、スノーフレーク スキーマをモデル化する方法を示します。TPCH データセットには、Databricks ワークスペースのsamplesカタログからアクセスできます。

YAML
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