執筆日:2025年12月10日
免責事項 本記事は執筆時点の情報に基づいています。内容は将来変更される可能性があります。
はじめまして。本ブログを閲覧いただきありがとうございます。株式会社NTTデータ九州ビジネス共創部デジタルビジネス推進室D&Iチームの五嶋です。
D&Iチームでは、TableauやAlteryx、SnowflakeなどのD&I(データ&インテリジェンス)領域におけるツール導入支援や開発を通じて、お客様の業務/意思決定の効率化・高度化のご支援に取り組んでいます。
今回は、AI×データ利活用をテーマにSnowflake Intelligence使ってe-Statのデータを自然言語でグラフ化するまでを実施しました。
全体概要
Snowflake Intelligenceでグラフ化するまでの大きな流れは以下の通りです。主にSnowSightを利用して実施していきます。
1.Snowflake Intelligenceのセットアップ
2.データベースの作成
3.Cortex検索サービスの作成
4.セマンティックビューの作成
5.Agentの設定
6.Snowflake Intelligenceを利用してグラフ化
1.Snowflake Intelligenceのセットアップ
Snowflake Intelligenceで利用するデータベース、スキーマ、テーブル、ロールやウェアハウス等を作成するため、SnowSightのワークシートで以下のSQLを実行します。
/* =====================================================
事前設定
===================================================== */
USE ROLE accountadmin;
/* =====================================================
ロール
===================================================== */
CREATE ROLE snowflake_intelligence_admin_rl;
CREATE ROLE snowflake_intelligence_modeling_rl;
GRANT ROLE snowflake_intelligence_modeling_rl TO ROLE snowflake_intelligence_admin_rl;
GRANT ROLE snowflake_intelligence_admin_rl TO ROLE accountadmin;
CREATE ROLE snowflake_intelligence_ro_rl;
GRANT ROLE snowflake_intelligence_ro_rl TO ROLE snowflake_intelligence_modeling_rl;
/* =====================================================
ウェアハウス
===================================================== */
CREATE WAREHOUSE snowflake_intelligence_wh
WITH WAREHOUSE_SIZE = 'X-SMALL';
GRANT USAGE, OPERATE ON WAREHOUSE snowflake_intelligence_wh
TO ROLE snowflake_intelligence_admin_rl;
GRANT USAGE, OPERATE ON WAREHOUSE snowflake_intelligence_wh TO ROLE snowflake_intelligence_modeling_rl;
GRANT USAGE, OPERATE ON WAREHOUSE snowflake_intelligence_wh TO ROLE snowflake_intelligence_ro_rl;
/* =====================================================
データベース
==================================================== */
CREATE DATABASE snowflake_intelligence;
GRANT OWNERSHIP ON DATABASE snowflake_intelligence TO ROLE snowflake_intelligence_admin_rl;
/* =====================================================
動的ロール付与(そのまま)
==================================================== */
DECLARE
sql_command STRING;
BEGIN
sql_command := 'GRANT ROLE snowflake_intelligence_admin_rl TO USER "' || CURRENT_USER() || '";';
EXECUTE IMMEDIATE sql_command;
RETURN 'Role snowflake_intelligence_admin_rl granted successfully to user ' || CURRENT_USER();
END;
/* =====================================================
ステージ/スキーマ等のセットアップ
===================================================== */
USE ROLE snowflake_intelligence_admin_rl;
USE DATABASE snowflake_intelligence;
/* 一時ファイル用スキーマ */
CREATE OR REPLACE SCHEMA snowflake_intelligence.temp;
GRANT USAGE ON SCHEMA snowflake_intelligence.temp TO ROLE public;
/* コンフィグ用スキーマ */
CREATE SCHEMA IF NOT EXISTS config;
GRANT USAGE ON SCHEMA config TO ROLE snowflake_intelligence_modeling_rl;
GRANT USAGE ON SCHEMA config TO ROLE snowflake_intelligence_ro_rl;
USE SCHEMA config;
/* セマンティックモデル格納ステージ */
CREATE STAGE semantic_models
ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');
GRANT READ ON STAGE snowflake_intelligence.config.semantic_models TO ROLE snowflake_intelligence_modeling_rl;
GRANT READ ON STAGE snowflake_intelligence.config.semantic_models TO ROLE snowflake_intelligence_ro_rl;
-------------------------------
-------------------------------
-- Agent Table Configuration
-------------------------------
-------------------------------
/* =====================================================
0. 事前設定
===================================================== */
USE ROLE snowflake_intelligence_admin_rl;
/* =====================================================
1. エージェント用スキーマ
===================================================== */
CREATE SCHEMA IF NOT EXISTS snowflake_intelligence.agents;
/* スキーマは全員が discover 可能に */
GRANT USAGE ON SCHEMA snowflake_intelligence.agents TO ROLE public;
/* =====================================================
2. ROW ACCESS POLICY (行レベル権限制御)
===================================================== */
CREATE OR REPLACE ROW ACCESS POLICY snowflake_intelligence.agents.agent_policy
AS (grantee_roles ARRAY) RETURNS BOOLEAN ->
ARRAY_SIZE(
FILTER(
grantee_roles::ARRAY(VARCHAR),
role -> is_role_in_session(role)
)
) <> 0;
/* =====================================================
3. エージェント設定テーブル
===================================================== */
CREATE OR REPLACE TABLE snowflake_intelligence.agents.config (
agent_name VARCHAR NOT NULL,
agent_description VARCHAR,
grantee_roles ARRAY NOT NULL,
tools ARRAY,
tool_resources OBJECT,
tool_choice OBJECT,
response_instruction VARCHAR,
sample_questions ARRAY,
CONSTRAINT pk_agent_name PRIMARY KEY (agent_name)
)
WITH ROW ACCESS POLICY snowflake_intelligence.agents.agent_policy
ON (grantee_roles);
/* 権限付与 */
GRANT SELECT ON TABLE snowflake_intelligence.agents.config TO ROLE public;
GRANT UPDATE, INSERT ON TABLE snowflake_intelligence.agents.config TO ROLE snowflake_intelligence_modeling_rl;
/* =====================================================
4. フィードバックログ用スキーマ
===================================================== */
CREATE SCHEMA IF NOT EXISTS snowflake_intelligence.logs;
GRANT USAGE ON SCHEMA snowflake_intelligence.logs TO ROLE snowflake_intelligence_ro_rl;
/* =====================================================
5. フィードバック格納テーブル
===================================================== */
CREATE OR REPLACE TABLE snowflake_intelligence.logs.feedback (
entity_type VARCHAR NOT NULL,
username VARCHAR NOT NULL,
agent_name VARCHAR NOT NULL,
agent_session_id VARCHAR NOT NULL,
context VARIANT NOT NULL,
feedback_timestamp DATETIME NOT NULL,
feedback_categories VARIANT,
feedback_message VARCHAR,
message_id VARCHAR,
feedback_sentiment VARCHAR,
user_prompt VARIANT,
executed_queries ARRAY,
documents_returned ARRAY,
response_start_timestamp DATETIME,
response_end_timestamp DATETIME,
response_duration NUMBER
);
/* INSERT 権限は誰でも */
GRANT INSERT ON TABLE snowflake_intelligence.logs.feedback TO ROLE public;
2.データベースの作成
e-StatからSnowflakeに取り込みたいデータを取得します。
今回は国勢調査における日本の人口統計データ(CSV)をグラフ化します。
SnowSightに戻り「カタログ」 > 「データベースエクスプローラー」を選択します。
画面右上の「+データベース」を押下します。
任意のデータベース名を入力し、「作成」を押下します。
画面左側で先ほど作成したデータベースを選択し、テーブルを作成したいスキーマを選択します。今回はスキーマ作成せずにPUBLICを選択しています。
画面右上の「作成」を押下し、「テーブル」>「ファイルから」を選択します。
e-Statから取得したCSVファイルをロードします。
任意のテーブル名を入力し、「次へ」を押下します。
読み込んだCSVのプレビュー画面が表示されます。
列名等に任意の値を入力し、問題なければ右下の「ロード」を押下します。
※以下のように列データが文字化けしている場合は、ロードするCSVファイルを
サクラエディタ等で開き、UTF-8で保存しなおすと解決する場合があります。
3.Cortex検索サービスの作成
画面左側の「AIとML」>「Cortex検索」を選択します。
画面右上の「作成」を押下する。
Cortex検索サービスを作成したいデータベース・スキーマを選択します。ここでは、先ほど作成したTEST.PUBLICを選択しています。
任意の名前をサービス名へ入力し、「次へ」を押下します。
検索サービスに使用したいデータ(テーブル)を選択し、「次へ」を押下します。
ここではe-Statから取得した人口データの「POPULATION」を選択しています。
検索列に設定したい項目を選択し、「次へ」を押下します。
ここでは都道府県名が入っている「PREF_NAME」を選択しています。
属性列として使用したい項目を選択し、「次へ」を押下します。
ここでは人口(合計)・人口(男)・人口(女)である「POPULATION_TOTAL」、「POPULATION_MALE」、「POPULATION_FEMALE」を選択しています。
検索インデックスに含める列を選択し、「次へ」を押下します。
ここでは特に選択はしていません。
任意のターゲットラグ・埋め込みモデル・ウェアハウスを選択し、「作成」を押下します。
4.セマンティックビューの作成
事前準備として以下のクエリを実行します。
このクエリを実行することでSnowflake Intelligence未対応のリージョンでも、
エラーが発生することなく実行可能となります。
ALTER ACCOUNT SET CORTEX_ENABLED_CROSS_REGION = 'ANY_REGION';
画面左側の「AIとML」>「Cortex分析」を選択します。
画面右上の「新規作成」の▽を押下し、「新しいセマンティックビューを作成」を選択します。
任意の保管場所・名前・説明を入力し、「次へ」を押下します。
オプションの設定画面が表示されますが、今回は「スキップ」を押下します。
ユーザーの回答に必要なテーブルを選択し、「次へ」を選択します。
ここではe-Statから取得した人口データの「POPULATION」を選択しています。
ユーザーの回答に必要な列を選択し、「作成して保存」を押下します。
ここでは全ての列を選択しています。
5.Agentの設定
画面左側の「AIとML」>「エージェント」を選択します。
画面右上の「エージェントを作成」を押下します。
表示された画面で任意のエージェント名・表示名を入力し、「エージェントを作成」を押下します。
作成後に表示された画面の「ツール」タブを選択します。
Cortexアナリストの「+追加」を押下します。
先ほど作成したセマンティックビューを選択します。
また、任意の名前・説明を入力します。
その他の設定はそのままで「追加」を押下します。
次にCortex検索サービスの「+追加」を押下します。
先ほど作成したCortex検索サービスを選択します。
また、Tool detailsに任意の名前・説明を入力します。
その他の設定はそのままで「追加」を押下します。
設定したCortexアナリストとCortex検索サービスが追加されていることを確認し、
画面右上の「保存」を押下します。
6.Snowflake Intelligenceを利用してグラフ化
画面左側の「AIとML」>「Snowflake Intelligence」を選択します。
以下のような画面が表示されるので、質問を入力します。
ここでは例として「福岡県の人口推移をグラフで表してください。」と聞いてみます。
しばらく待つと、以下のように回答が返ってきます。
表示された「Show Details」を押下するとグラフを作成したツールやSQLが確認できます。
おわりに
Snowflake Intelligenceでe-Statのデータをグラフ化するまでを実施しました。
実際に自然言語で簡単にグラフ化できる事を体験し、今後のデータ活用が、さらに加速し、意思決定の質とスピードが向上する可能性を実感しました。特に、AIがグラフ化に至るプロセスや生成されたSQLを確認できる点は、ブラックボックス化しがちな他のAI機能とは一線を画す、価値のある特徴だと思いました。
一方で、こうした価値を最大化するにはデータ設計やガバナンス、セキュリティに関する知識やスキルの強化が不可欠です。今後も、AI活用のノウハウを学びながら、データドリブンな意思決定を支える取り組みを行っていきます。
本記事が、自然言語によるデータ分析に興味を持つ方々の参考になれば幸いです。

































