セマンティックビューのクエリ¶
セマンティックビューのクエリに必要な権限¶
セマンティック・ビューを所有していないロールを使用している場合、そのセマンティック・ビューをクエリするには、そのセマンティック・ビューに 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
);
+-------------------------+---------------------+
| 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;
出力では、最初の列がメートル法の列(
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;
出力では、最初の列がディメンションの列(
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
);
+----------------+
| 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
);
+-------------------------+---------------------+
| 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;
+--------------------+------------------------------+---------------------+
| 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)
);
+--------------------------------------+
| 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;
+------------+------------------------------+---------------------+
| 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.name
と region.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
);
このビューにクエリを実行し、これら 2 つのディメンションを選択すると、 name
という 2 つの列が出力されます (修飾子はありません)。
SELECT * FROM SEMANTIC_VIEW(
duplicate_names
DIMENSIONS nation.name, region.name
);
+----------------+-------------+
| NAME | NAME |
+----------------+-------------+
| BRAZIL | AMERICA |
| MOROCCO | AFRICA |
| UNITED KINGDOM | EUROPE |
| IRAN | MIDDLE EAST |
| FRANCE | EUROPE |
| ... | ... |
+----------------+-------------+
列を曖昧にしないためには、テーブルのエイリアスを使用して異なる列名を割り当てます (例えば、 nation_name
と region_name
)。
SELECT * FROM SEMANTIC_VIEW(
duplicate_names
DIMENSIONS nation.name, region.name
) AS table_alias(nation_name, region_name);
+----------------+-------------+
| NATION_NAME | REGION_NAME |
+----------------+-------------+
| BRAZIL | AMERICA |
| MOROCCO | AFRICA |
| UNITED KINGDOM | EUROPE |
| IRAN | MIDDLE EAST |
| FRANCE | EUROPE |
| ... | ... |
+----------------+-------------+