セマンティックビューの YAML 仕様¶
セマンティックビューは、データに対するビジネス概念を定義するスキーマレベルのオブジェクトであり、ユーザーがビジネス用語を使用してデータを容易にクエリおよび分析できるようにします。YAML 仕様を使用して Cortex Analyst でセマンティックビューを作成する、または SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML ストアドプロシージャを使用して YAML 仕様からセマンティックビューを作成するすることができます。
概要¶
**セマンティックビューは、Snowflakeでビジネスのセマンティクスを定義するために推奨されるアプローチ**です。セマンティックビューは、Snowflakeの権限システム、共有メカニズム、メタデータカタログと統合されたスキーマレベルのオブジェクトです。
注釈
従来のセマンティックモデル YAML ファイル(ステージに格納)を引き続き Cortex Analyst で使用して下位互換性を確保できますが、新しい実装にはセマンティックビューを使用することをお勧めします。
レガシーセマンティックモデルと比較した場合のセマンティックビューの利点は以下のとおりです。
ネイティブSnowflake統合:フル RBAC が実施されるスキーマレベルのオブジェクト、共有、カタログのサポート
高度な機能:派生メトリクスとアクセス修飾子のサポート(パブリック/プライベート)
より優れたガバナンス:Snowflakeの権限および共有システムとの統合
簡素化された管理:ステージ上の YAML ファイルの管理の必要なし
YAML 形式¶
セマンティックビューは `YAML<https://yaml.org/>`__ 仕様を取得して動作を定義し、読みやすいプレーンテキストの定義を可能にします。
セマンティックビューの YAML 仕様の一般的な構文は次のとおりです。
# Name and description of the semantic view.
name: <name>
description: <string>
comments: <string>
# Logical table-level concepts
# A semantic view can contain one or more logical tables.
tables:
# A logical table on top of a base table.
- name: <name>
description: <string>
# The fully qualified name of the base table.
base_table:
database: <database>
schema: <schema>
table: <base table name>
# Dimension columns in the logical table.
dimensions:
- name: <name>
synonyms: <array of strings>
description: <string>
expr: <SQL expression>
data_type: <data type>
unique: <boolean>
cortex_search_service:
service: <string>
literal_column: <string>
database: <string>
schema: <string>
is_enum: <boolean>
- ...
# Time dimension columns in the logical table.
time_dimensions:
- name: <name>
synonyms: <array of strings>
description: <string>
expr: <SQL expression>
data_type: <data type>
unique: <boolean>
# Fact columns in the logical table.
facts:
- name: <name>
synonyms: <array of strings>
description: <string>
access_modifier: <public_access | private_access> # Default is public_access.
expr: <SQL expression>
data_type: <data type>
# Regular metrics scoped to the logical table.
metrics:
- name: <name>
synonyms: <array of strings>
description: <string>
access_modifier: <public_access | private_access> # Default is public_access.
expr: <SQL expression>
# Commonly used filters over the logical table.
filters:
- name: <name>
synonyms: <array of strings>
description: <string>
expr: <SQL expression>
# View-level concepts
# Relationships between logical tables
relationships:
- name: <string>
left_table: <table>
right_table: <table>
relationship_columns:
- left_column: <column>
right_column: <column>
- left_column: <column>
right_column: <column>
# Derived metrics scoped to the semantic view.
# Derived metrics combine metrics from multiple tables.
metrics:
- name: <name>
synonyms: <array of strings>
description: <string>
access_modifier: <public_access | private_access> # Default is public_access
expr: <SQL expression>
# Additional context concepts
# Verified queries with example questions and queries that answer them
verified_queries:
- name: <string> # A descriptive name of the query.
question: <string> # The natural language question that this query answers.
verified_at: <int> # Optional: Time (in seconds since the UNIX epoch, January 1, 1970) when the query was verified.
verified_by: <string> # Optional: Name of the person who verified the query.
use_as_onboarding_question: <boolean> # Optional: Marks this question as an onboarding question for the end user.
sql: <string> # The SQL query for answering the question
重要
セマンティックビューにはレガシーセマンティックモデルで使用されていた ``join_type`` フィールドまたは ``relationship_type`` フィールドは必要ありません。関係タイプはデータから自動的に推測されます。
主な概念¶
テーブル¶
論理テーブルはビジネスエンティティ(顧客、注文、製品など)を表し、物理的なデータベーステーブルにマッピングされます。各論理テーブルは次の対象を定義できます。
ベーステーブル:物理テーブルの完全修飾名
プライマリキー:行を一意に識別する列
同義語:テーブルの代替名
説明:テーブルが表している内容に関するビジネスフレンドリーな説明
ディメンション¶
ディメンションは、分析のためのコンテキストを提示するカテゴリ属性を表します。それらは「誰が」、「何を」、「どこで」、「いつ」の質問に答えます。ディメンションは次のとおりです。
通常のディメンション:テキスト、数値、またはその他のカテゴリ値
時間ディメンション:特別な時間ベースの処理による日付またはタイムスタンプの列
ディメンションのプロパティ¶
expr: ディメンション値を計算するための SQL 式synonyms:ユーザーが使用できる代替用語unique:値が行全体で一意であるかどうかis_enum:ディメンションに固定値セットがあるかどうかcortex_search_service:セマンティック検索のためのオプションのCortex Searchサービス
物理ディメンションのオプションのプロパティ¶
これらのフィールドはオプションですが、セマンティックビュー検索から高品質の結果を生成するために推奨されます。
synonymsこのディメンションを参照するために使用されるその他の用語/フレーズのリスト。このセマンティックモデル内のすべての同義語で一意でなければなりません。
descriptionこのディメンションの簡単な説明。このディメンションが表すデータなど、有用なコンテキストを提示する情報を記載します。
uniqueこのディメンションに一意の値があることを示すブール値。
sample_valuesこの列のサンプル値(ある場合)。ユーザーの質問で参照される可能性のある値を追加します。
is_enumブール値。
Trueの場合、sample_valuesフィールドの値は可能な値の完全なリストとみなされ、モデルがその列でフィルタリングする際にそれらの値から選択します。cortex_search_serviceこのディメンションに使用するCortex Search Serviceを指定します。以下のフィールドがあります。
service:Cortex Search Serviceの名前。literal_column: (オプション)リテラル値を含むCortex Search Serviceの列。database: (オプション)Cortex Search Serviceがあるデータベース。デフォルトはbase_tableのデータベースです。schema: (オプション)Cortex Search Serviceがあるスキーマ。デフォルトはbase_tableのスキーマです。
cortex_search_serviceは、名前しか指定できなかったcortex_search_service_nameフィールドに取って代わるものです。cortex_search_service_nameは非推奨になりました。
時間ディメンションのオプションのプロパティ¶
これらのフィールドはオプションですが、セマンティックビュー検索から高品質の結果を生成するために推奨されます。
synonymsこの時間ディメンションを参照するために使用されるその他の用語/フレーズのリスト。このセマンティックモデル内のすべての同義語で一意でなければなりません。
descriptionこのディメンションの簡単な説明。このディメンションが参照点として使用するタイムゾーンなど、有用なコンテキストを提示する情報を記載します。
unique:この列が一意な値を持つことを示すブール値。
sample_values:この列のサンプル値(ある場合)。ユーザーの質問で参照される可能性のある値を追加します。
ファクト¶
ファクトは、特定のビジネスイベントまたはトランザクションを表す行レベルの定量属性です。ファクトは、個別の販売金額、購入数量、コストなど、最も詳細なレベルで「金額」または「数量」をキャプチャします。
通常、ファクトはセマンティックビュー内の「ヘルパー」概念として機能し、ディメンションとメトリックの構築を支援します。
ファクトのプロパティは次のとおりです。
expr: ファクト値を計算するための SQL 式access_modifier:private_accessに設定してクエリで非表示にする(中程度の計算に便利)data_type:ファクトのデータ型
メトリック¶
メトリックは、SUM、AVG、COUNT のような関数を使用してファクトやその他の列を集計することで計算される、ビジネスパフォーマンスの定量化可能な測定値です。
2種類のメトリック:
テーブルレベルのメトリック:特定の論理テーブルをスコープとし、そのテーブル内でデータを集約
派生メトリック:複数のテーブルのメトリックを組み合わせるビューレベルのメトリック
メトリックのプロパティ:
expr: 集計関数を使用する SQL 式access_modifier:private_accessに設定してクエリで非表示にする(中程度の計算に便利)synonyms:メトリックの代替条件
派生メトリック¶
派生メトリックは、特定のテーブルに関連付けられていないビューレベルのメトリックです。複数のテーブルのメトリックを組み合わせたり、ビュー全体で計算を実行したりできます。
派生メトリックの例:
metrics:
- name: total_profit_margin
description: "Overall profit margin across all products"
expr: (orders.total_revenue - orders.total_cost) / orders.total_revenue
access_modifier: public_access
リレーションシップ¶
関係は、論理テーブルがどのように結合するかを定義します。各関係は以下の対象を指定します。
left_table:外部キーを含むテーブルright_table:参照されているテーブルrelationship_columns:left_columnおよびright_columnとして結合する列のペア
関係型(1対1、多対1)は、データとプライマリキーの定義から自動的に推測されます。
注釈
従来のセマンティックモデルとは異なり、セマンティックビューは明示的な join_type または relationship_type の仕様を必要としません。これらは自動的に決定されます。
Filters¶
フィルターは、名前で参照できる一般的に使用されるフィルタリング条件を定義します。これにより、クエリ全体で一貫したフィルタリングロジックを確保できます。
例:
filters:
- name: active_customers
description: "Customers who have made a purchase in the last 12 months"
expr: "customer_last_purchase_date >= DATEADD(month, -12, CURRENT_DATE())"
検証済みクエリ¶
確認済みクエリは、対応する SQL クエリがある質問例です。Cortex Analyst が、類似した質問に回答し、ユーザーのドキュメントとして提供する方法を理解できるようにします。
プロパティ:
question:自然言語の質問sql: 質問に回答する SQL クエリverified_by:クエリが正しいことを確認したオプションの人物verified_at:確認時のオプションのタイムスタンプuse_as_onboarding_question:ユーザーへの提案としてこれを表示するオプションのフラグ
アクセス修飾子¶
セマンティックビューは、ファクトとメトリックのアクセス修飾子をサポートしており、可視性を制御できます。
``public_access``(デフォルト):ユーザーにより表示およびクエリ可能
private_access:クエリで非表示、中間計算にのみ使用
例:
facts:
- name: internal_cost
expr: unit_cost * quantity
data_type: NUMBER
access_modifier: private_access # Not visible in queries
metrics:
- name: total_revenue
expr: SUM(sale_amount)
access_modifier: public_access # Visible in queries
Cortex Analystのカスタム手順¶
SQL コマンドを使用して、セマンティックビュー定義でカスタム指示を提示することができます。これらの手順は、クエリがどのように生成されるか、また質問がどのように分類されるかをガイドします。これらの手順は YAML 仕様の一部ではありませんが、CREATE SEMANTIC VIEW コマンドを使用して設定されます。
詳細については、 Cortex Analyst のカスタム指示の提供 をご参照ください。
セマンティックビュー YAML の例¶
セマンティックビューの YAML 仕様の詳細な例を次に示します。
name: revenue_analysis
description: "Semantic view for analyzing revenue across products and customers"
tables:
- name: customers
description: "Customer information"
base_table:
database: sales_db
schema: public
table: customers
dimensions:
- name: customer_name
synonyms: ["client name", "customer"]
description: "Full name of the customer"
expr: c_name
data_type: VARCHAR
- name: customer_segment
synonyms: ["segment", "market segment"]
description: "Customer market segment"
expr: c_mktsegment
data_type: VARCHAR
is_enum: true
- name: orders
description: "Order information"
base_table:
database: sales_db
schema: public
table: orders
dimensions:
- name: order_date
description: "Date when order was placed"
expr: o_orderdate
data_type: DATE
time_dimensions:
- name: order_year
description: "Year when order was placed"
expr: YEAR(o_orderdate)
data_type: NUMBER
facts:
- name: order_total
description: "Total order amount"
expr: o_totalprice
data_type: NUMBER
metrics:
- name: total_orders
description: "Total number of orders"
expr: COUNT(*)
- name: average_order_value
description: "Average order value"
expr: AVG(o_totalprice)
relationships:
- name: orders_to_customers
left_table: orders
right_table: customers
relationship_columns:
- left_column: o_custkey
right_column: c_custkey
metrics:
- name: revenue_per_customer
description: "Average revenue per customer"
expr: orders.total_revenue / customers.customer_count
access_modifier: public_access
verified_queries:
- name: top_customers_by_revenue
question: "Who are the top 10 customers by revenue?"
sql: |
SELECT
customer_name,
SUM(order_total) as total_revenue
FROM revenue_analysis
GROUP BY customer_name
ORDER BY total_revenue DESC
LIMIT 10
use_as_onboarding_question: true
YAML でのセマンティックビューの作成¶
YAML 仕様のセマンティックビューを作成するには、SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML ストアドプロシージャを使用します。
詳細については、 YAML仕様からセマンティックビューを作成する をご参照ください。
セマンティックビューからの YAML の取得¶
セマンティックビューを YAML 形式にエクスポートするには、SYSTEM$READ_YAML_FROM_SEMANTIC_VIEW 関数を使用します。
詳細については、 セマンティックビューのYAML仕様を取得する をご参照ください。
従来のセマンティックモデルとの相違¶
従来のセマンティックモデルの YAML ファイルからセマンティックビューに移行する場合は、これらの重要な相違点に注意してください。
機能 |
従来のセマンティックモデル |
セマンティックビュー |
|---|---|---|
ストレージ |
ステージ上の YAML ファイル |
データベースのスキーマレベルのオブジェクト |
権限 |
ステージベースのアクセス制御 |
Snowflake全体の RBAC 統合 |
共有 |
手動ファイル共有 |
Snowflakeのネイティブ共有 |
結合タイプ |
|
自動推論 |
派生メトリック |
サポート対象外 |
包括的にサポート |
アクセス修飾子 |
サポート対象外 |
|
カスタムの手順 |
YAML ファイル内 |
SQL コマンドで設定 |
従来のセマンティックモデルからセマンティックビューに変換する場合:
join_typeおよびrelationship_typeを関係からを削除ビューレベルの計算に派生メトリックの使用を検討
プライベートに設定するファクト/メトリックに
access_modifierを追加カスタム手順を SQLCREATESEMANTICVIEW コマンドに移行