このページでは、メトリック ビューの完全な YAML 文法について説明します。 メトリック ビューの定義は、標準の YAML 表記構文に従います。
各機能の最小ランタイムおよび YAML 仕様バージョンの要件については、 メトリック ビュー機能の可用性に関するページを参照してください。
YAML 仕様の詳細については、 YAML 仕様 1.2.2 のドキュメントを参照してください。
YAML の概要
メトリック ビューの YAML 定義には、次の最上位レベルのフィールドが含まれています。
| フィールド | 必須 | タイプ | 説明 |
|---|---|---|---|
version |
必須 | 糸 | メトリック ビューの仕様のバージョン。 YAML 仕様のバージョンを参照してください。 |
comment |
オプション | 糸 | メトリック ビューの説明。 |
source |
必須 | 糸 | メトリック ビューのソース データ。 メトリック ビューや SQL クエリなど、テーブルに似た任意の Unity カタログ資産を指定できます。 ソースを参照してください。 |
filter |
オプション | 糸 | すべてのクエリに適用される SQL ブール式。 フィルターを参照してください。 |
joins |
オプション | Array | スター スキーマとスノーフレーク スキーマの結合。 「結合」を参照してください。 |
dimensions |
Conditional | Array | 名前、式、およびオプションのセマンティック メタデータを含むディメンション定義。
measuresが指定されていない場合は必須。 「 ディメンション」を参照してください。 |
measures |
Conditional | Array | 名前、集計式、オプションのセマンティック メタデータなどのメジャー定義。
dimensionsが指定されていない場合は必須。 「 メジャー」を参照してください。 |
materialization |
オプション | オブジェクト | 具体化されたビューを使用してクエリを高速化するための構成。 更新スケジュールと具体化されたビュー定義が含まれます。 具体化を参照してください。 |
情報源
source フィールドは、メトリック ビューのデータ ソースを指定します。 テーブル、ビュー、メトリック ビューなどのテーブルに似た資産、または SQL クエリをソースとして使用できます。 構成可能性は、メトリック ビュー全体に適用されます。 メトリック ビューをソースとして使用する場合は、新しいメトリック ビューでそのディメンションとメジャーを参照できます。
コンポーザビリティを参照してください。
テーブルに似た資産ソース
3 部構成の名前を使用して、テーブルのような資産を参照します。
source: catalog.schema.source_table
SQL クエリ ソース
SQL クエリを使用するには、クエリ テキストを YAML に直接記述します。
source: SELECT * FROM samples.tpch.orders o
LEFT JOIN samples.tpch.customer c
ON o.o_custkey = c.c_custkey
注
JOIN句を含むソースとして SQL クエリを使用する場合は、基になるテーブルに主キー制約と外部キー制約を設定し、RELY オプションを使用してクエリのパフォーマンスを最適化します。 詳細については、「 主キーと外部キーのリレーションシップを宣言する」および 「 主キー制約を使用したクエリの最適化」を参照してください。
フィルター
YAML 定義のフィルターは、メトリック ビューを参照するすべてのクエリに適用されます。 フィルターを SQL ブール式として書き込みます。
# Single condition filter
filter: o_orderdate > '2024-01-01'
# Multiple conditions with AND
filter: o_orderdate > '2024-01-01' AND o_orderstatus = 'F'
# Multiple conditions with OR
filter: o_orderpriority = '1-URGENT' OR o_orderpriority = '2-HIGH'
# Complex filter with IN clause
filter: o_orderstatus IN ('F', 'P') AND o_orderdate >= '2024-01-01'
# Filter with NOT
filter: o_orderstatus != 'O' AND o_totalprice > 1000.00
# Filter with LIKE pattern matching
filter: o_comment LIKE '%express%' AND o_orderdate > '2024-01-01'
Joins
メトリック ビューでの結合では、ファクト テーブルからディメンション テーブル (スター スキーマ) への直接結合と、正規化されたディメンション テーブル (スノーフレーク スキーマ) 間のマルチホップ結合の両方がサポートされます。
SELECT ステートメントを使用して SQL クエリに結合することもできます。
ソースとして SQL クエリを使用するを参照してください。
注
結合テーブルには、 MAP 型の列を含めることはできません。
MAP型の列から値をアンパックするには、「マップまたは配列から入れ子になった要素を分解する」を参照してください。
各結合定義には、次のフィールドが含まれています。
| フィールド | 必須 | タイプ | 説明 |
|---|---|---|---|
name |
必須 | 糸 | 結合テーブルまたは SQL クエリの別名。 ディメンションまたはメジャーで結合テーブルの列を参照する場合は、このエイリアスを使用します。 |
source |
必須 | 糸 | 結合するテーブルの 3 部構成の名前。 SQL クエリにすることもできます。 |
on |
Conditional | 糸 | 結合条件を定義するブール式。
usingが指定されていない場合は必須。 |
using |
Conditional | Array | 親テーブルと結合テーブルの両方に存在する列名の一覧。
onが指定されていない場合は必須。 |
joins |
オプション | Array | スノーフレーク スキーマ モデリング用の入れ子になった結合定義の一覧。 最小ランタイム要件については、 メトリック ビュー機能の可用性 に関する記事を参照してください。 |
スター スキーマ結合
スター スキーマでは、 source はファクト テーブルであり、 LEFT OUTER JOINを使用して 1 つ以上のディメンション テーブルと結合します。 メトリック ビューは、選択した列に基づいて、特定のクエリに必要なファクト テーブルとディメンション テーブルを結合します。
ON句または USING 句を使用して結合列を指定します。
- ON 句: ブール式を使用して結合条件を定義します。
- USING 句: 親テーブルと結合テーブルの両方で同じ名前の列を一覧表示します。
結合は「多対一の関係」に従う必要があります。 多対多の場合、結合されたディメンション テーブルから最初に一致する行が選択されます。
version: 1.1
source: samples.tpch.lineitem
joins:
- name: orders
source: samples.tpch.orders
on: source.l_orderkey = orders.o_orderkey
- name: part
source: samples.tpch.part
on: source.l_partkey = part.p_partkey
dimensions:
- name: Order Status
expr: orders.o_orderstatus
- name: Part Name
expr: part.p_name
measures:
- name: Total Revenue
expr: SUM(l_extendedprice * (1 - l_discount))
- name: Line Item Count
expr: COUNT(1)
注
source名前空間はメトリック ビューのソースの列を参照しますが、結合のnameはその結合テーブルの列を参照します。 たとえば、 source.l_orderkey = orders.o_orderkeyでは、 source は lineitem を参照し、 orders は結合テーブルを参照します。
on句にプレフィックスが指定されていない場合、参照は既定で結合テーブルに設定されます。
Snowflake スキーマ結合
スノーフレーク スキーマは、ディメンション テーブルを正規化してサブディメンションに接続することで、スター スキーマを拡張します。 これにより、複数レベルの結合構造が作成されます。 最小ランタイム要件については、 メトリック ビュー機能の可用性 に関する記事を参照してください。
スノーフレーク スキーマを定義するには、親結合定義内に joins を入れ子にします。
version: 1.1
source: samples.tpch.orders
joins:
- name: customer
source: samples.tpch.customer
'on': o_custkey = c_custkey
joins:
- name: nation
source: samples.tpch.nation
'on': c_nationkey = n_nationkey
dimensions:
- name: customer_nation
expr: customer.nation.n_name
ディメンション
ディメンションは、クエリ時に SELECT句、 WHERE句、および GROUP BY 句で使用される列です。 各式はスカラー値を返さなければなりません。 ディメンションは、メトリック ビューでソース データまたは以前に定義されたディメンションから列を参照できます。
各ディメンション定義には、次のフィールドが含まれています。
| フィールド | 必須 | タイプ | 説明 |
|---|---|---|---|
name |
必須 | 糸 | ディメンションの列の別名。 |
expr |
必須 | 糸 | ソース データまたは以前に定義されたディメンションの列を参照できる SQL 式。 |
comment |
オプション | 糸 | ディメンションの説明。 Unity カタログとドキュメント ツールに表示されます。 |
display_name |
オプション | 糸 | 視覚化ツールに表示される人間が判読できるラベル。 上限は 255 文字です。 YAML 仕様 1.1 が必要です。 メトリック ビュー機能の可用性に関する記事を参照してください。 |
format |
オプション | Map | 値の表示方法の書式指定。 YAML 仕様 1.1 が必要です。 形式の 仕様を参照してください。 |
synonyms |
オプション | Array | ディメンションを検出するための LLM ツールの別名。 最大 10 個のシノニム。それぞれ 255 文字に制限されています。 YAML 仕様 1.1 が必要です。 シノニムを参照してください。 |
例:
dimensions:
# Basic dimension
- name: order_date
expr: o_orderdate
comment: 'Date the order was placed'
display_name: 'Order Date'
# Dimension with SQL expression
- name: order_month
expr: DATE_TRUNC('MONTH', o_orderdate)
display_name: 'Order Month'
# Dimension with synonyms
- name: order_status
expr: CASE
WHEN o_orderstatus = 'O' THEN 'Open'
WHEN o_orderstatus = 'P' THEN 'Processing'
WHEN o_orderstatus = 'F' THEN 'Fulfilled'
END
display_name: 'Order Status'
synonyms: ['status', 'fulfillment status']
対策
メジャーは、事前に決定された集計レベルなしで結果を生成する式です。 集計関数を使用して表現する必要があります。 クエリでメジャーを参照するには、 MEASURE 関数を使用します。 メジャーは、ソース データ、以前に定義されたディメンション、または以前に定義されたメジャーの基本フィールドを参照できます。
各メジャー定義には、次のフィールドが含まれています。
| フィールド | 必須 | タイプ | 説明 |
|---|---|---|---|
name |
必須 | 糸 | メジャーのエイリアス。 |
expr |
必須 | 糸 | SQL 集計関数を含む集計 SQL 式。 |
comment |
オプション | 糸 | 測定の説明。 Unity カタログとドキュメント ツールに表示されます。 |
display_name |
オプション | 糸 | 視覚化ツールに表示される人間が判読できるラベル。 上限は 255 文字です。 YAML 仕様 1.1 が必要です。 メトリック ビュー機能の可用性に関する記事を参照してください。 |
format |
オプション | Map | 値の表示方法の書式指定。 YAML 仕様 1.1 が必要です。 形式の 仕様を参照してください。 |
synonyms |
オプション | Array | メジャーを検出するための LLM ツールの別名。 最大 10 個のシノニム。それぞれ 255 文字に制限されています。 YAML 仕様 1.1 が必要です。 メトリック ビュー機能の可用性に関する記事を参照してください。 |
window |
オプション | Array | ウィンドウ集計、累積集計、または準加法集計のウィンドウ仕様。 指定しない場合、メジャーは標準集計として動作します。 「ウィンドウのメジャー」を参照してください。 |
集計関数の一覧については、集計関数を参照してください。
例:
measures:
# Simple count measure
- name: order_count
expr: COUNT(1)
display_name: 'Order Count'
# Sum aggregation measure with synonyms
- name: total_revenue
expr: SUM(o_totalprice)
comment: 'Gross revenue from all orders'
display_name: 'Total Revenue'
synonyms: ['revenue', 'total sales']
# Distinct count measure
- name: unique_customers
expr: COUNT(DISTINCT o_custkey)
display_name: 'Unique Customers'
# Calculated measure combining multiple aggregations
- name: avg_order_value
expr: SUM(o_totalprice) / COUNT(DISTINCT o_orderkey)
display_name: 'Avg Order Value'
synonyms: ['AOV', 'average order']
# Filtered measure with WHERE condition
- name: open_order_revenue
expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'O')
display_name: 'Open Order Revenue'
synonyms: ['backlog', 'outstanding revenue']
ウィンドウ メジャー
Important
この機能は試験段階です。
window フィールドは、メジャーのウィンドウ集計、累積集計、または準加法集計を定義します。 ウィンドウ メジャーとユース ケースの詳細については、「 ウィンドウ メジャー」を参照してください。
各ウィンドウの仕様には、次のフィールドが含まれています。
| フィールド | 必須 | タイプ | 説明 |
|---|---|---|---|
order |
必須 | 糸 | ウィンドウの順序を決定するディメンション。 |
range |
必須 | 糸 | ウィンドウの範囲。 サポートされている値:
|
semiadditive |
必須 | 糸 | 集計メソッド。 サポートされる値: first または last。 |
ウィンドウ メジャーの例
次の例では、一意の顧客のローリング 7 日間のカウントを計算します。
version: 1.1
source: samples.tpch.orders
dimensions:
- name: order_date
expr: o_orderdate
measures:
- name: rolling_7day_customers
expr: COUNT(DISTINCT o_custkey)
display_name: '7-Day Rolling Customers'
window:
- order: order_date
range: trailing 7 day
semiadditive: last
具体化
Important
この機能は試験段階です。
materialization フィールドは、具体化されたビューを使用して自動クエリ アクセラレーションを構成します。 具体化のしくみ、要件、ベスト プラクティスの詳細については、 メトリック ビューの具体化を参照してください。
materialization フィールドには、次の最上位レベルのフィールドが含まれています。
| フィールド | 必須 | タイプ | 説明 |
|---|---|---|---|
schedule |
必須 | 糸 | 更新スケジュール。
具体化されたビューの schedule 句と同じ構文を使用します。
TRIGGER ON UPDATE 句はサポートされていません。 |
mode |
必須 | 糸 |
relaxedに設定する必要があります。 |
materialized_views |
必須 | Array | 具体化する具体化されたビューの一覧。 各エントリには、以下で説明するフィールドが必要です。 |
materialized_viewsの各エントリには、次のフィールドがあります。
| フィールド | 必須 | タイプ | 説明 |
|---|---|---|---|
name |
必須 | 糸 | 具体化の名前。 |
type |
必須 | 糸 | 具体化の種類。 サポートされる値: aggregated ( dimensions、 measures、またはその両方が必要) または unaggregated。 |
dimensions |
Conditional | Array | 具体化するディメンション名の一覧。
typeがaggregatedであり、measuresが指定されていない場合は必須です。 |
measures |
Conditional | Array | 具体化するメジャー名の一覧。
typeがaggregatedであり、dimensionsが指定されていない場合は必須です。 |
具体化の例
次の例では、複数の具体化を使用してメトリック ビューを定義します。
version: 1.1
source: samples.tpch.orders
dimensions:
- name: order_date
expr: o_orderdate
- name: order_status
expr: o_orderstatus
measures:
- name: total_revenue
expr: SUM(o_totalprice)
- name: order_count
expr: COUNT(1)
materialization:
schedule: every 6 hours
mode: relaxed
materialized_views:
- name: baseline
type: unaggregated
- name: daily_status_metrics
type: aggregated
dimensions:
- order_date
- order_status
measures:
- total_revenue
- order_count
列名の参照
YAML 式でスペースまたは特殊文字を含む列名を参照する場合は、列名をバックティックで囲んでスペースまたは文字をエスケープします。 式がバックティックで始まり、YAML 値として直接使用される場合は、式全体を二重引用符で囲みます。 有効なYAMLの値はバックティックで始めることができません。
書式設定の例
次の例を使用して、一般的なシナリオで YAML を正しく書式設定する方法について説明します。
列名を参照する
次の表は、含まれる文字に応じて列名を書式設定する方法を示しています。
| ケース | ソース列名(複数可) | 参照式 | メモ |
|---|---|---|---|
| スペースは使用できません | revenue |
expr: "revenue"expr: 'revenue'expr: revenue |
列名の前後には二重引用符、一重引用符、または引用符を使用しません。 |
| スペースあり | First Name |
expr: "`First Name`" |
スペースをエスケープするためにバックティックを使用します。 式全体を二重引用符で囲みます。 |
| SQL 式にスペースを含む列名 |
First Name および Last Name |
expr: CONCAT(`First Name`, , `Last Name`) |
式がバッククォートで始まらない場合は、二重引用符は必要ありません。 |
| ソース列名には引用符が含まれます | "name" |
expr: '`"name"`' |
列名の二重引用符をエスケープするには、バッククォートを使用します。 YAML 定義でその式を一重引用符で囲みます。 |
コロンを使用して式を組み合わせる
| ケース | Expression | メモ |
|---|---|---|
| コロンを含む式 | expr: "CASE WHEN `Customer Tier` = 'Enterprise: Premium' THEN 1 ELSE 0 END" |
正しい解釈を行う場合は、式全体を二重引用符で囲みます |
注
YAML は、引用符で囲まれていないコロンをキーと値の区切り記号として解釈します。 常に、コロンを含む式を二重引用符で囲みます。
複数行インデント
| ケース | Expression | メモ |
|---|---|---|
| 複数行インデント | expr: \| CASE WHEN revenue > 100 THEN 'High' ELSE 'Low' END |
最初の行の下に式をインデントする |
注
複数行式の|の後に、expr: ブロック スカラーを使用します。 正しい解析を行うには、すべての行に expr キーを超えるスペースを少なくとも 2 つインデントする必要があります。
YAML を 1.1 にアップグレードする
コメントは以前のバージョンとは異なる方法で処理されるため、メトリック ビューを YAML 仕様バージョン 1.1 にアップグレードするには注意が必要です。
コメントの種類
- YAML コメント (#): # 記号を使用して YAML ファイルに直接書き込まれたインラインまたは 1 行のコメント。
- Unity カタログのコメント: メトリック ビューまたはその列 (ディメンションとメジャー) の Unity カタログに格納されているコメント。 これらは YAML コメントとは別です。
アップグレードに関する考慮事項
メトリック ビューでのコメントの処理方法に一致するアップグレード パスを選択します。 次のオプションでは、使用可能な方法について説明し、例を示します。
オプション 1: ノートブックまたは SQL エディターを使用して YAML コメントを保持する
メトリック ビューに保持する YAML コメント (#) が含まれている場合は、次の手順を使用します。
- ノートブックまたは SQL エディターで
ALTER VIEWコマンドを使用します。 -
ASした後、元の YAML 定義を$$..$$セクションにコピーします。versionの値を1.1に変更します。 - メトリック ビューを保存します。
ALTER VIEW metric_view_name AS
$$
# The notebook preserves inline comments
version: 1.1
source: samples.tpch.orders
dimensions:
- name: order_date # The notebook preserves inline comments
expr: o_orderdate
measures:
# The notebook preserves commented out definitions
# - name: total_orders
# expr: COUNT(o_orderid)
- name: total_revenue
expr: SUM(o_totalprice)
$$
Warnung
ALTER VIEWを実行すると、YAML 定義のcomment フィールドに明示的に含まれていない限り、Unity カタログのコメントが削除されます。 Unity カタログに表示されているコメントを保持するには、 オプション 2 を参照してください。
オプション 2: Unity カタログのコメントを保持する
注
次のガイダンスは、ノートブックまたは SQL エディターで ALTER VIEW コマンドを使用する場合にのみ適用されます。 YAML エディター UI を使用してメトリック ビューをバージョン 1.1 にアップグレードすると、YAML エディター UI によって Unity カタログのコメントが自動的に保持されます。
- YAML 定義内の適切な
commentフィールドにすべての Unity カタログ コメントをコピーします。versionの値を1.1に変更します。 - メトリック ビューを保存します。
ALTER VIEW metric_view_name AS
$$
version: 1.1
source: samples.tpch.orders
comment: "Metric view of order (Updated comment)"
dimensions:
- name: order_date
expr: o_orderdate
comment: "Date of order - Copied from Unity Catalog"
measures:
- name: total_revenue
expr: SUM(o_totalprice)
comment: "Total revenue"
$$
YAML 仕様のバージョン履歴と各機能の最小ランタイム要件については、 メトリック ビューの機能の可用性に関するページを参照してください。