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. Data Clean Room

    セッション資料:Snowflakeで始めるData Clean Room!DCRって…

    2023年8月25日 Snowflakeユーザグループ主催のセミナ…

  2. Python

    わかりやすいPyTorch入門⑤(CNNとデータの拡張)

    CNNとデータの拡張データの拡張とは今回は前回学んだCNNの練習に…

  3. Python

    Python クローリング&スクレイピング

    最初に顧客マスタのデータに別の角度から考察を加えたいとき、外部から何…

  4. Data Clean Room

    PostgreSQLによるデータクリーンルームの可能性について

    こんにちは、喜田です。本投稿は PostgreSQL Adv…

  5. Data Clean Room

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

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

  6. Python

    Streamlitを使った簡単なデータアプリケーション作成ガイド

    はじめにこんにちは、エクスチュアの石原です。データサ…

最近の記事

  1. Streamlit in SnowflakeによるStrea…
  2. Streamlitを使った簡単なデータアプリケーション作成ガ…
  3. 生成AI機能を活かしたデータカタログ製品「Secoda」を試…
  4. 回帰分析はかく語りき Part2 重回帰分析
  5. 第14回関西DB勉強会-Snowflake Summit参加…
  1. Linux

    Linux技術者資格のLPIC-3試験に合格しました
  2. ObservePoint

    ObservePointでサイト内のタグが全部まるっとお見通しだ!
  3. Mouseflow

    Mouseflowの新機能:サイト単位でレコーディング数の制限が可能に!
  4. IT用語集

    データマイニング(Data Mining)って何?
  5. Excel

    Google Analytics URLクエリパラメータ 簡単削除方法
PAGE TOP