Streamlit in Snowflake について

注意

この機能は AWS およびMicrosoft Azure商用リージョン のアカウントで利用できます。 AWS PrivateLinkAzure Private Link はサポートされていません。

このトピックでは、 Streamlit in Snowflake を使ってStreamlitアプリケーションを開発および実行する方法について説明します。

Streamlit in Snowflake について

Streamlit はオープンソースのPythonライブラリで、機械学習やデータサイエンスのためのカスタムウェブアプリを簡単に作成・共有できます。Streamlitを使用することで、強力なデータアプリケーションを迅速に構築し、展開することができます。オープンソースライブラリの詳細については、 Streamlit Libraryのドキュメンテーション をご参照ください。

Streamlit in Snowflake は、開発者がSnowflakeのデータクラウド上でStreamlitアプリを安全に構築、展開、共有するのに役立ちます。 Streamlit in Snowflake を使用すると、データやアプリケーションコードを外部システムに移動することなく、Snowflake のデータを処理して使用するアプリケーションを構築できます。

Streamlit in Snowflake を使用するための前提条件

Streamlit in Snowflake を使用するには、以下の前提条件を満たしている必要があります。

Streamlitアプリの作成と使用に必要な権限

Streamlit in Snowflake 内では、Streamlitアプリは、 Snowflake アクセス制御フレームワーク に準拠するセキュリティ保護可能なオブジェクトです。Streamlitアプリは、所有者の権限に基づく権限モデルを使用しています。詳細については 所有者の権利と Streamlit in Snowflake アプリの理解 をご参照ください。

アプリ編集者とStreamlitアプリを含むスキーマの所有者は、アプリの使用権限を持つロールを決定できます。ユーザーはアプリと対話することができ、Streamlitアプリが表示するものをすべて見ることができます。ユーザーには、所有者と同じアプリのビューが見えます。

詳細については、 Streamlitアプリを共有する をご参照ください

Streamlitアプリの作成に必要な権限

Streamlitアプリはスキーマレベルのオブジェクトです。

Streamlit in Snowflake を使用してStreamlitアプリを作成および編集するには、スキーマの OWNERSHIP 権限、または以下の権限の両方を持つロールを使用する必要があります。

  • Streamlitアプリを含むデータベースに対する付与:

    • USAGE

  • Streamlitアプリを含むスキーマに対する付与:

    • USAGE

    • CREATE STREAMLIT

    • CREATE STAGE

以下の例に示すように、 GRANT <権限> コマンドを使用してこれらの権限をロールに付与します。

GRANT USAGE ON SCHEMA streamlit_db.streamlit_schema TO ROLE streamlit_creator;
GRANT USAGE ON DATABASE streamlit_db TO ROLE streamlit_creator;
GRANT CREATE STREAMLIT ON SCHEMA streamlit_db.streamlit_schema TO ROLE streamlit_creator;
GRANT CREATE STAGE ON SCHEMA streamlit_db.streamlit_schema TO ROLE streamlit_creator;
Copy

将来の付与がデータベースまたはスキーマに定義されている場合は、将来の付与で定義されたロールを使用してユーザーがStreamlitアプリを作成するようにしてください。

Streamlitアプリの表示に必要な権限

Streamlitアプリを表示するには、Snowflakeアカウントを持っており、サインインしている必要があります。さらに、次に対する USAGE 権限が付与されたロールを使用する必要があります。

  • Streamlitアプリを含むデータベース。

  • Streamlitアプリを含むスキーマ。

  • Streamlitアプリ。

ほとんどの場合、アプリ所有者が他のロールとStreamlitアプリを共有すると、 USAGE 権限は自動的に新しいロールに付与されます。ただし、 MANAGED ACCESS を持つスキーマでStreamlitアプリが作成された場合は、 USAGE 権限を新しいロールに手動で付与する必要があります。

スキーマの所有者または MANAGE GRANTS 権限を持つロールのあるユーザーは、以下の例に示すように GRANT <権限> コマンドを使用して USAGE 権限を付与する必要があります。

GRANT USAGE ON DATABASE streamlit_db TO ROLE streamlit_user;
GRANT USAGE ON SCHEMA streamlit_db.streamlit_schema TO ROLE streamlit_user;
GRANT USAGE on STREAMLIT streamlit_db.streamlit_schema.streamlit_app to ROLE streamlit_user;
Copy

注釈

将来の付与 は STREAMLIT オブジェクトではサポートされていません。

サポートされているStreamlitライブラリのバージョン

Streamlit in Snowflake はStreamlitライブラリのv1.22.0とv1.26.0をサポートしています。Streamlitライブラリの新しいバージョンへのサポートは、後ほど含められる予定です。

各バージョンのリリースノートを表示するには、 Streamlitライブラリの変更ログ をご参照ください。オープンソースStreamlitライブラリのいくつかの機能は、 Streamlit in Snowflake ではサポートされていないことに注意してください。 サポートされていないStreamlit機能 をご参照ください。

Streamlitライブラリのバージョンを選択する

各 Streamlit in Snowflake アプリについて、 Snowsight にあるStreamlitライブラリバージョンを選択するか、アプリの environment.yml ファイルにあるバージョンを固定します。バージョンを固定しない場合は、利用可能な最新バージョンが使用されます。

Snowflakeは、Snowflake Anaconda ChannelでStreamlitの新しいバージョンが利用可能になったときにアプリがアップグレードされないように、Streamlitのバージョンを固定することをお勧めします。

SnowsightでStreamlitアプリ内のStreamlitバージョンを選択する

Snowsight で、Streamlitアプリ内の使用するバージョンを選択するには、

  1. CREATE STREAMLIT 権限を持つユーザーとして Snowsight にサインインします。

  2. ナビゲーションメニューで Projects » Streamlit を選択します。

  3. Streamlitアプリを選択します。

  4. Edit を選択します。

  5. Streamlitエディターの上部で Packages を選択します。

  6. Streamlitバージョンを選択します。

Streamlitバージョンを environment.yml ファイルで固定します。

Streamlitバージョンを environment.yml ファイルで固定するには、以下の例を使用します。

name: sf_env
channels:
- snowflake
dependencies:
- scikit-learn
- streamlit=1.26
Copy

サポートされている外部パッケージ

デフォルトでは、 Streamlit in Snowflake には pythonstreamlitsnowflake-snowpark-python パッケージがプレインストールされています。環境には、これらのパッケージが必要とする依存関係に対するアクセスもあります。

Python 3.8で Streamlit in Snowflake アプリを実行します。

Streamlitアプリに追加パッケージをインストールすることができます。サポートされるパッケージのリストについては、 Snowflake Anaconda Channel をご参照ください。

Streamliltアプリにサポートされているパッケージを含める方法については、以下のトピックをご参照ください。

Streamlit in Snowflake の同時実行に関する考慮事項

Streamlit in Snowflake は、Snowflake内でセッションのスロットリングと自動スケーリングを提供し、Streamlitアプリの需要が増加する期間に対処します。 Streamlit in Snowflake はクラウドサービスインスタンスと仮想ウェアハウスインスタンスの組み合わせを使用します。詳細については、 重要な概念およびアーキテクチャ をご参照ください。

Snowflakeの整合性を維持するために、 Streamlit in Snowflake はCloud Servicesインスタンスが処理できる同時Streamlitセッション数にインスタンス毎、アカウント毎、ユーザー毎の制限を課しています。Streamlitセッションは、すべてのインスタンスが同時実行セッションの上限に達するまで、これらのインスタンス間で負荷分散されます。制限に達すると、インスタンスは追加のセッションをサポートするように自動スケールされます。

注釈

Streamlitアプリのユーザーからのリクエストは、一時的にスロットリングされる可能性があります。自動スケーリングが開始されると、ユーザーに「Please Wait(お待ちください)」メッセージが表示される場合があります。

Streamlit in Snowflake の請求に関する考慮事項

Streamlit in Snowflake では、 仮想ウェアハウス でStreamlitアプリを実行し、SQL クエリを実行する必要があります。Streamlitアプリを実行するには、アプリ本体とクエリの両方を実行する単一の仮想ウェアハウスを選択する必要があります。このウェアハウスは、アプリの WebSocket 接続がアクティブな間はアクティブな状態に留まります。Streamlitアプリの仮想ウェアハウスをアクティブに保つ WebSocket 接続は、アプリの最後の使用から約15分後に失効します。

クレジットを節約するために、仮想ウェアハウスを中断することができます。あるいは、アプリを実行しているウェブページを閉じ、実行中の仮想ウェアハウスを自動中断することもできます。

Streamlit in Snowflake でのウェアハウス選択のガイドライン

Streamlit in Snowflake でStreamlitアプリを実行する場合、Streamlitアプリの複雑さ、ウェアハウスの可用性、遅延、コストなど、複数の要因がパフォーマンスに影響する可能性があります。以下のセクションでは、 Streamlit in Snowflake で仮想ウェアハウスを使用するための一般的なガイドラインを示します。

小規模なウェアハウスを使用する

Streamlit in Snowflake でStreamlitアプリを実行する場合、可能な限り小さなウェアハウスを選択する必要があります。

実行中、ウェアハウスはStreamlitアプリが使用するPythonパッケージのキャッシュを維持します。Pythonパッケージのキャッシュは、パッケージを再度ダウンロードする代わりにキャッシュされたバージョンのパッケージを使用することで、後でアプリをロードする際のパフォーマンスを向上させます。キャッシュはウェアハウスが中断されると削除されるため、ウェアハウス再開後のアプリの初期読み込みが遅くなる可能性があります。再開されたウェアハウスが実行され、より多くのクエリが処理されると、パッケージのキャッシュが再構築され、キャッシュを利用できるアプリのロードパフォーマンスが向上します。

秒単位のクレジット請求と自動中断により、小規模のウェアハウスから始めて、Streamlitアプリのワークロードに合わせてウェアハウスのサイズを調整する柔軟性が得られることに注意してください。ウェアハウスのサイズはいつでも縮小できます。詳細については、 Streamlitアプリのウェアハウスを変更する をご参照ください。

専用のウェアハウスを使用する

Streamlit in Snowflake を使用する場合、SnowflakeではStreamlitアプリを実行するために専用のウェアハウスを使用することを推奨します。これにより、Streamlitアプリの運営コストを切り分けることができます。専用のウェアハウスは、ウェアハウスが他のワークロードを管理する必要がないため、アプリのロード時間も短縮できます。

詳細については、 ウェアハウスに関する考慮事項 をご参照ください。

Tip

初期化中にウェアハウスの中断を避けるため、自動中断を最小30秒に設定することを検討してください。