SQL コマンドを使用したセマンティックビューの作成と管理¶
このトピックでは、次の SQL コマンドを使用して :doc:` セマンティックビュー <overview>` を作成、管理する方法について説明します。
また、次のストアドプロシージャと関数を呼び出して、:doc:`YAML仕様<semantic-view-yaml-spec>`からセマンティックビューを作成し、セマンティックビューの仕様を取得する方法についても説明します。
セマンティックビューの作成または置換に必要な権限¶
セマンティックビューを作成または置換するには、次の権限を持つロールを使用する必要があります。
CREATE SEMANTIC VIEW をセマンティックビューを作成するスキーマに追加します。
USAGE セマンティックビューを作成するデータベースとスキーマで、次のように設定します。
セマンティックビューで使用されるテーブルとビューに対する SELECT。
セマンティックビューのクエリに必要な権限については、 セマンティックビューのクエリに必要な権限 を参照してください。
CREATE SEMANTIC VIEWコマンドを使用したセマンティックビューの作成¶
セマンティックビューを作成するには、:doc:`/sql-reference/sql/create-semantic-view`コマンドを使用します。
注釈
YAML仕様<semantic-view-yaml-spec>`からセマンティックビューを作成するには、:doc:/sql-reference/stored-procedures/system_create_semantic_view_from_yaml`ストアドプロシージャを呼び出します。
セマンティックビューは有効でなければなりません。Snowflakeによるセマンティックビューの検証方法 をご参照ください。
次の例は、Snowflakeで利用可能な:doc:`TPC-Hサンプルデータ</user-guide/sample-data-tpch>`を使用しています。このデータセットには、顧客、注文、明細で個別のビジネスシナリオを表すテーブルが含まれています。
この例では、 TPC-H データセットのテーブルを使用して、 tpch_rev_analysis という名前のセマンティックビューを作成しています。セマンティックビューは定義します。
3つの論理テーブル(
orders,customers,line_items)。ordersとcustomersテーブルのリレーションシップ。line_itemsとordersテーブルのリレーションシップ。メトリクスの計算に使用されるファクト。
顧客名、注文日、注文年のディメンション。
注文の平均値および注文の平均品目数に関するメトリクス。
次のセクションでは、この例について詳しく説明します。
注釈
完全な例については、 SQL を使用してセマンティック表示を作成する例 をご参照ください。
論理テーブルの定義¶
CREATE SEMANTIC VIEW コマンドで、 TABLES 句を使用して、ビュー内の論理テーブルを定義します。この句では、次のことができます。
物理テーブル名とオプションのエイリアスを指定します。
論理テーブルの以下の列の識別子。
主キーとなる列。
一意な値を含む列(主キー列以外)。
これらの列を使用して、このセマンティックビューでリレーションシップを定義することができます。
テーブルの同義語を追加します(発見性を高めるため)。
説明的なコメントを添えてください。
先に示した の例では、、 TABLES 句は3つの論理テーブルを定義します。
TPC-H
ordersテーブルからのオーダー情報を含むordersテーブル。TPC-H
customersテーブルの顧客情報を含むcustomersテーブル。TPC-H ``lineitem``テーブルの注文の明細を含む``line_items``テーブル。
この例では、 PRIMARYKEY 句を使用して、各論理テーブルの主キーとして使用される列を識別します。主キーと一意の値は、テーブル間の 関係 の種類(例: 多対1または1対1)を決定するのに役立ちます。
この例では、論理テーブルを説明する同義語やコメントもプロバイダーとして提供し、データを発見しやすくしています。
論理テーブル間のリレーションシップの識別子¶
:doc:`/sql-reference/sql/create-semantic-view`コマンドで、RELATIONSHIPS句を使用してビュー内のテーブル間の関係を識別します。関係ごとに、次を指定します。
リレーションシップのオプション名。
外部キーを含む論理テーブルの名前。
外部キーを定義するテーブルの列。
一意な値を持つプライマリキーまたは列を含む論理テーブルの名前。
プライマリキーを定義する、あるいは一意な値を含むテーブルの列。
TABLES 句ですでに論理テーブルに PRIMARY KEY を指定している場合は、リレーションシップのプライマリキー列を指定する必要はありません。
TABLES 句に論理テーブルの UNIQUE キーワードが 1 つある場合、リレーションシップで対応する列を指定する必要はありません。
また、 範囲で列を結合 したい場合は、日付、時間、タイムスタンプ、または数値列を指定することもできます。
先に紹介した 例 では、 RELATIONSHIPS 句で2つのリレーションシップを指定しています。
ordersとcustomersテーブルのリレーションシップ。ordersテーブルのo_custkeyは、customersテーブル (c_custkey) のプライマリキーを参照する外部キーです。line_itemsとordersテーブルのリレーションシップ。line_itemsテーブルのl_orderkeyは、ordersテーブル (o_orderkey) のプライマリキーを参照する外部キーです。
日付、時刻、タイムスタンプ、数値範囲を使用した論理テーブルの結合¶
デフォルトでは、2つの論理テーブル間の関係を指定すると、テーブルは等価条件で結合されます。
2つの論理テーブルを日付、時間、タイムスタンプ、数値範囲(一方のテーブルの列の値が他方のテーブルの列の値と同じ範囲にある必要がある)で結合する必要がある場合、 REFERENCES 句で列名と ASOF キーワードを指定できます。
上記で定義されたセマンティックビューのクエリは、 MATCH_CONDITION 句で >= 比較演算子を使用する ASOF JOIN を作ります。これは、 col_table_1 の値が col_table_2 の値以上となるように、2つのテーブルを結合します。
注釈
MATCH_CONDITION 句では他の比較演算子はサポートされていません。
:ref:`ASOFJOIN<label-asof_join_data_types> で使用するのと同じ型 ` の列について、 ASOF キーワードを使用できます。
注釈
指定した関係の定義で指定できる ASOF キーワードは1つまでです。このキーワードは、リストのどの列の前でも指定できます。
例えば、顧客、顧客住所、注文データを含むテーブルがあるとします。
この例では、 customer_address テーブルの ca_start_date 列が、顧客が特定の住所に住み始めた時期を示しています。orders テーブルの o_ord_date 列は、注文の日付です。
顧客の注文に関する情報をクエリし、注文時に顧客が住んでいた場所に対応する郵便番号を取得できるようにしたいとします。
ca_start_date 列と o_ord_date 列の間の ASOF 結合を指定するセマンティックビューを定義できます。
郵便番号ごとの月あたりの注文金額合計を返すように、 このセマンティックビューにクエリ するとします。
このクエリでは、効果的に ASOF JOIN を使用して、注文日が居住開始日以降である日付列でテーブルを結合しています。
値の範囲を含む論理テーブルの結合¶
テーブルを、そのテーブルの可能な値の範囲を定義する別のテーブルと結合する場合、*範囲結合*を使用できます。たとえば、あるテーブルが販売注文を表し、注文が行われたタイムスタンプの列があるとします。別のテーブルが会計四半期を表し、それらの四半期を表す個別の時間範囲が含まれているとします。この2つのテーブルを結合するセマンティックビューを作成すると、注文の行にその注文が行われた会計四半期を含めることができます。
範囲を含むテーブルでは、各範囲が一意である必要があります。2つの範囲が重複してはいけません。
テーブルデータで、範囲の最小値または範囲の最大値を指定する場合は、NULLを使用します。
例えば、次のテーブルでは、重複しない時間範囲のセットを定義しています。
最初の行は、2024年1月1日(同日は含まない)までのすべてを含む範囲をカバーします。
最後の行は、2024年3月20日以降のすべてを含む範囲をカバーしています。
注釈
2つの行の開始列にNULLを含めることはできず、2つの行の終了列にNULLを含めることはできません。
このような場合は、範囲結合クエリをサポートする:doc:`セマンティックビュー</user-guide/views-semantic/overview>`を設定できます。セマンティックビューを作成する際は、以下を実行する必要があります。
一定期間の開始時刻と終了時刻を含む論理テーブルの場合は、2つの範囲が重複しないことを指定する制約を定義します。
:doc:`/sql-reference/sql/create-semantic-view`コマンドのTABLE句で、論理テーブル定義にCONSTRAINT句を指定します。構文について詳しくは、:ref:`CREATE SEMANTIC VIEWトピック<label-create_semantic_view_tables_constraint>のCONSTRAINTのドキュメント`を参照してください。
あるテーブルのタイムスタンプを含む列と、もう1つのテーブルの開始時間列と終了時間列の関係を定義します。
CREATE SEMANTIC VIEWコマンドのRELATIONSHIPS句で、BETWEEN句を使用して開始時刻と終了時刻を含む列を指定します。構文について詳しくは、:ref:`RELATIONSHIP CREATE SEMANTICトピックVIEWの<label-create_semantic_view_relationships>のドキュメント`を参照してください。
たとえば、``my_time_periods``テーブルが個別の期間を定義するとします。
``my_events``テーブルが、これらの期間内に発生したイベントをキャプチャするとします。
テーブルを結合するセマンティックビューを定義できます。``my_events``の行は``my_time_periods``の行と結合されます。ここでは、``my_events``の``event_timestamp``列の値が、``my_time_periods``の``start_time``および``end_time``列で指定された範囲内にあります。
次のクエリは、行がどのように結合されているかを示しています。
例に示すように、結果の各行の``dim_time_period_name``ディメンションは、``dim_event_timestamp``ディメンションが該当する期間の名前です。
ファクト、ディメンション、メトリクスの定義¶
CREATE SEMANTIC VIEW コマンドでは、 FACTS、 DIMENSIONS、 METRICS 句を使用して、セマンティック・ビューのファクト、ディメンション、およびメトリクスを定義します。
セマンティックビューに、少なくとも 1 つのディメンションまたはメトリクスを定義する必要があります。
ファクト、ディメンション、またはメトリクスごとに指定します。
所属する論理テーブル。
注釈
派生メトリック(1つの論理テーブルに固有ではないメトリック)を定義する場合は、論理テーブル名を省略する必要があります。派生メトリックの定義 をご参照ください。
ファクト、寸法、またはメトリクスの名前。
SQL 式で計算します。
注釈
ディメンションの場合、ディメンションに使用する Cortex Search Service を指定できます。詳細については、 Cortex Search Serviceを使用するディメンションの定義 をご参照ください。
任意の同義語とコメント。
注釈
メトリックを特定のディメンションにまたがって集計しない場合は、それらのディメンションが*非加算*であることを指定する必要があります。
詳細については、 メトリックに対して非加算にすべきディメンションの特定 をご参照ください。
先に示した 例 では、いくつかのファクト、ディメンション、メトリクスを定義しています。
注釈
ウィンドウ関数を使用するメトリックの定義に関する追加のガイドラインについては、 ウィンドウ関数メトリックの定義とクエリ をご覧ください。
Cortex Search Serviceを使用するディメンションの定義¶
Cortex Search Service を使用するディメンションを定義するには、Cortex Search Service の名前に WITH CORTEX SEARCH SERVICE 句を設定します。サービスが別のデータベースまたはスキーマにある場合、サービスの名前を修飾します。例:
派生メトリックの定義¶
メトリックを定義するときは、メトリックが属する論理テーブルの名前を指定します。これは、メトリックが集約される論理テーブルです。
異なる論理テーブルのメトリックに基づいてメトリックを定義したい場合は、派生メトリック を定義できます。派生メトリックは、(特定の論理テーブルではなく)セマンティックビューを対象とするメトリックです。派生メトリックは、複数の論理テーブルのメトリックを組み合わせることができます。
派生メトリックの定義では、論理テーブル名を省略します。
たとえば、メトリック table_1.metric_1 および table_2.metric_2 の合計であるメトリック my_derived_metric_1 を定義したいとします。my_derived_metric_1 を定義するとき、論理テーブル名で名前を修飾しないでください。
式では、他の派生メトリックを使用できます。例:
派生メトリックを定義する場合は、以下の制限に注意してください。
派生メトリックと通常のメトリックに同じ名前を使用することはできません。
派生メトリックの式では、次を使用できます。
セマンティックビューの任意の論理テーブルで定義されたディメンションとファクトの集約。
セマンティックビューの任意の論理テーブルで定義されたメトリックのスカラー式。
その他の派生メトリック。
次の例では、
derived_metric_1は、2つのメトリックを持つスカラー式を使用します。derived_metric_2は、ディメンションの集約を使用します。derived_metric_3は、ディメンションの集約を別の派生メトリックに追加します。
名前があいまいでない場合は、式内のメトリック、ディメンション、ファクトの名前を修飾する必要はありません。例:
metric_1という名前のメトリックが2つあるため、metric_1はtable_1で修飾する必要がありますが、my_unique_metric_nameは名前が一意であるため修飾する必要はありません。派生メトリックの式では、以下を使用できません。
メトリックの集約。
ウィンドウ関数。
物理列への参照。
集約されていないファクトまたはディメンションへの参照。
通常のメトリック、ディメンション、またはファクトの式では、派生メトリックを使用することはできません。式で派生メトリックを使用できるのは、別の派生メトリックのみです。
複数の関係パスが存在する場合における、メトリックの関係の指定¶
場合によっては、セマンティックビューにある2つの特定の論理テーブル間に複数の関係パスが存在することがあります。このような場合、メトリックを定義するときに、使用する関係パスを指定する必要があります。
複数の関係パスの問題¶
フライトと空港に関する情報を含む2つのテーブルがあるとします。
特定の都市から出発し、特定の年に到着する、フライトの総数に関する情報を提供するセマンティックビューを定義するとします。
セマンティックビューは、flights``テーブルと``airports``テーブル間の2つの異なる関係(``flight_departure_airport``と``flight_arrival_airport)を指定します。テーブル間には複数の関係パスがあるため、``m_flight_count``メトリックをクエリして``airports.city_name``ディメンション(または``airports``テーブルの任意のディメンション)を選択しようとすると失敗します。
``flights``テーブルと``airports``テーブルの間には複数のパスがあるため、クエリは失敗します。クエリが``airports``テーブルからディメンションを選択しなかった場合、クエリは成功していました。
使用する関係の指定¶
:doc:`/sql-reference/sql/create-semantic-view`コマンドのメトリック定義では、USING句で使用する関係を指定できます。
注釈
指定する各関係は、メトリックを含む論理テーブルから始まる必要があります。たとえば、次のように指定するとします。
関係``table_a_to_table_b``は``table_a``から開始する必要があります。
関係のシーケンスを指定することはできません(例:
table_a_to_table_b``および``table_b_to_table_c)。各関係は、メトリックを含む論理テーブルから始まる必要があります。メトリックを含む論理テーブルから異なるテーブルへの関係を識別する必要がある場合は、USING句で関係を指定できます。たとえば、``table_a``から``table_b``へ、および``table_a``から``table_c``への特定の関係によってメトリックを計算するとします。この場合、USING句で両方の関係を指定します。
:ref:`派生メトリック<label-semantic_views_create_derived_metrics>`ではUSING句を指定できません。
たとえば、次のステートメントは、特定の関係を使用する2つの追加メトリックを定義します。
flight_departure_airport``関係を使用する``m_flight_departure_count。flight_arrival_airport``関係を使用する``m_flight_arrival_count。
このビューをクエリする際に、特定の関係を使用する、2つの新しいメトリックを指定できます。
同じ関係に依存するディメンションの追加¶
前の例のクエリでは、関係の基になる``airports``論理テーブルにある``airports.city_name``ディメンションを使用しました。
別の論理テーブルのディメンションをビューに追加すると、そのディメンションを使用したクエリでも、以前に指定した関係が有効に機能します。
たとえば、``airports``テーブルの``airport_region_code``列で指定された空港の地域に関する追加情報を含む、``regions``という名前のテーブルを作成するとします。
以前に定義したセマンティックビューを拡張して、地域名を返すことができます。
``regions``テーブルと``airports``テーブルの間には単一の関係があるため、メトリックのUSING句に追加の変更を加える必要はありません。
``region_name``ディメンションを指定してビューをクエリし、どの関係を使用するかについてあいまいな場合、USING句が使用する関係を決定します。
異なるテーブルとの関係の指定¶
セマンティックビューが複数のテーブルのディメンションを使用し、これらのディメンションに使用する関係を指定する必要がある場合は、USING句で複数の関係を指定できます。
たとえば、``airports``テーブルの空港の気象情報を含む、``weather``という名前のテーブルを作成するとします。
以前に定義したセマンティックビューを拡張して、気象情報を返すことができます。
``weather``テーブルの新しい論理テーブルを追加します。
``weather``テーブルと``flights``テーブルの間に2つの関係(1つは出発フライト用、もう1つは到着フライト用)を追加します。
気象情報のディメンションを追加します。
メトリックが、``weather``テーブルと``flights``テーブル間の2つの新しい関係も使用するように指定します。
ビューをクエリして``weather_condition``ディメンションを指定すると、USING句が使用される関係を決定します。
特定の関係を使用するメトリックに基づく派生メトリックの定義¶
:ref:`派生メトリック<label-semantic_views_create_derived_metrics>`ではUSING句を指定できませんが、USING句を指定するメトリックを使用する派生メトリックを定義できます。
例えば、次のセマンティックビューは2つの派生メトリックを定義します。
global_m_departure_arrival_ratioglobal_m_departure_arrival_sum
これらの派生メトリックの定義では、``flights.m_flight_departure_count``および``flights.m_flight_arrival_count``メトリックを使用し、その両方ともUSING句を指定します。
メトリックに対して非加算にすべきディメンションの特定¶
場合によっては、メトリックを特定のディメンションで集計すべきではない場合があります。このような場合は、ディメンションを*非加算*としてマークできます。
一部のディメンションでメトリックを集計する際の問題の理解¶
ある特定の日における、各顧客の当座預金と普通預金の残高を記載したテーブルがあるとします。
次を含むセマンティックビューを定義するとします。
次のディメンション。
カスタマー ID
口座タイプ
Year
Month
日
残高合計のメトリック。
次のステートメントは、上記のディメンションとメトリックを含むセマンティックビューを作成します。
毎年年末に各顧客の当座預金口座と普通預金口座の合計残高を取得したい場合は、セマンティックビューに``m_account_balance``メトリックをクエリし、``customer_id_dim``および``year_dim``ディメンションを指定できます。
ただし、メトリックは日付ディメンションによって集計されるため、``m_account_balance``メトリックは各顧客の各日の残高の合計になります。
上記の例では、2024年の``cust-001``の場合、910``は各日の残高の合計(``100 + 110 + 140 + 150 + 200 + 210)です。
メトリックが特定のディメンションにまたがって集計されるのを防止する方法¶
メトリックが日付ディメンションによって集計されないようにするには、セマンティックビューを作成する際にNON ADDITIVE BY句で日付ディメンションを指定します。
注釈
メトリックでNON ADDITIVE BY句を指定した場合、派生していないメトリックの定義ではそのメトリックを参照することはできません。派生メトリックのみが、非加算ディメンションを指定するメトリックを参照できます。
NON ADDITIVE BY句を指定すると、メトリックは*半加算*メトリックになります。
このセマンティックビューをクエリすると、``m_account_balance``メトリックは日付ディメンションで集計されなくなります。クエリは、クエリされたディメンションのグループそれぞれで、期間終了時の口座残高を集計します。
上記の例では、2024年の``cust-001``の場合、``210``はデータを含むその年の最終日の当座預金口座と普通預金口座の残高の合計です。
データを含む2024年の最終日は``2024-03-30``です。
当座預金口座にはその日付の行がないため、結果のメトリックは普通預金口座の残高(
210)です。
別の例として、年末にすべての顧客の合計口座残高が必要な場合は、``year_dim``ディメンションを指定できます。
日付ディメンションは非加算としてマークされているため、クエリは各顧客の当座預金口座と普通預金口座の残高の期間終了時(日付ごと)の値を合計します。
クエリ処理中に、行は非加算ディメンションでソートされ、最後の行(最新の値のスナップショット)の値がメトリックを計算するために集計されます。
注釈
行は非加算ディメンションでソートされるため、ディメンションを指定する順序が重要です。これは、:doc:`/sql-reference/constructs/order-by`句で列を指定する順序と似ています。
非加算ディメンションのソート順の指定¶
例で示されているように、メトリックは、期間の終了時に各顧客の当座預金と普通預金の残高の値を集計します。ソート順を変更する場合は、ディメンション名の横にASCまたはDESCキーワードを指定できます。例:
この例では、メトリックは``year_dim``、month_dim、および``day_dim``で指定された最も早い日付に評価されます。
ディメンションにNULL値が含まれる場合は、NULLS FIRSTまたはNULLS LASTキーワードを使用して、結果でNULL値を最初に並べ替えるか最後に並べ替えるかを指定できます。
ファクトやメトリックをプライベートとしてマークする¶
セマンティックビューの計算でのみ使用するためにファクトまたはメトリックを定義し、クエリでファクトまたはメトリックを返さないようにする場合は、ファクトまたはメトリックをプライベートとしてマークする PRIVATE キーワードを指定できます。例:
注釈
ディメンションをプライベートとしてマークすることはできません。ディメンションは常にパブリックです。
プライベートなファクトまたはメトリックを含むセマンティックビューをクエリする場合、以下の句でプライベートなファクトまたはメトリックを指定することはできません。
SELECTリスト
SEMANTIC_VIEW 句内の FACTS
SEMANTIC_VIEW 句内の METRICS
METRICS
SELECT ステートメントまたは SEMANTIC_VIEW 句内の WHERE
一部のコマンドと関数には、プライベートなファクトとメトリックが含まれます。
プライベートなファクトとメトリックは、/sql-reference/sql/desc-semantic-view`コマンドの出力に表示されます。プライベートなファクトとメトリックの行では、 ``access_modifier` 列に
PRIVATEがあります。プライベートなファクトとメトリックは、label-semantic_views_get_ddl`に記載されているように、:doc:/sql-reference/functions/get_ddl`関数呼び出しの戻り値にリストされます。
一部のコマンドと関数には、特定の条件下でのみプライベートなファクトとメトリックが含まれます。
プライベートなファクトとメトリックは、:ref:`セマンティックビューに対してREFERENCESまたはOWNERSHIP権限が付与された<label-semantic_views_privileges>ロールを使用している場合にのみ、INFORMATION_SCHEMAの:doc:`SEMANTIC_FACTS </sql-reference/info-schema/semantic_facts>`ビューと:doc:`SEMANTIC_METRICS </sql-reference/info-schema/semantic_metrics>`ビューにリストされます。
それ以外の場合、これらのビューにはパブリックなファクトとメトリックのみがリストされます。
その他のコマンドや関数には、プライベートなファクトとメトリックは含まれません。
プライベートファクトは、SHOW SEMANTIC FACTS コマンドの出力には表示されません。
プライベートメトリックは、SHOW SEMANTIC METRICS コマンドの出力には表示されません。
Cortex Analyst のカスタム指示の提供¶
セマンティックビューでは、次の方法を説明する Cortex Analystの手順 を提供できます。
SQL ステートメントを生成する
質問を分類し、追加情報の提供を促す
これらのカスタム指示を提供するには、以下の句を使用します。
SQL ステートメントを生成する方法については、 CREATE SEMANTIC VIEW コマンドの AI_SQL_GENERATION 句を使用してください。
たとえば、すべての数値列が小数点2位に丸められるような SQL ステートメントを生成するように Cortex Analyst に指示するには、次のように指定します。
質問の分類方法については、 AI_QUESTION_CATEGORIZATION 句を使用します。
たとえば、 Cortex Analyst にユーザーに関する質問を拒否するように指示するには、次のように指定します。
質問が明確でない場合は、詳細を要求する指示を提供することもできます。例:
YAML仕様からセマンティックビューを作成する¶
YAML仕様<semantic-view-yaml-spec>`からセマンティックビューを作成するには、:doc:/sql-reference/stored-procedures/system_create_semantic_view_from_yaml`ストアドプロシージャを呼び出すことができます。
まず、YAML仕様からセマンティックビューを作成できることを確認するために、3番目の引数としてTRUEを渡します。
次の例では、YAML の特定のセマンティックモデル仕様を使用して、データベース my_db とスキーマ my_schema に tpch_analysis という名前のセマンティックビューを作成できることを確認します。
仕様が有効な場合、ストアドプロシージャは以下のメッセージを返します。
YAML 構文が無効な場合、ストアドプロシージャは例外をスローします。たとえば、コロンがない場合は
ストアドプロシージャは例外をスローし、YAML 構文が無効であることを示します。
仕様が存在しない物理テーブルを参照している場合、ストアドプロシージャは例外をスローします。
同様に、仕様が存在しない主キー列を参照している場合、ストアドプロシージャは例外をスローします。
その後、3番目の引数を渡さずにストアドプロシージャを呼び出して、セマンティックビューを作成できます。
次の例では、データベース my_db とスキーマ my_schema に tpch_analysis という名前のセマンティックビューを作成します。
既存のセマンティックビューのコメントを変更する¶
既存のセマンティックビューのコメントを変更するには、ALTER SEMANTIC VIEW コマンドを実行します。例:
注釈
コメント以外のプロパティを変更するのに、ALTERSEMANTICVIEW コマンドは使用できません。セマンティックビューの他のプロパティを変更するには、セマンティックビューを置き換えます。既存のセマンティックビューの置き換え をご参照ください。
COMMENT コマンドを使用してセマンティックビューのコメントを設定することもできます。
既存のセマンティックビューの置き換え¶
既存のセマンティックビューを置き換える(例えば、ビューの定義を変更する)には、 CREATE SEMANTIC VIEW を実行する際に OR REPLACE を指定します。既存のセマンティックビューで付与された権限を保持したい場合は、 COPY GRANTS を指定してください。例:
セマンティック・ビューのリスト表示¶
現在のスキーマまたは指定されたスキーマのセマンティックビューをリストするには、SHOW SEMANTIC VIEWS コマンドを実行します。例:
SHOW OBJECTS コマンドの出力にはセマンティックビューが含まれます。kind 列には、オブジェクトの型は VIEW としてリストされます。例:
また、 ACCOUNT_USAGE および INFORMATION_SCHEMA スキーマで、セマンティック・ビューのビューをクエリ できます。
ディメンション、ファクト、メトリックのリスト¶
ビュー、スキーマ、データベース、またはアカウントで使用可能なディメンション、ファクト、メトリックをリストするには、以下のコマンドを実行します。
デフォルトでは、このコマンドにより、現在のスキーマで定義されたセマンティックビューで使用可能なディメンション、ファクト、メトリックがリストされます。
次の例は、異なるスコープ内のセマンティックビューのディメンション、ファクト、およびメトリックをリストする方法を示しています。
現在のデータベースのセマンティックビューのディメンション、ファクト、およびメトリックをリストします。
特定のスキーマまたはデータベースのセマンティックビューのディメンション、ファクト、およびメトリックをリストします。
アカウントのセマンティックビューのディメンション、ファクト、およびメトリックをリストします。
特定のセマンティックビューのディメンション、ファクト、メトリックをリストします。
セマンティックビューをクエリする場合、/sql-reference/sql/show-semantic-dimensions-for-metric`コマンドを使用すると、特定のメトリックを指定した際に返せるディメンションを確認できます。詳細については、 :ref:`label-semantic_views_query_dimensions_metrics をご参照ください。
セマンティックビュー用の SHOW COLUMNS コマンドを実行すると、出力にはセマンティックビューのディメンション、ファクト、メトリックが含まれます。kind 列は、行がディメンション、ファクト、またはメトリックを表しているかどうかを示します。
例:
セマンティックビューの詳細表示¶
セマンティックビューの詳細を表示するには、DESCRIBE SEMANTIC VIEW コマンドを実行します。例:
セマンティックビューの SQL ステートメントを取得します。¶
GET_DDL 関数を呼び出すと、セマンティックビューを作成した DDL ステートメントを取得できます。
注釈
セマンティックビューに関してこの関数を呼び出すには、:ref:` セマンティックビューに対するREFERENCES または OWNERSHIP 権限を付与された <label-semantic_views_privileges>` ロールを使用する必要があります。
GET_DDL を呼び出す際、オブジェクトタイプとして 'SEMANTIC_VIEW' を渡します。例:
戻り値には :ref:` プライベートなファクトとメトリック <label-semantic_views_private>`(PRIVATE キーワードでマークされたファクトとメトリック)が含まれます。
セマンティックビューのYAML仕様を取得する¶
セマンティックビューの:doc:YAML仕様<semantic-view-yaml-spec>`を取得するには、:doc:/sql-reference/functions/system_read_yaml_from_semantic_view`関数を呼び出します。
次の例は、データベース my_db とスキーマ my_schema にある tpch_analysis という名前のセマンティックビューの YAML 仕様を返します。
セマンティックビューのTableauデータソース(TDS)ファイルへのエクスポート¶
セマンティックビューを`Tableau Data Source(TDS)ファイル<https://help.tableau.com/current/pro/desktop/en-us/export_connection.htm#options-for-saving-a-local-data-source>`_にエクスポートするには、:doc:`/sql-reference/functions/system_export_tds_from_semantic_view`関数を呼び出します。
次の例は、セマンティックビュー``my_sv_for_export``のTDSファイルコンテンツを返します。
XMLを``.tds``ファイルにコピーし、Tableau Desktopでファイルを開きます。
Tableau Desktopは、左側のフォルダーリストに各論理テーブルのフォルダーを表示します。フォルダーの名前はアンダースコアの代わりにスペースを使用し、各単語は大文字で始まります。たとえば、``date_dim``論理テーブルのフォルダー名は``Date Dim``です。
各フォルダーには、セマンティックビューのディメンション、ファクト、およびメトリックに対応するTableauのディメンションとメジャーが含まれています。
次のセクションでは、変換プロセスの詳細と制限を説明します。
変換について¶
関数は、セマンティックビューのディメンション、ファクト、およびメトリックを、Tableau TDSファイルにおける以下の対応する要素に変換します。
セマンティックビューの要素 |
Tableauの対応するもの(ディメンションまたはメジャー) |
データの集計方法 |
|---|---|---|
ディメンション |
|
|
数値:ref: |
測定 |
SUM |
非数値ファクト |
ディメンション |
|
数値:ref: |
測定 |
TDSファイルは、メトリックの代わりに計算フィールドを使用します。計算フィールドは、メトリックの値をSnowflake :doc:`/sql-reference/functions/agg`関数に渡します。 |
非数値メトリック |
ディメンション |
|
数値:ref: |
測定 |
TDSファイルは、メトリックの代わりに計算フィールドを使用します。計算フィールドは、メトリックの値をSnowflake :doc:`/sql-reference/functions/agg`関数に渡します。 |
非数値派生メトリック |
ディメンション |
|
次の:doc:`Snowflakeデータ型</sql-reference-data-types>`は、対応するTableauのTDSデータ型にマップされます。
Snowflakeデータ型 |
対応するTableauデータ型 |
|---|---|
NUMBER/FIXED(スケールが0より大きい場合) |
real |
NUMBER/FIXED(スケールが0またはnullの場合) |
integer |
FLOAT または DECFLOAT |
real |
STRING または BINARY |
string |
BOOLEAN |
boolean |
TIME |
time |
DATE |
date |
DATETIME または TIMESTAMP |
datetime |
GEOGRAPHY |
spatial |
半構造化(VARIANT、OBJECT、ARRAY)、構造化(ARRAY、OBJECT、MAP)、非構造化(FILE)、GEOMETRY、UUID、VECTOR |
string |
TDSファイルには、Snowflakeへの接続用にカスタマイズされた次の`機能<https://help.tableau.com/current/pro/desktop/en-us/odbc_capabilities.htm>`_があります。
カスタマイズ名 |
値 |
カスタマイズの効果 |
|---|---|---|
|
|
Tableauが列名を表示するために:samp:`SELECT * FROM {table} WHERE 1=0`のようなクエリを実際に実行することを防止します。 |
|
|
Tableauが型について学習するためにステートメントを「準備」(実行せずに解析されるようにSnowflakeに送信)することを防止します。 |
|
|
|
|
|
セマンティックビューに関する列情報を返すために、Tableauに標準のODBC :code:`SQLColumns`関数を有効にして使用するように強制します。この列情報には、列の名前、データ型、精度が含まれます。 |
|
|
データベース名を検索するときに、Tableauがアンダースコアをエスケープしないようにします。 |
Tableau Desktopでセマンティックビューを使用する際の制限¶
Tableau Desktopのセマンティックビューには以下の制限が適用されます。
セマンティックビューから抽出を作成することはできません。
接続を:extui:`Live`から:extui:`Extract`に変更した場合、Tableau Desktopは次のエラーで失敗します。
セマンティックビューでは:extui:`Measure Values`フィールドを使用できません。
セマンティックビューで:extui:`Measure Values`フィールドを選択した場合、Tableau Desktopは次のエラーを報告します。
セマンティックビューでは:extui:`Count`フィールドを選択できません。
:extui:`SemanticViewName(Count)`を選択した場合、Tableau Desktopは次のエラーを報告します。
クエリで指定されたディメンション、ファクト、およびメトリックによって行数が異なる可能性があるため、Tableau Desktopはセマンティックビューの行数をレポートできません。
メジャーを単独でドラッグすることはできません。
メジャーをドラッグすると、Tableau Desktopは次のエラーを報告します。
非数値メトリックを直接使用することはできません。
SYSTEM$EXPORT_TDS_FROM_SEMANTIC_VIEWは、Tableauで非数値メトリックをディメンションに変換します。これらのディメンションのいずれかを使用しようとすると、Tableau Desktopは次のエラーを報告します。
これを回避するには、ディメンションをメジャーに変換します。
セマンティックビューの名前変更¶
セマンティックビューの名前を変更するには、ALTERSEMANTICVIEW... RENAMETO... を実行します。例:
セマンティックビューの削除¶
セマンティックビューを削除するには、DROP SEMANTIC VIEW コマンドを実行します。例:
セマンティックビューの権限付与¶
セマンティックビュー権限 はセマンティックビューに付与できる権限のリストです。
セマンティックビューを操作するには、以下の権限が必要です。
ビューで DESCRIBE SEMANTIC VIEW コマンドを実行するには、そのビューに対する権限(例えば MONITOR、 REFERENCES または SELECT)が必要です。
SHOW SEMANTIC VIEWS コマンドの出力にそのビューを表示するには、ビューに対する権限が必要です。
セマンティックビューをクエリするには SELECT が必要です。
注釈
セマンティックビューをクエリには、SELECT セマンティックビューで使用されるテーブルに対するSELECT 権限は必要ありません。セマンティックビュー自体に対する SELECT 権限のみが必要です。
この動作は 標準クエリに必要な権限 と一致しています。
Cortex Analyst で所有していないセマンティック・ビューを使用するには、そのビューの REFERENCES および SELECT 権限を持つロールを使用する必要があります。
セマンティックビューに対する REFERENCES および SELECT 権限を付与するには、GRANT <権限> ... TO ROLE コマンドを使用します。たとえば、my_semantic_view という名前のセマンティックビューに対する REFERENCES および SELECT 権限をロール my_analyst_role に付与するには、次のステートメントを実行します。
Cortex Analyst ユーザーと共有したいセマンティックビューを含むスキーマがある場合、 future grants を使用して、そのスキーマで作成したセマンティックビューの権限を付与することができます。例: