1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

執筆日:2025年12月10日

免責事項     本記事は執筆時点の情報に基づいています。内容は将来変更される可能性があります。


はじめまして。本ブログを閲覧いただきありがとうございます。株式会社NTTデータ九州ビジネス共創部デジタルビジネス推進室D&Iチームの五嶋です。
D&Iチームでは、TableauやAlteryx、SnowflakeなどのD&I(データ&インテリジェンス)領域におけるツール導入支援や開発を通じて、お客様の業務/意思決定の効率化・高度化のご支援に取り組んでいます。

今回は、AI×データ利活用をテーマにSnowflake Intelligence使ってe-Statのデータを自然言語でグラフ化するまでを実施しました。

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

1-10_SetUp.png

/* ===================================================== 
   事前設定 
===================================================== */ 

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)をグラフ化します。

国勢調査 時系列データ CSV形式による主要時系列データ

2-1_DB_Create_estat.png

SnowSightに戻り「カタログ」 > 「データベースエクスプローラー」を選択します。

画面右上の「+データベース」を押下します。

2-2_DB_Create2.png

任意のデータベース名を入力し、「作成」を押下します。

2-3_DB_Create3.png

画面左側で先ほど作成したデータベースを選択し、テーブルを作成したいスキーマを選択します。今回はスキーマ作成せずにPUBLICを選択しています。

画面右上の「作成」を押下し、「テーブル」>「ファイルから」を選択します。

2-4_table_Create.png

e-Statから取得したCSVファイルをロードします。

任意のテーブル名を入力し、「次へ」を押下します。

2-5_table_Create2.png

読み込んだCSVのプレビュー画面が表示されます。

列名等に任意の値を入力し、問題なければ右下の「ロード」を押下します。

※以下のように列データが文字化けしている場合は、ロードするCSVファイルを

 サクラエディタ等で開き、UTF-8で保存しなおすと解決する場合があります。

2-6_table_Create3.png

3.Cortex検索サービスの作成

画面左側の「AIとML」>「Cortex検索」を選択します。

3-1_Cortex_Search.png

画面右上の「作成」を押下する。

3-2_Cortex_Search_create.png

Cortex検索サービスを作成したいデータベース・スキーマを選択します。ここでは、先ほど作成したTEST.PUBLICを選択しています。

任意の名前をサービス名へ入力し、「次へ」を押下します。

3-3_Cortex_Search_create2.png

検索サービスに使用したいデータ(テーブル)を選択し、「次へ」を押下します。

ここではe-Statから取得した人口データの「POPULATION」を選択しています。

3-4_Cortex_Search_create3.png

検索列に設定したい項目を選択し、「次へ」を押下します。

ここでは都道府県名が入っている「PREF_NAME」を選択しています。

3-5_Cortex_Search_SelectCol.png

属性列として使用したい項目を選択し、「次へ」を押下します。

ここでは人口(合計)・人口(男)・人口(女)である「POPULATION_TOTAL」、「POPULATION_MALE」、「POPULATION_FEMALE」を選択しています。

3-6_Cortex_Search_SelectFilterCol.png

検索インデックスに含める列を選択し、「次へ」を押下します。

ここでは特に選択はしていません。

3-7_Cortex_Search_SelectIdxCol.png

任意のターゲットラグ・埋め込みモデル・ウェアハウスを選択し、「作成」を押下します。

3-8_Cortex_Search_config.png

4.セマンティックビューの作成

事前準備として以下のクエリを実行します。

このクエリを実行することでSnowflake Intelligence未対応のリージョンでも、

エラーが発生することなく実行可能となります。

ALTER ACCOUNT SET CORTEX_ENABLED_CROSS_REGION = 'ANY_REGION';

画面左側の「AIとML」>「Cortex分析」を選択します。

4-1_Cortex_Analytics_create.png

画面右上の「新規作成」の▽を押下し、「新しいセマンティックビューを作成」を選択します。

4-2_Cortex_Analytics_create2.png

任意の保管場所・名前・説明を入力し、「次へ」を押下します。

4-3_Cortex_Analytics_create3.png

オプションの設定画面が表示されますが、今回は「スキップ」を押下します。

4-4_Cortex_Analytics_option.png

ユーザーの回答に必要なテーブルを選択し、「次へ」を選択します。

ここではe-Statから取得した人口データの「POPULATION」を選択しています。

4-5_Cortex_Analytics_SelectTable.png

ユーザーの回答に必要な列を選択し、「作成して保存」を押下します。

ここでは全ての列を選択しています。

4-6_Cortex_Analytics_SelectCol.png

5.Agentの設定

画面左側の「AIとML」>「エージェント」を選択します。

5-1_Agent_Create.png

画面右上の「エージェントを作成」を押下します。

表示された画面で任意のエージェント名・表示名を入力し、「エージェントを作成」を押下します。

5-2_Agent_Create2.png

作成後に表示された画面の「ツール」タブを選択します。

Cortexアナリストの「+追加」を押下します。

5-3_Agent_config.png

先ほど作成したセマンティックビューを選択します。

また、任意の名前・説明を入力します。

その他の設定はそのままで「追加」を押下します。

5-4_Agent_analyst.png

次にCortex検索サービスの「+追加」を押下します。

5-5_Agent_config.png

先ほど作成したCortex検索サービスを選択します。

また、Tool detailsに任意の名前・説明を入力します。

その他の設定はそのままで「追加」を押下します。

5-6_Agent_cortex.png

設定したCortexアナリストとCortex検索サービスが追加されていることを確認し、

画面右上の「保存」を押下します。

5-7_Agent_config.png

6.Snowflake Intelligenceを利用してグラフ化

画面左側の「AIとML」>「Snowflake Intelligence」を選択します。

6-1_Snowflake_Intelligence.png

以下のような画面が表示されるので、質問を入力します。

ここでは例として「福岡県の人口推移をグラフで表してください。」と聞いてみます。

6-2_Snowflake_Intelligence2.png

しばらく待つと、以下のように回答が返ってきます。

6-3_Snowflake_Intelligence_result.png

6-4_Snowflake_Intelligence_result2.png

表示された「Show Details」を押下するとグラフを作成したツールやSQLが確認できます。

6-4_Snowflake_Intelligence_result3.png

6-4_Snowflake_Intelligence_result4.png

おわりに

Snowflake Intelligenceでe-Statのデータをグラフ化するまでを実施しました。

実際に自然言語で簡単にグラフ化できる事を体験し、今後のデータ活用が、さらに加速し、意思決定の質とスピードが向上する可能性を実感しました。特に、AIがグラフ化に至るプロセスや生成されたSQLを確認できる点は、ブラックボックス化しがちな他のAI機能とは一線を画す、価値のある特徴だと思いました。

一方で、こうした価値を最大化するにはデータ設計やガバナンス、セキュリティに関する知識やスキルの強化が不可欠です。今後も、AI活用のノウハウを学びながら、データドリブンな意思決定を支える取り組みを行っていきます。

本記事が、自然言語によるデータ分析に興味を持つ方々の参考になれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?