CREATE SEMANTIC VIEW¶
現在のスキーマ/指定されたスキーマで、新しい セマンティックビュー を作成します。
セマンティックビューは これらの検証ルール に準拠する必要があります。
- こちらもご覧ください:
ALTER SEMANTIC VIEW、 DESCRIBE SEMANTIC VIEW、 DROP SEMANTIC VIEW、 SHOW SEMANTIC VIEWS、 SHOW SEMANTIC DIMENSIONS、 SHOW SEMANTIC METRICS、 SHOW SEMANTIC DIMENSIONS FOR METRIC、 SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML
構文¶
CREATE [ OR REPLACE ] SEMANTIC VIEW [ IF NOT EXISTS ] <name>
TABLES ( logicalTable [ , ... ] )
[ RELATIONSHIPS ( relationshipDef [ , ... ] ) ]
[ FACTS ( semanticExpression [ , ... ] ) ]
[ DIMENSIONS ( semanticExpression [ , ... ] ) ]
[ METRICS ( semanticExpression [ , ... ] ) ]
[ COMMENT = '<comment_about_semantic_view>' ]
[ COPY GRANTS ]
条件:
論理テーブルのパラメーター は次のとおりです。
logicalTable ::= [ <table_alias> AS ] <table_name> [ PRIMARY KEY ( <primary_key_column_name> [ , ... ] ) ] [ UNIQUE ( <unique_column_name> [ , ... ] ) [ ... ] ] [ WITH SYNONYMS [ = ] ( '<synonym>' [ , ... ] ) ] [ COMMENT = '<comment_about_table>' ]
関係のパラメーター は次のとおりです。
relationshipDef ::= [ <relationship_identifier> AS ] <table_alias> ( <column_name> [ , ... ] ) REFERENCES <ref_table_alias> [ ( <ref_column_name> [ , ... ] ) ]
ディメンションの定義での式のパラメーター は次のとおりです。
semanticExpression ::= [ PUBLIC ] <table_alias>.<dimension> AS <sql_expr> [ WITH SYNONYMS [ = ] ( '<synonym>' [ , ... ] ) ] [ COMMENT = '<comment_about_the_dimension>' ]
ファクトとメトリックの定義での式のパラメーター は次のとおりです。
semanticExpression ::= [ { PRIVATE | PUBLIC } ] <table_alias>.<fact_or_metric> AS <sql_expr> [ WITH SYNONYMS [ = ] ( '<synonym>' [ , ... ] ) ] [ COMMENT = '<comment_about_the_fact_or_metric>' ]
以下の構文を使うと、ウィンドウ関数を使用するメトリック(ウィンドウ関数メトリック)を定義できます。
windowFunctionMetricDefinition ::= <window_function>( <metric> ) OVER ( [ PARTITION BY { <exprs_using_dimensions_or_metrics> | EXCLUDING <dimensions> } ] [ ORDER BY <exprs_using_dimensions_or_metrics> [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ] [ <windowFrameClause> ] )
この構文の詳細については、ウィンドウ関数メトリックのパラメーター をご参照ください。
注釈
句の順番は重要です。例えば、 DIMENSIONS 句の前に FACTS 句を指定する必要があります。
後の句で定義されているセマンティック式を参照できます。例えば、 fact_1
の後に fact_2
が定義されていても、 fact_1
の定義で fact_2
を使うことができます。
必須パラメーター¶
name
セマンティックビューの名前を指定します。この名前は、テーブルが作成されるスキーマで一意でなければなりません。
また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object"
)。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
オプションのパラメーター¶
COMMENT = 'comment_about_semantic_view'
セマンティックビューについてのコメントを指定します。
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
列に一意な値が含まれる場合、次のように指定します。TABLES( ... product_table UNIQUE (service_id)
product_area_id
、product_id
列の値の組み合わせが一意である場合、次のように指定します。TABLES( ... product_table UNIQUE (product_area_id, product_id) ...
指定された論理テーブルにおいて、複数の列や複数の列の組み合わせを一意なものとして識別子できます。
TABLES( ... product_table UNIQUE (product_area_id, product_id) UNIQUE (service_id) ...
注釈
既に(PRIMARY KEY を使用して)列を主キー列として識別している場合は、その列に UNIQUE 句を追加しないでください。
WITH SYNONYMS [ = ] ( 'synonym' [ , ... ] )
論理テーブルの同義語を1つ以上指定します。エイリアスとは異なり、同義語は情報提供のみを目的として使用されます。関係、ディメンション、メトリック、およびファクトでは、論理テーブルを参照するために同義語を使用しません。
COMMENT = 'comment_about_table'
論理テーブルについてのコメントを指定します。
関係のパラメーター¶
これらのパラメーターは 関係の構文 の一部です。
relationship_identifier AS
関係のオプションの識別子を指定します。
table_alias ( column_name [ , ... ] )
別の論理テーブルの列を参照する、1つの論理テーブルとその1つ以上の列を指定します。
ref_table_alias [ ( ref_column_name [ , ... ] ) ]
最初の論理テーブルによって参照されるもう1つの論理テーブルとその1つ以上の列を指定します。
列は、 論理テーブルの定義 において、 PRIMARY KEY または UNIQUE として識別される必要があります。
ファクト、ディメンション、メトリックのパラメーター¶
セマンティックビューでは、少なくとも1つのディメンションまたはメトリックを定義する必要があります。これは、少なくとも1つの DIMENSIONS 句または METRICS 句を指定する必要があることを意味します。
これらのパラメーターは ファクト、ディメンション、またはメトリックを定義するための構文 の一部です。
{ PRIVATE | PUBLIC }
ファクトまたはメトリックが プライベート かパブリックかを指定します。プライベートとしてマークされているファクトとメトリックは、クエリしたり、クエリ条件で使用したりすることはできません。
注釈
ディメンションをプライベートとしてマークすることはできません。ディメンションは常にパブリックです。ディメンションの場合、PUBLIC を指定しても省略しても影響は同じです。
PRIVATE および PUBLIC を省略した場合、ディメンション、ファクト、またはメトリックはデフォルトでパブリックになります。
table_alias.semantic_expression_name AS sql_expr
ディメンション、ファクト、またはメトリックの名前と、そのディメンション、ファクト、またはメトリックを計算する SQL 式を指定します。
有効なセマンティックビューを定義するためのルールについては、Snowflakeによるセマンティックビューの検証方法 をご参照ください。
WITH SYNONYMS [ = ] ( 'synonym' [ , ... ] )
ディメンション、ファクト、またはメトリックのオプションの同義語を1つ以上指定します。なお、同義語は情報提供のみを目的としています。同義語を使用して、別のディメンション、ファクト、またはメトリックを参照することはできません。
COMMENT = 'comment_about_dim_fact_or_metric'
ディメンション、ファクト、またはメトリックに関するオプションのコメントを指定します。
ウィンドウ関数メトリックのパラメーター¶
これらのパラメーターは ウィンドウ関数のメトリックを定義するための構文 の一部です。
metric
このウィンドウ関数のメトリック式を指定します。メトリック、またはこのエンティティのメトリックを定義するために使用できる有効なメトリック式を指定できます。
PARTITION BY ...
行をパーティション分割します。指定した式のセット、またはクエリで指定したすべてのディメンション(選択したディメンションを除く)でパーティション分割できます。
PARTITION BY exprs_using_dimensions_or_metrics
SQL 式ごとに行をパーティション分割します。SQL 式:
式のディメンションは、ウィンドウ関数メトリックを定義する同じエンティティからアクセスできる必要があります。
すべてのメトリックは、このメトリックが定義されているのと同じテーブルに属している必要があります。
集計、ウィンドウ関数、またはサブクエリは指定できません。
PARTITION BY EXCLUDING dimensions
dimensions
で指定されたディメンションを除いて、クエリの SEMANTIC_VIEW 句で指定されたすべてのディメンションによって、行をパーティション分割します。dimensions
は、ウィンドウ関数メトリックを定義するエンティティからアクセス可能なディメンションのみを参照する必要があります。たとえば、パーティション分割から
table_1.dimension_1
ディメンションを除外するとします。CREATE SEMANTIC VIEW sv ... METRICS ( table_1.metric_2 AS SUM(table_1.metric_1) OVER (PARTITION BY EXCLUDING table_l.dimension_1 ORDER BY table_1.dimension_2) ) ...
ディメンション
table_1.dimension_1
を指定するクエリを実行するとします。SELECT * FROM SEMANTIC VIEW( sv METRICS ( table_1.metric_2 ) DIMENSIONS ( table_1.dimension_1, table_1.dimension_2, table_1.dimension_3 );
クエリでは、メトリック
table_1.metric_2
は次のように評価されます。SUM(table_1.metric_1) OVER ( PARTITION BY table_1.dimension_2, table_1.dimension_3 ORDER BY table_1.dimension_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 |
テーブル、ビュー |
セマンティックビューの定義で使用されるすべてのテーブルおよび/またはビューで必要です。 |
スキーマ内のオブジェクトに対して操作を実行するには、親データベースとスキーマに対する USAGE 権限が必要です。
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
セマンティックビューが有効になっていて、Snowflakeによるセマンティックビューの検証方法 で説明されているルールに従う必要があります。
メタデータについて:
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
CREATE OR REPLACE <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、単一のトランザクションで、古いオブジェクトが削除されて新しいオブジェクトが作成されます。
例¶
セマンティックビューの作成 をご参照ください。