次の方法で共有


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

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

結合テーブルに MAP 型の列を含めることはできません。 MAP型の列から値をアンパックする方法については、「マップまたは配列から入れ子になった要素を分解する」を参照してください。

モデル スター スキーマ

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

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

  • ON: ブール式を使用して結合条件を定義します。
  • USING: 親テーブルと結合テーブルの両方で同じ名前の列を一覧表示します。 第 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 データセットには、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