セマンティックビューの 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
Copy

重要

セマンティックビューにはレガシーセマンティックモデルで使用されていた ``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種類のメトリック:

  1. テーブルレベルのメトリック:特定の論理テーブルをスコープとし、そのテーブル内でデータを集約

  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
Copy

リレーションシップ

関係は、論理テーブルがどのように結合するかを定義します。各関係は以下の対象を指定します。

  • 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())"
Copy

検証済みクエリ

確認済みクエリは、対応する 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
Copy

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
Copy

YAML でのセマンティックビューの作成

YAML 仕様のセマンティックビューを作成するには、SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML ストアドプロシージャを使用します。

詳細については、 YAML仕様からセマンティックビューを作成する をご参照ください。

セマンティックビューからの YAML の取得

セマンティックビューを YAML 形式にエクスポートするには、SYSTEM$READ_YAML_FROM_SEMANTIC_VIEW 関数を使用します。

詳細については、 セマンティックビューのYAML仕様を取得する をご参照ください。

従来のセマンティックモデルとの相違

従来のセマンティックモデルの YAML ファイルからセマンティックビューに移行する場合は、これらの重要な相違点に注意してください。

機能

従来のセマンティックモデル

セマンティックビュー

ストレージ

ステージ上の YAML ファイル

データベースのスキーマレベルのオブジェクト

権限

ステージベースのアクセス制御

Snowflake全体の RBAC 統合

共有

手動ファイル共有

Snowflakeのネイティブ共有

結合タイプ

join_type および relationship_type が必要

自動推論

派生メトリック

サポート対象外

包括的にサポート

アクセス修飾子

サポート対象外

public_access / private_access

カスタムの手順

YAML ファイル内

SQL コマンドで設定

従来のセマンティックモデルからセマンティックビューに変換する場合:

  1. join_type および relationship_type を関係からを削除

  2. ビューレベルの計算に派生メトリックの使用を検討

  3. プライベートに設定するファクト/メトリックに access_modifier を追加

  4. カスタム手順を SQLCREATESEMANTICVIEW コマンドに移行