[新機能]Snowflake内でSELECT文やCortex Analystから利用可能なMetricsやDimensionを定義できる「Semantic View」を試してみた

[新機能]Snowflake内でSELECT文やCortex Analystから利用可能なMetricsやDimensionを定義できる「Semantic View」を試してみた

Clock Icon2025.06.06

さがらです。

先日、Snowflake内でSELECT文やCortex Analystから利用可能なディメンションやメジャーを定義できる「Semantic View」が一般提供となりました。併せて、Semantic Viewに対してSELECT文でクエリを発行できる機能もプレビューとなっています。

https://docs.snowflake.com/en/release-notes/2025/june-summit#defining-semantic-views-general-availability

この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を構成するための元となる、行レベルの数値データです。(例:個々の販売額、購入数量)

以下のドキュメントも併せてご覧ください。

https://docs.snowflake.com/en/user-guide/views-semantic/overview

試す内容

公式チュートリアルの「Getting Started with Snowflake Semantic View」の内容に沿って、試していきます。

検証環境の準備

NotebookのダウンロードとSnowflakeへのアップロート

このチュートリアルで使用する、以下のリンク先の.ipynbファイルをダウンロードします。

https://github.com/Snowflake-Labs/snowflake-demo-notebooks/blob/main/Snowflake_Semantic_View/getting-started-with-snowflake-semantic-view.ipynb

その後、Snowflake内のNotebookの画面のImport .ipynb fileから、ダウンロードした.ipynbファイルをアップロードします。(Notebook locationなどは任意の箇所を指定)

2025-06-06_09h38_51

2025-06-06_09h39_44

下図のようにNotebookが立ち上がれば、準備は完了です。

2025-06-06_09h40_57

必要なデータベース・スキーマ・ビューの作成

まず、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')
;

2025-06-06_14h20_06

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 Analystpy_linkのPythonを実行します。

すると、下図のようにGo to Cortex Analystボタンが表示されるため、これを押します。

2025-06-06_14h27_39

Cortex Studio内でCortex Analystを起動した画面が立ち上がります。先程Semantic Viewで定義したDimension・Metrics・Relationshipの定義も確認できます。

2025-06-06_14h29_39

2025-06-06_14h30_17

次に、実際に右側のチャット欄から問合せをしてみます。

雑に、「このSemantic Viewではどういった情報が分析できますか」と質問してみると、下図のように結果が返ってきました。

2025-06-06_14h31_58

もう1つ、「2003年に"TX"州で"Books"カテゴリの総販売数量が最も多かったブランドを教えてください。」と聞いてみると、下図のように実行したSQLと共に結果が返ってきました。

2025-06-06_14h36_52

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;

2025-06-06_14h40_07

ワークシート上で実行すると、このようにグラフを作成することも出来ます。

2025-06-06_14h44_45

最後に

Snowflake内でSELECT文やCortex Analystから利用可能なディメンションやメジャーを定義できる「Semantic View」が一般提供となりましたので、試してみました。

個人的には、SELECT文でクエリ出来るようになったのが本当に熱いですね!!Snowflakeは元々SQL APIなどを提供していたので、Snowflake外からもAPIを介してSemantic Viewで定義したDimensionとMetricsに対してクエリが可能です。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.