[新機能]Snowflake内でSELECT文やCortex Analystから利用可能なMetricsやDimensionを定義できる「Semantic View」を試してみた
さがらです。
先日、Snowflake内でSELECT文やCortex Analystから利用可能なディメンションやメジャーを定義できる「Semantic View」が一般提供となりました。併せて、Semantic Viewに対してSELECT文でクエリを発行できる機能もプレビューとなっています。
このSemantic Viewを実際に試してみたので、本記事でその内容をまとめてみます。
Semantic Viewとは
SnowflakeのSemantic Viewは、データベースに保存されている物理的なデータに対し、ビジネス上の意味(セマンティクス)を直接定義するための新しいオブジェクトです。
主に以下のようなメリットが得られる機能となっています。
- 一貫した定義の提供
- 「純利益 = 売上総利益 × (1 - 割引率)」のような計算式を一度定義すれば、組織内の誰がどのツールで分析しても、同じ基準で数値を算出できるため、レポートごとに指標の定義が異なるといった混乱を防ぐことにつながります。
- データの活用促進
- Cortex Analystを用いて自然言語でリクエストする際にデータを正確に解釈したり、BIツールでビジネスユーザーが定義済みの指標をSELECT文で簡単に利用できます。
- 技術者向けの効率化
- ビジネスロジックを一元管理できるため、同じような指標の定義が重複することを防ぎ、データモデルのメンテナンスを簡素化できます。
Semantic Viewは、主に以下の3つの要素で構成されます。分析の際には、主にMetricsとDimensionを組み合わせて使用します。
- Metrics
- 事業のパフォーマンスを測るための定量的な指標です。SUMやAVGなどの集計関数を用いて計算されます。(例:総売上、平均顧客単価)
- Dimensions
- Metricsを分析するための切り口を提供するカテゴリカルな属性です。「誰が、何を、どこで、いつ」といった分析軸を与えます。(例:地域、製品カテゴリ、日付)
- Facts
- MetricsやDimensionを構成するための元となる、行レベルの数値データです。(例:個々の販売額、購入数量)
以下のドキュメントも併せてご覧ください。
試す内容
公式チュートリアルの「Getting Started with Snowflake Semantic View」の内容に沿って、試していきます。
検証環境の準備
NotebookのダウンロードとSnowflakeへのアップロート
このチュートリアルで使用する、以下のリンク先の.ipynbファイルをダウンロードします。
その後、Snowflake内のNotebookの画面のImport .ipynb file
から、ダウンロードした.ipynbファイルをアップロードします。(Notebook location
などは任意の箇所を指定)
下図のようにNotebookが立ち上がれば、準備は完了です。
必要なデータベース・スキーマ・ビューの作成
まず、Step 1: Set up your Database and Schema
の以下のクエリを実行し、データベースとスキーマを作成します。
-- Create a new test database named SAMPLE_DATA
CREATE OR REPLACE DATABASE SAMPLE_DATA;
-- Use the newly created database
USE DATABASE SAMPLE_DATA;
-- Create a new schema named TPCDS_SF10TCL within SAMPLE_DATA
CREATE SCHEMA TPCDS_SF10TCL;
-- Set the context to use the new schema
USE SCHEMA TPCDS_SF10TCL;
次に、Step 2: Create Views from Sample Data
の以下のクエリを実行し、Snowflakeのサンプルデータに対するViewを作成します。
-- Create or replace views for the tables from SNOWFLAKE_SAMPLE_DATA.TPCDS_SF10TCL
CREATE OR REPLACE VIEW CUSTOMER AS
SELECT * FROM SNOWFLAKE_SAMPLE_DATA.TPCDS_SF10TCL.CUSTOMER;
CREATE OR REPLACE VIEW CUSTOMER_DEMOGRAPHICS AS
SELECT * FROM SNOWFLAKE_SAMPLE_DATA.TPCDS_SF10TCL.CUSTOMER_DEMOGRAPHICS;
CREATE OR REPLACE VIEW DATE_DIM AS
SELECT * FROM SNOWFLAKE_SAMPLE_DATA.TPCDS_SF10TCL.DATE_DIM;
CREATE OR REPLACE VIEW ITEM AS
SELECT * FROM SNOWFLAKE_SAMPLE_DATA.TPCDS_SF10TCL.ITEM;
CREATE OR REPLACE VIEW STORE AS
SELECT * FROM SNOWFLAKE_SAMPLE_DATA.TPCDS_SF10TCL.STORE;
CREATE OR REPLACE VIEW STORE_SALES AS
SELECT * FROM SNOWFLAKE_SAMPLE_DATA.TPCDS_SF10TCL.STORE_SALES;
Semantic Viewの定義
Semantic Viewの定義を行います。
まず、Step 3: Verify your Environment Setup
の以下のクエリを実行し、作成先のデータベース・スキーマと使用するウェアハウスを定義します。
-- Select the warehouse, database, and schema
USE WAREHOUSE COMPUTE_WH;
USE DATABASE SAMPLE_DATA;
USE SCHEMA TPCDS_SF10TCL;
-- Show all views in the current schema to verify creation
SHOW VIEWS;
次に、Step 4: Define the Semantic View
の以下のクエリを実行してSemantic Viewを定義します。
-- Switch to ACCOUNTADMIN role to create the semantic view
USE ROLE ACCOUNTADMIN;
-- Create or replace the semantic view named TPCDS_SEMANTIC_VIEW_SM
CREATE OR REPLACE SEMANTIC VIEW TPCDS_SEMANTIC_VIEW_SM
tables (
CUSTOMER primary key (C_CUSTOMER_SK),
DATE as DATE_DIM primary key (D_DATE_SK),
DEMO as CUSTOMER_DEMOGRAPHICS primary key (CD_DEMO_SK),
ITEM primary key (I_ITEM_SK),
STORE primary key (S_STORE_SK),
STORESALES as STORE_SALES
primary key (SS_SOLD_DATE_SK,SS_CDEMO_SK,SS_ITEM_SK,SS_STORE_SK,SS_CUSTOMER_SK)
)
relationships (
SALESTOCUSTOMER as STORESALES(SS_CUSTOMER_SK) references CUSTOMER(C_CUSTOMER_SK),
SALESTODATE as STORESALES(SS_SOLD_DATE_SK) references DATE(D_DATE_SK),
SALESTODEMO as STORESALES(SS_CDEMO_SK) references DEMO(CD_DEMO_SK),
SALESTOITEM as STORESALES(SS_ITEM_SK) references ITEM(I_ITEM_SK),
SALETOSTORE as STORESALES(SS_STORE_SK) references STORE(S_STORE_SK)
)
facts (
ITEM.COST as i_wholesale_cost,
ITEM.PRICE as i_current_price,
STORE.TAX_RATE as S_TAX_PERCENTAGE
)
dimensions (
CUSTOMER.BIRTHYEAR as C_BIRTH_YEAR,
CUSTOMER.COUNTRY as C_BIRTH_COUNTRY,
CUSTOMER.C_CUSTOMER_SK as c_customer_sk,
DATE.DATE as D_DATE,
DATE.D_DATE_SK as d_date_sk,
DATE.MONTH as D_MOY,
DATE.WEEK as D_WEEK_SEQ,
DATE.YEAR as D_YEAR,
DEMO.CD_DEMO_SK as cd_demo_sk,
DEMO.CREDIT_RATING as CD_CREDIT_RATING,
DEMO.MARITAL_STATUS as CD_MARITAL_STATUS,
ITEM.BRAND as I_BRAND,
ITEM.CATEGORY as I_CATEGORY,
ITEM.CLASS as I_CLASS,
ITEM.I_ITEM_SK as i_item_sk,
STORE.MARKET as S_MARKET_ID,
STORE.SQUAREFOOTAGE as S_FLOOR_SPACE,
STORE.STATE as S_STATE,
STORE.STORECOUNTRY as S_COUNTRY,
STORE.S_STORE_SK as s_store_sk,
STORESALES.SS_CDEMO_SK as ss_cdemo_sk,
STORESALES.SS_CUSTOMER_SK as ss_customer_sk,
STORESALES.SS_ITEM_SK as ss_item_sk,
STORESALES.SS_SOLD_DATE_SK as ss_sold_date_sk,
STORESALES.SS_STORE_SK as ss_store_sk
)
metrics (
STORESALES.TOTALCOST as SUM(item.cost),
STORESALES.TOTALSALESPRICE as SUM(SS_SALES_PRICE),
STORESALES.TOTALSALESQUANTITY as SUM(SS_QUANTITY)
WITH SYNONYMS = ( 'total sales quantity', 'total sales amount')
)
;
作成後、Step 6: Describe the Semantic View
の以下のクエリを実行すると、定義したDimensionとMetricsの一覧が確認可能です。
-- Describes the semantic view named TPCDS_SEMANTIC_VIEW_SM, and as a special bonus uses our new flow operator to filter and project only the metric and dimension names
DESC SEMANTIC VIEW TPCDS_SEMANTIC_VIEW_SM
->> SELECT "object_kind","property_value" as "parent_object","object_name" FROM $1
WHERE "object_kind" IN ('METRIC','DIMENSION') AND "property" IN ('TABLE')
;
Cortex Analystから自然言語でSemantic Viewに対して質問をしてみる
作成したSemantic Viewに対して、Cortex Analystから自然言語で質問をしてみます。
まず、Step 7: "Talk To" the Semantic View with Cortex Analyst
の以下のクエリを実行して、このSemantic Viewに対するCortex Analyst用のリンクを作成します。
SELECT 'https://app.snowflake.com/' || CURRENT_ORGANIZATION_NAME() || '/' || CURRENT_ACCOUNT_NAME() || '/#/studio/analyst/databases/SAMPLE_DATA/schemas/TPCDS_SF10TCL/semanticView/TPCDS_SEMANTIC_VIEW_SM/edit' AS RESULT;
続けて、Step 7: "Talk To" the Semantic View with Cortex Analyst
のpy_link
のPythonを実行します。
すると、下図のようにGo to Cortex Analyst
ボタンが表示されるため、これを押します。
Cortex Studio内でCortex Analystを起動した画面が立ち上がります。先程Semantic Viewで定義したDimension・Metrics・Relationshipの定義も確認できます。
次に、実際に右側のチャット欄から問合せをしてみます。
雑に、「このSemantic Viewではどういった情報が分析できますか」と質問してみると、下図のように結果が返ってきました。
もう1つ、「2003年に"TX"州で"Books"カテゴリの総販売数量が最も多かったブランドを教えてください。」と聞いてみると、下図のように実行したSQLと共に結果が返ってきました。
Semantic Viewに対するSELECT文を発行してみる
作成したSemantic Viewに対して、SELECT文を発行できるので、試してみます。(この機能は2025年6月6日時点はプレビュー機能です。)
Step 8: Query the Semantic View Using SQL
の以下のクエリを実行してみると、このように結果が返ってきました。
-- Query the semantic view to find top selling brands
SELECT * FROM SEMANTIC_VIEW
(
TPCDS_SEMANTIC_VIEW_SM
DIMENSIONS
Item.Brand,
Item.Category,
Date.Year,
Date.Month,
Store.State
METRICS
StoreSales.TotalSalesQuantity
WHERE
Date.Year = '2002' AND Date.Month = '12' AND Store.State ='TX' AND Item.Category = 'Books'
)
ORDER BY TotalSalesQuantity DESC LIMIT 10;
ワークシート上で実行すると、このようにグラフを作成することも出来ます。
最後に
Snowflake内でSELECT文やCortex Analystから利用可能なディメンションやメジャーを定義できる「Semantic View」が一般提供となりましたので、試してみました。
個人的には、SELECT文でクエリ出来るようになったのが本当に熱いですね!!Snowflakeは元々SQL APIなどを提供していたので、Snowflake外からもAPIを介してSemantic Viewで定義したDimensionとMetricsに対してクエリが可能です。