CREATE SEMANTIC VIEW¶
現在のスキーマ/指定されたスキーマで、新しい セマンティックビュー を作成します。
セマンティックビューは これらの検証ルール に準拠する必要があります。
- こちらもご覧ください:
ALTER SEMANTIC VIEW , DESCRIBE SEMANTIC VIEW , DROP SEMANTIC VIEW , SHOW SEMANTIC VIEWS , SHOW SEMANTIC DIMENSIONS , SHOW SEMANTIC DIMENSIONS FOR METRIC , SHOW SEMANTIC FACTS , SHOW SEMANTIC METRICS , SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML
構文¶
条件:
論理テーブルのパラメーター は次のとおりです。
関係のパラメーター は次のとおりです。
:ref:` ファクトの定義での式のパラメーター <label-create_semantic_view_expressions>` は次のとおりです。
ディメンションの定義での式のパラメーター は次のとおりです。
:ref:` メトリックの定義での式のパラメーター <label-create_semantic_view_expressions>` は次のとおりです。
以下の構文を使うと、ウィンドウ関数を使用するメトリック(ウィンドウ関数メトリック)を定義できます。
この構文の詳細については、ウィンドウ関数メトリックのパラメーター をご参照ください。
注釈
句の順番は重要です。例えば、 DIMENSIONS 句の前に FACTS 句を指定する必要があります。
後の句で定義されているセマンティック式を参照できます。例えば、 fact_1 の後に fact_2 が定義されていても、 fact_1 の定義で fact_2 を使うことができます。
必須パラメーター¶
nameセマンティックビューの名前を指定します。この名前は、テーブルが作成されるスキーマで一意でなければなりません。
また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object")。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
オプションのパラメーター¶
COMMENT = 'comment_about_semantic_view'セマンティックビューについてのコメントを指定します。
AI_SQL_GENERATION 'instructions_for_sql_generation'SQL ステートメントを生成する方法を説明する Cortex Analystの指示 を指定します。
詳細については、 Cortex Analyst のカスタム指示の提供 をご参照ください。
AI_QUESTION_CATEGORIZATION 'instructions_for_question_categorization'質問を分類する方法を説明する Cortex Analystの指示 を指定します。
詳細については、 Cortex Analyst のカスタム指示の提供 をご参照ください。
COPY GRANTS既存のセマンティックビューを新しいセマンティックビューに置き換えるために OR REPLACE を指定する場合、このパラメーターを設定することで、既存のセマンティックビューに対して付与された権限を新しいセマンティックビューにコピーすることができます。
コマンドは、既存のセマンティックビューから新しいセマンティックビューに、 OWNERSHIP を 除く をすべての権限をコピーします。CREATE SEMANTIC VIEW ステートメントを実行するロールが新しいビューを所有します。
新しいセマンティックビューは、スキーマのオブジェクトタイプに対して定義された将来の付与を継承 しません。
付与をコピーする操作は、 CREATE SEMANTIC VIEW ステートメントでアトミックに発生します(言い換えると、同じトランザクション内)。
COPY GRANTS を省略した場合、新しいセマンティックビューは既存のセマンティックビューに付与された明示的なアクセス権限を継承 しませんが、スキーマ内のオブジェクトタイプに対して定義された将来の付与は継承します。
論理テーブルのパラメーター¶
これらのパラメーターは 論理テーブルの構文 の一部です。
table_alias AS論理テーブルのオプションのエイリアスを指定します。
エイリアスを指定した場合は、関係、ファクト、ディメンション、およびメトリックで論理テーブルを参照するときに、このエイリアスを使用する必要があります。
エイリアスを指定しない場合は、非修飾論理テーブル名を使用してテーブルを参照します。
table_name論理テーブルの名前を指定します。
PRIMARY KEY ( primary_key_column_name [ , ... ] )論理テーブルの主キーとなる1つ以上の列の名前を指定します。
UNIQUE ( unique_column_name [ , ... ] )一意な値を含む列の名前、または一意な値の組み合わせを含む列の名前を指定します。
例えば、
service_id列に一意な値が含まれる場合、次のように指定します。product_area_id、product_id列の値の組み合わせが一意である場合、次のように指定します。指定された論理テーブルにおいて、複数の列や複数の列の組み合わせを一意なものとして識別子できます。
注釈
既に(PRIMARY KEY を使用して)列を主キー列として識別している場合は、その列に UNIQUE 句を追加しないでください。
CONSTRAINT [ constraint_name ].DISTINCT RANGE BETWEEN start_column AND end_column EXCLUSIVE-
:ref:`範囲結合<label-semantic_views_custom_range_joins>`の制約を指定します。
constraint_name制約のオプション名を指定します。
この名前を省略すると、コマンドは制約にシステム生成の名前を使用します。
:samp:`DISTINCT RANGE BETWEEN {start_column} AND {end_column} EXCLUSIVE`は、各行において:samp:`{start_column}`と:samp:`{end_column}`の間の範囲が別個の範囲であることを指定します。
範囲は`半開区間<https://en.wikipedia.org/wiki/Interval_(mathematics)#Definitions_and_terminology>`_であり、左側(
start_column)は閉じており、右側(end_column)は開いています。つまり、左側の時間は範囲に含まれますが、右側の時間は範囲から除外されます。
たとえば、このテーブルの行において、:samp:`{start_column}`の値が``2024-01-15 00:00:00.000``であり、:samp:`{end_column}`の値が``2024-02-01 00:00:00.000``の場合、範囲は次のとおりです。
2024-01-15 00:00:00.000 <= timestamp_from_other_table < 2024-02-01 00:00:00.000タイムスタンプ``2024-01-15 00:00:00.000``はこの範囲に含まれますが、タイムスタンプ``2024-02-01 00:00:00.000``は含まれません。
:samp:`{start_column}`および:samp:`{end_column}`は、同じテーブルの物理列か、同じテーブルのファクトまたはディメンションでなければなりません。
WITH SYNONYMS [ = ] ( 'synonym' [ , ... ] )論理テーブルの同義語を1つ以上指定します。エイリアスとは異なり、同義語は情報提供のみを目的として使用されます。関係、ディメンション、メトリック、およびファクトでは、論理テーブルを参照するために同義語を使用しません。
COMMENT = 'comment_about_table'論理テーブルについてのコメントを指定します。
関係のパラメーター¶
これらのパラメーターは 関係の構文 の一部です。
relationship_identifier AS関係のオプションの識別子を指定します。
table_alias ( column_name [ , ... ] )別の論理テーブルの列を参照する、1つの論理テーブルとその1つ以上の列を指定します。
ref_table_alias [ ( ... ) ]最初の論理テーブルによって参照される他の論理テーブルを指定します。
テーブルの結合方法に応じて、括弧内に次のいずれかを指定できます。
ref_column_name [ , ... ]:ref:`論理テーブル定義<label-create_semantic_view_tables>`のPRIMARY KEYまたはUNIQUE制約で識別される列を指定します。
ASOF ref_column_name [ , ... ] ):ref:`ASOF結合<label-semantic_views_create_relationships_asof>`の場合、:ref:`サポートされている型<label-asof_join_data_types>`のいずれかの列を指定します。
注釈
指定した関係の定義で指定できる ASOF キーワードは1つまでです。このキーワードは、リストのどの列の前でも指定できます。
BETWEEN start_column AND end_column EXCLUSIVE-
:ref:`範囲結合<label-semantic_views_custom_range_joins>`の場合、最初のテーブルで使用可能な値の範囲を指定します。
ファクト、ディメンション、メトリックのパラメーター¶
セマンティックビューでは、少なくとも1つのディメンションまたはメトリックを定義する必要があります。つまり、少なくとも DIMENSIONS 句または METRICS 句を指定する必要があります。
これらのパラメーターは、ファクト、ディメンション、または:ref:`メトリック<label-create_semantic_view_syntax_metric_expression>`を定義するための構文の一部です。
{ PRIVATE | PUBLIC }ファクトまたはメトリックが プライベート かパブリックかを指定します。プライベートとしてマークされているファクトとメトリックは、クエリしたり、クエリ条件で使用したりすることはできません。
注釈
ディメンションをプライベートとしてマークすることはできません。ディメンションは常にパブリックです。ディメンションの場合、PUBLIC を指定しても省略しても影響は同じです。
PRIVATE および PUBLIC を省略した場合、ディメンション、ファクト、またはメトリックはデフォルトでパブリックになります。
table_alias.semantic_expression_nameディメンション、ファクト、またはメトリックの名前を指定します。
USING relationship_name [ , ... ]-
メトリック定義の場合は、:ref:`2つの論理テーブル間に複数の関係パスが存在する<label-semantic_views_create_logical_tables_relations>`ときに、テーブルを結合してメトリックを計算するために使用する関係を指定します。
派生メトリック (異なる論理テーブルからの複数のメトリックを結合するメトリック)を定義するには、名前から
table_alias.を省略します。有効なセマンティックビューを定義するためのルールについては、Snowflakeによるセマンティックビューの検証方法 をご参照ください。
NON ADDITIVE BY ( dimension [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ] [ , ... ] )メトリックの合計時に使用しないディメンションのリストを指定します。
代わりに、クエリ処理中に行は非加算ディメンションで並べ替えられ、最後の行(最新の値のスナップショット)の値が集計されてメトリックが計算されます。
{ ASC | DESC }オプションで、非加算ディメンションの値を昇順(最小から最大)または降順(最大から最小)にソートします。これにより、最新のスナップショットが決定されます。
デフォルト: ASC
NULLS { FIRST | LAST }オプションで、ソート順(ASCまたはDESC)に基づいて、NULL値をNULL以外の値の前と後のどちらにソートするかを指定します。ソート順は、最新のスナップショットが何であるかを決定します。
デフォルト:ソート順(ASCまたはDESC)に依存します。ORDERBYドキュメント<label-order_by_nulls>`の使用上の注意:ref:`を参照してください。
NON ADDITIVE BY句を指定すると、メトリックは*半加算*メトリックになります。
詳細については、 メトリックに対して非加算にすべきディメンションの特定 をご参照ください。
AS sql_exprディメンション、ファクト、またはメトリックを計算するためのSQL式を指定します。
label-semantic_views_create_facts_dimensions_metrics`を参照してください。これらの式の検証ルールについては、:doc:/user-guide/views-semantic/validation-rules`を参照してください。
WITH SYNONYMS [ = ] ( 'synonym' [ , ... ] )ディメンション、ファクト、またはメトリックのオプションの同義語を1つ以上指定します。なお、同義語は情報提供のみを目的としています。同義語を使用して、別のディメンション、ファクト、またはメトリックを参照することはできません。
COMMENT = 'comment_about_dim_fact_or_metric'ディメンション、ファクト、またはメトリックに関するオプションのコメントを指定します。
WITH CORTEX SEARCH SERVICE search_service_name [ USING search_service_column_name ]このディメンションに使用するCortex Search Service を指定します。
このパラメーターは、ディメンションにのみ指定できます(ファクトまたはメトリックには指定できません)。
Cortex Search Serviceが別のデータベースまたはスキーマにある場合、サービスの名前を修飾します (例:
my_db.my_schema.my_service)。Cortex Search Serviceの列の名前に、オプションで USING 句を設定できます。
ウィンドウ関数メトリックのパラメーター¶
これらのパラメーターは ウィンドウ関数のメトリックを定義するための構文 の一部です。
metricこのウィンドウ関数のメトリック式を指定します。メトリック、またはこのエンティティのメトリックを定義するために使用できる有効なメトリック式を指定できます。
PARTITION BY ...行をパーティション分割します。指定した式のセット、またはクエリで指定したすべてのディメンション(選択したディメンションを除く)でパーティション分割できます。
PARTITION BY exprs_using_dimensions_or_metricsSQL 式ごとに行をパーティション分割します。SQL 式:
式のディメンションは、ウィンドウ関数メトリックを定義する同じエンティティからアクセスできる必要があります。
すべてのメトリックは、このメトリックが定義されているのと同じテーブルに属している必要があります。
集計、ウィンドウ関数、またはサブクエリは指定できません。
PARTITION BY EXCLUDING dimensionsdimensionsで指定されたディメンションを除いて、クエリの SEMANTIC_VIEW 句で指定されたすべてのディメンションによって、行をパーティション分割します。dimensionsは、ウィンドウ関数メトリックを定義するエンティティからアクセス可能なディメンションのみを参照する必要があります。たとえば、パーティション分割から
table_1.dimension_1ディメンションを除外するとします。ディメンション
table_1.dimension_1を指定するクエリを実行するとします。クエリでは、メトリック
table_1.metric_2は次のように評価されます。table_1.dimension_1が PARTITIONBY 句からどのように除外されるか注意してください。注釈
セマンティックビューのメトリック定義以外で EXCLUDING は使用できません。EXCLUDING は、他のコンテキストでのウィンドウ関数呼び出しでサポートされていません。
ORDER BY exprs_using_dimensions_or_metrics [ ASC | DESC ] [ NULLS FIRST | LAST ] [, ... ]各パーティション内の行を並べ替えます。SQL 式:
式のディメンションは、ウィンドウ関数メトリックを定義する同じエンティティからアクセスできる必要があります。
すべてのメトリックは、このメトリックが定義されているのと同じテーブルに属している必要があります。
集計、ウィンドウ関数、またはサブクエリは指定できません。
windowFrameClauseウィンドウ関数の構文と使用法 をご参照ください。
ウィンドウ関数のパラメーターおよび例については、ウィンドウ関数メトリックの定義とクエリ をご参照ください。
アクセス制御の要件¶
この操作の実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
注意 |
|---|---|---|
CREATE SEMANTIC VIEW |
スキーマ |
新しいセマンティックビューを作成するために必要です。 |
SELECT |
テーブル、ビュー |
セマンティックビューの定義で使用されるすべてのテーブルおよび/またはビューで必要です。 |
スキーマ内のオブジェクトを操作するには、親データベースの少なくとも1つの権限と、親スキーマの少なくとも1つの権限が必要です。
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
セマンティックビューが有効になっていて、Snowflakeによるセマンティックビューの検証方法 で説明されているルールに従う必要があります。
メタデータについて:
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
CREATE OR REPLACE <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、単一のトランザクションで、古いオブジェクトが削除されて新しいオブジェクトが作成されます。
