はじめに
はじめまして。otoyaという名前で活動しているデータエンジニアです。
普段は社内外のデータ基盤の構築、修正、リプレイスなど幅広い業務に携わっています。
最近Xで投稿することがあるので、もしよければフォローをお願いします。
リンクはこちら
今回、Signateの第4回金融データ活用チャレンジに参加し、そこでsnowflakeのトライアルを利用しました。
今回は折角なので、snowflakeのトライアルで最初に何をしたのか紹介しようと思います。
一度前職の時にsnowflakeのトライアルをしたのですが、そこでは記録すら残せていなかったので💦
出来ることで各社の問題ややりたいことに合わせて試行錯誤いただけると嬉しいです!
⚠️ 割と基礎的な中身が多いです
1. 環境準備
下記を準備(確認)しました。
- Snowflakeアカウント: (トライアルに申込した方はあるはずです!)
-
ウェアハウス:
COMPUTE_WH(これはデフォで作成されています。) -
データベース:
SIGNATE_FINDATA_CHALLENGE -
スキーマ:
SIGNATE_FINDATA_CHALLENGE.ANALYTICS(データベース内のフォルダのようなものです)
ワークスペースで以下のSQLを実行して、データベースとスキーマを作成します。
-- データベースの作成
CREATE DATABASE IF NOT EXISTS SIGNATE_FINDATA_CHALLENGE;
-- スキーマの作成
CREATE SCHEMA IF NOT EXISTS SIGNATE_FINDATA_CHALLENGE.ANALYTICS;
-- 分析用ウェアハウスの確認 (COMPUTE_WHはデフォルトで作成されています。こちらのウェアハウスの稼働時間によって課金されます。)
SHOW WAREHOUSES LIKE 'COMPUTE_WH';
改めて感じましたが、warehouseを分けてそれぞれで管理できるのは非常に便利ですよね。
非エンジニア/エンジニアもですが、プロジェクト単位でも計算リソースを分けたりできるので
非常に計算がしやすくなりそう、、、
(snowflakeは計算するときのリソースをwarehouseと呼び、その性能(単価)×実行時間で金額が決まります)
2. データのロード
データをSnowflakeに取り込みます。
今回は手動での取り込みを行います。他にもsnowpipeやその他ETL/ELTツールを使って流し込みすることも可能です。
ETL/ELTを試したい方はそれぞれでお調べいただくことがGoodかと!
構造化データ
-
テーブル定義: CSVの中身に合わせてテーブル枠を作成します。(以下は例です。実際のカラム名に合わせて調整してください)
CREATE OR REPLACE TABLE SIGNATE_FINDATA_CHALLENGE.ANALYTICS.FINANCIAL_DATA ( company_id VARCHAR, year INTEGER, sales FLOAT, profit FLOAT, -- 他のカラムもここに追加 description VARCHAR -- 企業概要テキストなど ); -
データのアップロード:
Snowsight画面左メニューの "Database Explorer" > "作成したSCHEMA" > “Create(ファイル)"

非構造化データ
非構造化データの格納するには下記のステップを挟みます。
-
ステージを作成(外部ストレージの連携したいならurlを指定してください
-- 必要であればUSEデータでデータベースを指定する CREATE STAGE ANALYTICS_STAGE directory = (enable = true); -
そのステージにデータを追加する
外部ストレージならこの処理はSkipできます -
データを取得
-- ステージに溜まっているファイルの一覧 SELECT * FROM DIRECTORY(@ANALYTICS_STAGE);
これらの利用などはファイル関数などで利用できます
3. 初期のデータ確認
ワークスペースに移動、下記のコードを実行
-- データの中身を10件だけ見る
SELECT * FROM SIGNATE_FINDATA_CHALLENGE.ANALYTICS.FINANCIAL_DATA LIMIT 10;
アウトプットがこちらで確認できます。
(データ保護のためモザイクしていますが、下にデータとそのデータの分布がわかるようになっています)

また、Chartボタンを押すと作成グラフからデータの可視化が行えます。

4. Streamlit in Snowflake
データを可視化するWebアプリを構築します。
-
Snowsight左メニュー "Projects" -> "Streamlit" -> "+ Streamlit App" をクリック。
-
アプリの詳細を指定
App title: アプリ名
App location: どのデータスキーマを参照するか
Python environment: コンテナ上で実行 or ウェアハウスで実行
この辺りはどこかでまた別でお伝えします。ひとまずウェアハウスでいいかなと -
エディタが開くので、以下のコードを貼り付けて「Run」を押します。
(ここで分析が沢山できます)
import streamlit as st
from snowflake.snowpark.context import get_active_session
# セッション取得
session = get_active_session()
# タイトル
st.title("Financial Data Challenge 🚀")
# 文章
st.write("金融データ活用チャレンジに向けた分析アプリ")
# データの取得
df = session.sql("SELECT * FROM SIGNATE_FINDATA_CHALLENGE.ANALYTICS.FINANCIAL_DATA LIMIT 100").to_pandas()
# データ表示
st.dataframe(df, use_container_width=True)
Git Repositoryを使う場合、作成した後にConnect Git Repositoryというボタンで接続できます。
5. Cortex AI
ワークスペース内で利用する場合
下記のようなSQLの書き方でも作成することが出来ます。
-- Llama 3 を使って質問する
SELECT SNOWFLAKE.CORTEX.COMPLETE(
'llama3-8b',
'財務諸表から企業の将来性を分析する際、特に注目すべき指標は何ですか?日本語で3つ教えてください。'
) AS ai_response;
下記のようにしてCortex AIの関数をテキスト列に利用することもできます。
SELECT
company_id,
SNOWFLAKE.CORTEX.SUMMARIZE(description) AS summary
FROM SIGNATE_FINDATA_CHALLENGE.ANALYTICS.FINANCIAL_DATA
LIMIT 5;
ワークスペース外で利用する場合 (AI&MLボタンを押して作業)
下記は左側ツールバー > AI&ML以降のボタンから選択できるものです!
Agent
Agentを作成して、こちらでデータについて色々質問することが出来ます。
(これは非エンジニア/社内データに明るくない方からするとすごくありがたいかと勝手に思ってます)

Cortex Analyst
構造化データの分析などを行うものになります
Semantic View
ビジネスでの内容とそれに合った処理を結びつけてくれるレイヤー(Semantic layer)を構築できます。
対象となるテーブルやカラムを追加するだけで自動で生成してくれます。
※ もちろんこのメタデータは正しいわけではないので確認→調整してください!
調整は各データのEditボタンを入力、新規追加は+ボタンから追加で出来そうです
ちなみに、semantic layerの定義yamlファイルはこちらの構成になっていました。
使うツールなどでsemantic layerの書き方にも流派があるので気をつけてください。
name: semantic view name
description: ここにセマンティックレイヤーの説明が入ります。
tables:
- name: テーブル名
description: テーブルの説明
base_table:
database: データベース名
schema: スキーマ名
table: テーブル名
dimensions:
- name: COMPANY_CODE
description: コード
expr: COMPANY_CODE
data_type: VARCHAR(16777216)
sample_values:
- '12044'
****** (中略) ******
facts:
- name: CAPITAL_BILLION_YEN
description: 資本金(億円)
expr: CAPITAL_BILLION_YEN
data_type: FLOAT
access_modifier: public_access
sample_values:
- '14'
- '12'
- '1.9'
****** (後略) ******
下記の整理でまとめられます。
そもそもの動作原理が違うので、ご承知おきいただけるといいかと!
| 項目 | Cortex Analyst | Cortex Agent (Search / API) |
|---|---|---|
| 対象データ | 構造化データ | 非構造化データ |
| 動作原理 | セマンティックモデルによるText-to-SQL | RAGによる情報抽出 |
| 出力の強み | 1円単位の正確な数値とグラフ | 複数資料をまたいだ要約・解説 |
その他にもCortex SearchやCortex Evaluationなどがありますが、ひとまずこちらはまた時間ある時に見てみようと思います。
6. Machine Learning機能
モデル
Transformerモデルなどを利用することが出来そうです。
こちらはHugging Faceのトークンが必要なので、こちらを取得するようにしてください。
(取得は結構簡単なので方法については他記事に出ていると思います)

こちらの活用についてはまた時間がある時にでも、記事にまとめようと思います。
他にもたくさんの機能があるので、それぞれの使い方などは別でご紹介したいと思います!
皆さんもいいsnowflakeライフをお過ごしください〜!

