セマンティックビューのクエリ

セマンティックビューのクエリに必要な権限

セマンティック・ビューを所有していないロールを使用している場合、そのセマンティック・ビューをクエリするには、そのセマンティック・ビューに SELECT 権限を付与する必要があります。

注釈

標準ビュー の場合と同様に、セマンティックビューで使用されるテーブルに SELECT 権限は必要ありません。セマンティック表示自体に SELECT 権限が必要なだけです。

セマンティック・ビューの権限付与に関する情報は、 セマンティックビューの権限付与 を参照してください。

セマンティックビューのクエリ

セマンティック・ビューをクエリするには、 FROM 句の SEMANTIC_VIEW 句を使用します。以下の例では、tpch_analysis セマンティック・ビューから customer_market_segment ディメンションと order_average_value メトリクスを選択します。

SELECT * FROM SEMANTIC_VIEW(
    tpch_analysis
    DIMENSIONS customer.customer_market_segment
    METRICS orders.order_average_value
  );
Copy
+-------------------------+---------------------+
| CUSTOMER_MARKET_SEGMENT | ORDER_AVERAGE_VALUE |
+-------------------------+---------------------+
| AUTOMOBILE              |     142570.25947219 |
| FURNITURE               |     142563.63314267 |
| MACHINERY               |     142655.91550608 |
| HOUSEHOLD               |     141659.94753445 |
| BUILDING                |     142425.37987558 |
+-------------------------+---------------------+

次の点に注意してください。

  • SEMANTIC_VIEWS 句では、 METRICS 句、 DIMENSIONS 句、またはその両方を指定する必要があります。

    SEMANTIC_VIEWS 句からこれらの句の両方を省略することはできません。

  • METRICS、 DIMENSIONS の句を、結果に表示させたい順番で指定します。

    寸法を結果の最初に表示させたい場合は、 METRICS の前に DIMENSIONS を指定します。そうでない場合は、まず METRICS を指定してください。

    例えば、 METRICS 句を最初に指定したとします:

    SELECT * FROM SEMANTIC_VIEW(
        tpch_analysis
        METRICS customer.customer_order_count
        DIMENSIONS customer.customer_name
      )
      ORDER BY customer_name
      LIMIT 5;
    
    Copy

    出力では、最初の列がメートル法の列(customer_order_count)で、2番目の列がディメンションの列(customer_name)です:

    +----------------------+--------------------+
    | CUSTOMER_ORDER_COUNT | CUSTOMER_NAME      |
    |----------------------+--------------------|
    |                    6 | Customer#000000001 |
    |                    7 | Customer#000000002 |
    |                    0 | Customer#000000003 |
    |                   20 | Customer#000000004 |
    |                    4 | Customer#000000005 |
    +----------------------+--------------------+
    

    代わりに DIMENSIONS 句を最初に指定します:

    SELECT * FROM SEMANTIC_VIEW(
        tpch_analysis
        DIMENSIONS customer.customer_name
        METRICS customer.customer_order_count
      )
      ORDER BY customer_name
      LIMIT 5;
    
    Copy

    出力では、最初の列がディメンションの列(customer_name)、2番目の列がメトリクスの列(customer_order_count)です:

    +--------------------+----------------------+
    | CUSTOMER_NAME      | CUSTOMER_ORDER_COUNT |
    |--------------------+----------------------|
    | Customer#000000001 |                    6 |
    | Customer#000000002 |                    7 |
    | Customer#000000003 |                    0 |
    | Customer#000000004 |                   20 |
    | Customer#000000005 |                    4 |
    +--------------------+----------------------+
    
  • JOIN, PIVOT, UNPIVOT, GROUP BY, 共通表式 (CTEs) などの他の SQL 構文で、 SEMANTIC_VIEW 句で定義された関係を使用することができます。

  • 出力列ヘッダーには、メトリクスとディメンションの修飾されていない名前が使用されます。

    同じ名前の複数のメトリクスやディメンションがある場合は、テーブル・エイリアスを使用して列ヘッダーに異なる名前を割り当てます。 出力中の重複列名の処理 をご参照ください。

以下の例では、 SQL を使用してセマンティック表示を作成する例 で定義された tpch_analysis ビューを使用しています:

メトリクスを取得する基本的な例

以下のステートメントは、メトリクスをクエリして、顧客の総カウントを取得します。

SELECT * FROM SEMANTIC_VIEW(
    tpch_analysis
    METRICS customer.customer_count
  );
Copy
+----------------+
| CUSTOMER_COUNT |
+----------------+
|          15000 |
+----------------+

ディメンションによるメトリクスデータのグループ化

次のステートメントは、メトリクスデータ (order_average_value) をディメンション (customer_market_segment) でグループ化しています:

SELECT * FROM SEMANTIC_VIEW(
    tpch_analysis
    DIMENSIONS customer.customer_market_segment
    METRICS orders.order_average_value
  );
Copy
+-------------------------+---------------------+
| CUSTOMER_MARKET_SEGMENT | ORDER_AVERAGE_VALUE |
+-------------------------+---------------------+
| AUTOMOBILE              |     142570.25947219 |
| FURNITURE               |     142563.63314267 |
| MACHINERY               |     142655.91550608 |
| HOUSEHOLD               |     141659.94753445 |
| BUILDING                |     142425.37987558 |
+-------------------------+---------------------+

SEMANTIC_VIEW サブ句と他のコンストラクトの併用

以下の例では、 SEMANTIC_VIEW サブセクションのディメンションとメトリクスを他の SQL 構造と組み合わせて使用して、結果をフィルター、並べ替え、および制限する方法を示します。

SELECT * FROM SEMANTIC_VIEW(
    tpch_analysis
    DIMENSIONS customer.customer_name
    METRICS orders.average_line_items_per_order,
            orders.order_average_value
  )
  WHERE average_line_items_per_order > 4
  ORDER BY average_line_items_per_order DESC
  LIMIT 5;
Copy
+--------------------+------------------------------+---------------------+
| CUSTOMER_NAME      | AVERAGE_LINE_ITEMS_PER_ORDER | ORDER_AVERAGE_VALUE |
+--------------------+------------------------------+---------------------+
| Customer#000045678 |                         6.87 |           175432.21 |
| Customer#000067890 |                         6.42 |           182376.58 |
| Customer#000012345 |                         5.93 |           169847.42 |
| Customer#000034567 |                         5.76 |           178952.36 |
| Customer#000056789 |                         5.64 |           171248.75 |
+--------------------+------------------------------+---------------------+

次元を使用するスカラー式の指定

以下の例では、 DIMENSIONS 句でディメンションを参照するスカラー式を使用しています。

SELECT * FROM SEMANTIC_VIEW(
    tpch_analysis
    DIMENSIONS DATE_PART('year', orders.order_date)
  );
Copy
+--------------------------------------+
| DATE_PART('YEAR', ORDERS.ORDER_DATE) |
|--------------------------------------|
|                                 1992 |
|                                 1997 |
|                                 1998 |
|                                 1993 |
|                                 1996 |
|                                 1994 |
|                                 1995 |
+--------------------------------------+

WHERE 句の指定

以下の例では、 DIMENSIONS 句のディメンションを参照する WHERE 句を指定しています。

SELECT * FROM SEMANTIC_VIEW(
    tpch_analysis
    DIMENSIONS orders.order_date
    METRICS orders.average_line_items_per_order,
            orders.order_average_value
    WHERE orders.order_date > '1995-01-01'
  )
  ORDER BY order_date ASC
  LIMIT 5;
Copy
+------------+------------------------------+---------------------+
| ORDER_DATE | AVERAGE_LINE_ITEMS_PER_ORDER | ORDER_AVERAGE_VALUE |
|------------+------------------------------+---------------------|
| 1995-01-02 |                     3.884547 |     151237.54900533 |
| 1995-01-03 |                     3.894819 |     145751.84384615 |
| 1995-01-04 |                     3.838863 |     145331.39167457 |
| 1995-01-05 |                     4.040689 |     150723.67353678 |
| 1995-01-06 |                     3.990755 |     152786.54109399 |
+------------+------------------------------+---------------------+

出力中の重複列名の処理

出力列は、メトリクスとディメンションの修飾されていない名前を使用します。同じ名前を持つ複数のメトリクスやディメンションがある場合、複数の列が同じ名前を使用します。

これを回避するには、テーブルエイリアスを使用して列に異なる名前を割り当てます。

例えば、次のようなセマンティック・ビューを定義し、ディメンション nation.nameregion.name を定義するとします。

CREATE OR REPLACE SEMANTIC VIEW duplicate_names

  TABLES (
    nation AS SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.NATION PRIMARY KEY (n_nationkey),
    region AS SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.REGION PRIMARY KEY (r_regionkey)
  )

  RELATIONSHIPS (
    nation (n_regionkey) REFERENCES region
  )

  DIMENSIONS (
    nation.name AS nation.n_name,
    region.name AS region.r_name
  );
Copy

このビューにクエリを実行し、これら 2 つのディメンションを選択すると、 name という 2 つの列が出力されます (修飾子はありません)。

SELECT * FROM SEMANTIC_VIEW(
    duplicate_names
    DIMENSIONS nation.name, region.name
  );
Copy
+----------------+-------------+
| NAME           | NAME        |
+----------------+-------------+
| BRAZIL         | AMERICA     |
| MOROCCO        | AFRICA      |
| UNITED KINGDOM | EUROPE      |
| IRAN           | MIDDLE EAST |
| FRANCE         | EUROPE      |
| ...            | ...         |
+----------------+-------------+

列を曖昧にしないためには、テーブルのエイリアスを使用して異なる列名を割り当てます (例えば、 nation_nameregion_name)。

SELECT * FROM SEMANTIC_VIEW(
    duplicate_names
    DIMENSIONS nation.name, region.name
  ) AS table_alias(nation_name, region_name);
Copy
+----------------+-------------+
| NATION_NAME    | REGION_NAME |
+----------------+-------------+
| BRAZIL         | AMERICA     |
| MOROCCO        | AFRICA      |
| UNITED KINGDOM | EUROPE      |
| IRAN           | MIDDLE EAST |
| FRANCE         | EUROPE      |
| ...            | ...         |
+----------------+-------------+