メトリクスビューでの結合の使用
メトリクス ビューの結合は、ファクトテーブルからディメンションテーブルへの直接結合(スタースキーマ)と、ファクトテーブルからディメンションテーブル、そしてサブディメンションテーブルへのトラバース結合の両方をサポートし、正規化されたディメンションテーブル(スノーフレークスキーマ)間でマルチホップ結合を可能にします。 このページでは、メトリクスビューのYAML定義で結合を定義する方法について説明します。
モデル スター スキーマ
スタースキーマでは、 source
はファクトテーブルであり、 LEFT OUTER JOIN
を使用して 1 つ以上のディメンションテーブルと結合します。メトリクスビューは、選択したディメンションとメジャーに基づいて、特定のクエリに必要なファクトテーブルとディメンションテーブルを結合します。
メトリクス ビューで結合列を指定するには、 ON
句または USING
句を使用します。
ON
句 : ブール式を使用して結合条件を定義します。USING
句 : 親テーブルと結合テーブルの両方で同じ名前の列を一覧表示します。第 1 レベルの結合の場合、親はメトリクス ビューのソースです。 スノーフレークスキーマのネストされた結合の場合、親は直接のアップストリーム結合です。
結合は、多対 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 結合には、コンピュート 17.1 以降 Databricks Runtime 必要があります。
スノーフレークスキーマをモデル化する結合を定義するには:
- メトリクス ビューを作成します。
- 第 1 レベル (スター スキーマ) 結合を追加します。
- 他のディメンションテーブルと結合します。
- ビューにディメンションを追加して、ネストされたディメンションを公開します。
次の例では、TPCH データセットを使用して、スノーフレークスキーマをモデル化する方法を示しています。TPCH データセットには、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