Python

Streamlit in SnowflakeによるStreamlitアプリケーション作成

こんにちは、エクスチュアの石原です。

前回に引き続き、Pythonスクリプトを使ってシンプルかつ迅速にインタラクティブなウェブアプリケーションを作成するためのオープンソースフレームワークStreamlitを使用したアプリケーション作成についてご紹介します。

前回の記事をご覧になってない方はぜひ併せてお読みください。

前回の記事で、アプリケーションの作成方法を紹介しました。アプリケーションを完成させたら、次のステップとしてはメンバーに公開する必要があります。通常、これにはWebサーバーへのデプロイが必要ですが、これが意外と手間がかかります。

Streamlit in Snowflake

今回紹介するのがStreamlit in Snowflake(SIS)です。これを使えば、公開のためのデプロイの手間を大幅に減らすことができます。

Streamlit in Snowflakeのメリット

追加インフラなしでの迅速かつ簡単なデプロイ
SISを利用することで、Snowflake上のデータ基盤を活かして、インタラクティブな操作UIやデータ分析機能を迅速に構築・デプロイできます。新たなインフラを追加することなく、プロジェクトの初期段階からアジャイル開発をスピーディに進めることが可能です。

セキュリティの確保とデータアクセスの制御
Snowflake上でのデータ管理は、ロールに基づいており、SISもこれを継承します。これにより、ユーザーはデータガバナンスを確保しながら許可された範囲内でのみデータセットにアクセスできます。セキュリティリスクへ頭を悩ませることなく、アプリケーション開発やデータ分析に集中してプロジェクトを進めることができます。

Snowflakeのマシンパワーを活用した分析とアプリケーション化
SISを使用すると、Snowflakeで用意したウェアハウスの強力な計算能力を活かしてSnowpark MLなどの分析を行い、その結果をSnowflake内で直接アプリケーションとして表示することが可能です。データ基盤の構築からデータ分析・可視化・インタラクティブな操作までを一貫してSnowflake内で完結できるのは、SISならではの強みです。

Streamlit in Snowflakeでの制限

残念ながら、SISでのアプリケーション開発にはいくつかの制限があります。特に開発済みのStreamlitアプリをデプロイする場合は使用しているStreamlit機能が対応しているのかどうかを確認する必要があります。

アカウント制限

  • 対応リージョン:AWS、Azure、GCP
  • 非対応リージョン:US政府のFedRAMP対応、PrivateLink

非対応のStreamlit機能

  • st.file_uploader:ファイルアップロード
  • st.camera_input:カメラ入力
  • st.bokeh_chart:Bokehチャート
  • st.set_page_config:ページ設定
  • 一部カスタムテーマ
  • Versionの違いによる一部の機能
Streamlit in Snowflakeでの最新バージョン
streamlit公式サイトでの最新バージョン

外部リソース読み込み制限

  • 外部ドメインからのコード読み込み不可
  • Mapboxの一部リソースはサポート

その他の制限

  • データ取得:32MB制限
  • サーバーサイド暗号化ステージ:未サポート
  • キャッシュ機能:スクリプトキャッシュ未サポート、キャッシュタイムアウト最大1時間

詳細はこちらで確認してください。

Snowsightでのアプリ作成

実際にSnowsightを使用してSISアプリを作成する画面をお見せします。UI上で簡単にアプリケーション開発ができます。

まずはCREATE STREAMLIT権限をもつユーザでSnowsightにログインします。

次にプロジェクト→Streamlitを選択し、右上の+Streamlitアプリを選択してください。

クリックすると次のアプリ作成ウィンドウが開きます。

アプリケーション作成ウインドウでアプリタイトル、ウェアハウス、データベース、スキーマを設定して作成を実行してください。

するとサンプルスクリプトが記載されたアプリケーション作成画面とそのアプリケーションのプレビュー実行画面が表示されます。

Snowflake上のDBへアクセスする必要のないローカルなStreamlitアプリケーションであればコピペするだけでも作成することが出来ます。

外部のモジュールを使用する場合、エディタ画面のパッケージから追加することが出来ます。バージョン管理もこちらから設定できます。

作成したアプリケーションを表示するには再度プロジェクト→Streamlitから作成したアプリケーションを選択するとビュー画面が表示されます。編集ボタンを押すと再度エディタ画面になります。

共有を押すとロールを選択し、表示可能なロールを変更したり、URLにて表示可能なユーザのアクセスを実施することが出来ます(SISアプリを表示するためにはSnowflakeアカウントが必要になります)

Snowsightでの作成でできないこと

Streamlitには機能ごとにページを別のファイルで管理するものとしてマルチページという機能があります。

https://docs.streamlit.io/develop/concepts/multipage-apps

サイドバーに表示されるページ名をクリックすることでページ遷移することが出来ます。また、ボタンのクリックなどのイベントでの移動なども可能です。

SISでもマルチページを使用することはできますが、上記のようにSnowsightで作成する場合はマルチページを持つアプリケーションは作成できません。Snowsightではメインとなるファイル(上記の例で言うとapp.py)だけ編集可能という形になっています。

SISでマルチページなアプリケーションを作成する場合はローカルでマルチページアプリケーションを作成し、Snowflake上に移植することで実現することが出来ます。

ローカルで作成したStreamlitアプリのデプロイ

次にローカルで作成したアプリケーションをデプロイする方法についてご紹介します。(マルチページを持つアプリケーションは2024年8月現在ではこちらの方法で作成する必要があります。)

デプロイの手順

  1. アプリの作成
  2. SnowFlakeにアプリケーションファイルのアップロード
  3. Streamlitオブジェクトを作成する

デプロイの実例

前回のサンプルアプリケーションを実際にSISアプリとしてデプロイしてみます。

ディレクトリ構造

今回アップするアプリのディレクトリ構造は次のようになっています。

└── streamlit_test/
 └── environment.yml # 必要に応じて追加
 └── app.py
 └── pages/
  └── page1.py
  └── page2.py

外部パッケージを追加する場合、下記のようなenvironment.ymlを作成してください。

name: app_env
channels:
- snowflake
dependencies:
- pandas

アプリケーションファイルのアップロード

ファイルの作成が完了したら、Snowflake上にアップします。

  1. Snowsightへのファイルのステージング
  2. SnowSQLを使用してアップロード

今回の例では1の方法を使用してアップロードしてみます。2の方法についてはこちらをご参照ください。

Snowsightにログインし、作成→ステージ→Snowflake管理を選択します。

ステージの作成ダイアログからステージを作成してください。

ディレクトリテーブルを有効にすることでステージ上のファイルを表示できますが、ウェアハウスが必要なのでコストが発生します。また、後からオプションで有効化することが出来ます。

STAGEを作成後、データ→データを追加からステージにファイルをロードを選択します。

Streamlitオブジェクトの作成

下記のようにSQLコマンドを実行しstreamlitをデプロイします。

CREATE STREAMLIT hello_streamlit
ROOT_LOCATION = '@xxxxDB.xxxxSCHEMA.STREAMLIT_SAMPLE'
MAIN_FILE = 'app.py'
QUERY_WAREHOUSE = xxxxWH;

Streamlitページを確認します。

これでアプリケーションのデプロイは完了です。アクセスすると作成していたアプリケーションが表示されます。

セキュリティについて

SISアプリのデプロイ後に共有を選択するとSnowflakeの各ロールに対して閲覧権限の割り当てを実施することが出来ます。

複雑な制限の設定をせずにロールを割り当てられているグループ単位で権限設定することが可能です。

まとめ

今回の記事では、Streamlit in Snowflakeを使ったアプリケーションの簡単なデプロイ方法を紹介しました。ぜひお試しください。

エクスチュアはマーケティングテクノロジーを実践的に利用することで企業のマーケティング活動を支援しています。
ツールの活用にお困りの方はお気軽にお問い合わせください。

ピックアップ記事

  1. 最速で理解したい人のためのIT用語集

関連記事

  1. Generative AI

    Snowflake の Copilot が優秀すぎる件について

    こんにちは、喜田です。いままでSnowflakeのライトユー…

  2. Data Clean Room

    SnowflakeのData Clean Roomを基礎から一番詳しく解説(1回目)

    こんにちは、喜田です。この記事では、複雑なSnowflake…

  3. Python

    回帰分析はかく語りき Part1 単回帰分析

    こんにちは、小郷です。回帰と言えばフリードリヒ・ニーチェの永劫回帰を…

  4. Data Clean Room

    SnowflakeのData Clean Roomを基礎から一番詳しく解説(2回目)

    こんにちは、喜田です。複雑なSnowflakeのデータクリー…

  5. Google Cloud Platform

    Vertex AI Embeddings for Text によるテキストエンベディングをやってみた…

    こんにちは、石原と申します。自然言語処理(NLP)は近年のA…

  6. Python

    わかりやすいPyTorch入門②(ニューラルネットワークによる分類)

    ニューラルネットワークを使ってワインの種類を分類する今回はsciki…

最近の記事

  1. 回帰分析はかく語りき Part3 ロジスティック回帰
  2. GCSへのSnowflake Open Catalogによる…
  3. VPC Service Controlsで「NO_MATCH…
  4. モダンデータスタックなワークフローオーケストレーションツール…
  5. Streamlit in Snowflakeによるダッシュボ…
  1. Adobe Analytics

    入口とは-Adobe Analyticsの指標説明
  2. Adobe Analytics

    GTMのdataLayerをAdobeAnalyticsの「s」オブジェクトにコ…
  3. IT用語集

    グループウェア(Groupware)って何?
  4. Google Tag Manager

    【GA4/GTM】dataLayerを活用しよう
  5. ヒートマップ

    【Tips】ヒートマップ機能について②~ムーブメント、アテンション編~
PAGE TOP