Snowflake Openflowで完結!データ連携からAI・可視化まで検証してみた

左手 克明

Katsuaki Sate

ソリューションビジネスユニット
ネットソリューション事業本部
ネットインテグレーション事業部 第6技術グループ
担当 / シニアマスター

  1. はじめに
  2. Snowflake Openflowとは?
  3. 今回の検証シナリオ:小売業でのSlackの活用
  4. 検証ステップ①:Snowflake OpenflowによるSlackデータ取り込み
  5. 検証ステップ②:蓄積したデータをCortex AIで分析
  6. 検証ステップ③:Streamlit in Snowflakeでダッシュボードとして表示
  7. まとめ
Twitter
Facebook
Hatena
Snowflake Openflowで完結!データ連携からAI・可視化まで検証してみた

はじめに

「Slackで活発にやり取りはしているけれど、結局その場限りで流れてしまっている」
このような悩みを持つ企業は少なくありません。日々の在庫調整や顧客対応、現場でのちょっとした気づき。こうしたチャット上のやり取りには、ビジネスを改善するヒントが詰まっています。
しかし、それらが活用されないままログの彼方に消えていくのは、企業にとって大きな損失です。
本記事では、Snowflake Openflowを活用して、Slackに眠るデータを自動で蓄積し、Cortex AIによる分析から可視化までをSnowflake内のリソースで完結する実践的なステップを解説します。
「データ連携⇒AI活用⇒可視化」までの形を一緒に体感してみましょう。

Snowflake Openflowとは?

Snowflake Openflowは、Apache NiFi をベースとした統合データフローサービスで、SaaSやデータベース、ファイルストレージなど多様なソースとSnowflakeを安全に接続できます。Snowflakeのセキュリティ・ガバナンスを維持したまま、ノーコードに近い操作でデータ連携を自動化できる点が特長です。

Snowflake Open flowアーキテクチャ

今回の検証シナリオ:小売業でのSlackの活用

今回は、架空の小売業を想定して、本部と店舗間で発生したSlack内のメッセージデータをSnowflake内で「データ連携⇒AI活用⇒可視化」までの形を下記検証ステップで実施します。

  • 検証ステップ①:Snowflake OpenFlowによるSlackデータ取り込み
    ⇒外部サーバーを介さず、ノーコードでメッセージ履歴をSnowflakeへ自動集約します。
  • 検証ステップ②:蓄積したデータをCortex AIで分析
    ⇒Cortex AI関数を使い、膨大なメッセージを「売上・KPI関連, 商品・在庫関連,顧客の声・CS」等に自動分類し、感情分析(ポジティブ/ネガティブ)を行います。
  • 検証ステップ③:Streamlit in Snowflakeでダッシュボード化
    ⇒分析結果をグラフィカルに表示し、現場の状況をひと目で把握できるようにします。

以下のような構成図で検証します。

検証ステップ①:Snowflake OpenflowによるSlackデータ取り込み

Snowflake Openflowを活用したデータ連携は、従来の複雑なシステム開発とは異なり、設定ベースで進めることができます。今回の検証でSlackからSnowflakeへのメッセージ連携の構築完了に至るまでの手順を簡潔に紹介いたします。

※手順詳細については下記Snowflake DOCUMENTATIONの記事をご確認ください。
Snowflake DOCUMENTATION_Openflowの設定とアクセス
Snowflake DOCUMENTATION_Openflowの設定 - Snowflakeデプロイメント - タスク概要
Snowflake DOCUMENTATION_Openflow Connector for Slack の設定

1. 事前準備(Slack側)
・Slackアプリの作成: Slack API サイトで新規アプリを作成します。

・権限付与とインストール: メッセージやファイルの読み取り権限(Scopes)を設定し、対象のワークスペースにアプリをインストールします。

・トークンの取得: 設定に必要な「Bot User OAuth Token」および「App-level Token」をメモしておきます

2. 環境設定(Snowflake側)
・ロールと権限の設定: ACCOUNTADMIN ロールなどを使用し、Snowflake Openflowの管理ロール(例: OPENFLOW_ADMIN)やコンピューティングプール作成権限を作成・付与します。

・外部アクセス統合の設定: SlackのAPIドメイン(slack.com 等)への通信を許可するための「ネットワークルール」と「外部アクセス統合」を作成します。

・Snowflake Openflowデプロイメントの作成: 今回はSnowpark Container Services (SPCS) 上で動作するSnowflake Openflowの実行環境(ランタイム)を立ち上げます。

3. コネクタの設定と実行(Snowflake Openflow画面)
・Slackコネクタの追加: Snowflake Openflowの「Featured connectors」から「Slack Connector」を選択し、作成したランタイムに追加します。

・パラメーターの設定: 取得したSlackのトークン、取り込み先のデータベース名、スキーマ名、ウェアハウスなどの情報を入力します。

○検証結果
Snowflake Openflowを利用するためのセットアップ実施することができました。
それではSlackからSnowflakeへの疎通確認を実施してみましょう。

Slackのメッセージが、テーブルに連携されていることが確認できます。

検証ステップ②:蓄積したデータをCortex AIで分析

○Cortex AI とは?
Cortex AIは、Snowflakeのクラウドデータプラットフォームに統合されたAI・機械学習機能です。データウェアハウス内のデータを外部に移動させることなく、SQLクエリだけで高度なAI処理を実行できる点が最大の特徴です。

○検証内容
今回のシナリオでは、Cortex AI関数の中でも以下の2つのアプローチでSnowflake Openflowで取り込んだSlackのメッセージからデータを構造化してみます。

① SNOWFLAKE.CORTEX.CLASSIFY_TEXT (カテゴリ分類)
役割: 膨大な未整理のメッセージをあらかじめ定義したカテゴリに自動で振り分けます。
本検証では、今回は下記カテゴリで指定しております。

  • 売上・KPI関連
  • 商品・在庫関連
  • VMD・売場作り
  • 顧客の声・CS
  • 運営・設備・人事
  • その他

この分析の狙いは、店舗で「今、何に関する話題が多いのか」というトレンドを即座に特定できるようにすることです。

■SQL

SELECT
    TEXT,
    SNOWFLAKE.CORTEX.CLASSIFY_TEXT(
        TEXT,
        ['売上・KPI関連', '商品・在庫関連', 'VMD・売場作り', '顧客の声・CS', '運営・設備・人事', 'その他']
    ) AS category_result
FROM SPCS_SLACK_DB.SPCSDEMO_CHANNEL.SLACK_MESSAGES;

それでは、クエリを実行してみます。

○検証結果

Slackで取得したメッセージ内に含まれるテキスト情報から、よしなに解釈し、今回指定したカテゴリに分類することが確認できます。精度としても、今回検証したテストメッセージの内容に即したカテゴリに分類した回答を返してくれます。

② SNOWFLAKE.CORTEX.COMPLETE (AI分析)
役割: プロンプトを与えると、サポートされている言語モデルの中から選択したものを使用して応答(完了)を生成します。
Snowflake内にも感情分析に特化したAI関数である「AI_SENTIMENT」がありますが、日本語未対応で、テキストから変換をせずに使用することができないため、今回は「AI_COMPLETE」を使用して、スコアを「AI_SENTIMENT」のように「-1.0~1.0」でスコアリングしてみます。スコアリングするだけでは、情報として扱いづらいため、以下のようにある程度基準を設けて、
「😊 ポジティブ」「😐 中立」「😟 ネガティブ」の3段階のネガポ分析を実施してみます。

表:感情分析スコア

ネガポカテゴリ感情スコア
😊 ポジティブ感情スコア >= 0.3
😐 中立-0.3 < 感情スコア < 0.3
😟 ネガティブ感情スコア <= -0.3

この分析の狙いは、店舗で抱えている課題や不満、顧客からのクレームによる「現場の切迫度」を数値化し、メッセージの内容について、良い知らせ・悪い知らせなのかを明らかにしてみることです。

■SQL

WITH sentiment_analysis AS (
    SELECT
        TEXT,
        TRY_CAST(
            SNOWFLAKE.CORTEX.COMPLETE(
                'llama3.1-70b',
                CONCAT(
                    'あなたは日本語テキスト分析の感情分析専門家です。',
                    '小売店舗からのSlack報告メッセージの感情を分析してください。',
                    '以下の日本語テキストの感情スコアを出力してください:',
                    '1. テキストをよく読み、文脈から真の感情を判定する',
                    '2. 敬語や謙虚な表現に惑わされず、報告内容の実質的な感情を判断する',
                    '3. スコアのみを数値で返す(-1.0(極度にネガティブ)~ +1.0(極度にポジティブ))',
                    '4. 数値のみを出力。説明は不要',
                    'テキスト:', TEXT
                )
            ) AS FLOAT
        ) AS "感情スコア"
    FROM SPCS_SLACK_DB.SPCSDEMO_CHANNEL.SLACK_MESSAGES
)
SELECT
    TEXT,
    "感情スコア",
    CASE
        WHEN "感情スコア" >= 0.3 THEN '😊 ポジティブ'
        WHEN "感情スコア" <= -0.3 THEN '😟 ネガティブ'
        ELSE '😐 中立'
    END AS "ネガポカテゴリ"
FROM sentiment_analysis;

また、今回使用する言語モデルは、Meta AIの「llama3.3-70b」を採用しています。
以下が、採用理由です。

  • 現在使用しているSnowflakeのリージョンがAWS の東京リージョン(ap-northeast-1)を使用しているため、クロスリージョンを使用しなくても使用可能。
  • 多言語対話、テキストの要約、複雑な推論などを得意としている。

それでは、クエリを実行してみます。

○検証結果

検証結果ですが、Slackのメッセージから「ネガポカテゴリ」と「感情スコア」の出力が確認できております。
精度としても、今回検証したテストメッセージの内容に即したネガポカテゴリに分類ができていることを確認できます。

それでは、この2つの検証結果を用いて、Streamlit in Snowflakeでダッシュボード化してみましょう。

検証ステップ③:Streamlit in Snowflakeでダッシュボードとして表示

検証ステップ②で検証した内容を基に、Streamlit in Snowflakeで「店舗報告分析」のダッシュボードを作成してみます。
○Streamlit in Snowflakeとは?
Pythonのオープンソースライブラリ「Streamlit」をSnowflake上で構築、展開、共有することが可能な機能です。
Pythonのコードを書くだけで、フロントエンドの知識がなくてもインタラクティブなWebアプリやダッシュボードを迅速に作成できるのが特徴です。

○検証内容
検証ステップ②で実施した「カテゴリ分類」と「AI分析」の内容を、下記構成で作成してみます。

  • サマリー(総報告数、最多カテゴリ、😊 ポジティブ、😐 中立、😟 ネガティブ)
  • カテゴリ別報告数
  • 感情別報告数
  • 全報告一覧(CSVダウンロード機能付き)

○検証結果
※下記画像2枚はクリックすると、拡大することができます!

上記画像のように、今回のデータがPOPなダッシュボードに実装することができました。
これにより、Slackで連携されたデータを可視化することができる環境ができ、報告内容の分析が可能になります。そこで、追加で「データ連携⇒AI活用⇒可視化」にかかる時間を測定してみました。Slackメッセージを送信し、ダッシュボードから新しいデータを確認できるまでの時間は検証したところ「約3分程度」でニアリアルな連携を可能にしていました。

まとめ

本記事では、Snowflake Openflow【SPCS版】を活用し、「データ連携⇒AI活用⇒可視化」 まで Snowflake 内で完結させる実践例を紹介しました。
本検証で、Snowflake Openflowは、AI活用までのデータ連携パイプラインの構築にかかる時間的ハードルを下げられると実感いたしました。

富士ソフトでは、データ基盤構築、データ連携、AI活用、可視化までを一貫してご支援しています。
「業務データを活かしきれていない」
「AI活用に関心はあるが具体的な進め方が分からない ――」
そのような課題をお持ちの場合、お客様の業務やデータ特性に合わせたPoCや導入支援も可能です。
本記事が、データ活用・AI活用を次のステージへ進めるきっかけとなれば幸いです。

この記事の執筆者

左手 克明Katsuaki Sate

ソリューションビジネスユニット
ネットソリューション事業本部
ネットインテグレーション事業部 第6技術グループ
担当 / シニアマスター

Snowflake