制限およびライブラリの変更点

このトピックでは、Streamlitの機能がSnowflakeとオープンソースライブラリで異なる動作をする場合の制限と機能の動作変更について説明します。

各Streamlitバージョンのリリースノートを表示するには、 Streamlitドキュメント をご参照ください。

すべてのランタイムの制限と変更

次の制限は、ランタイム環境に関係なくすべての Streamlit in Snowflake アプリに適用されます。

ランタイムによって異なる制限と変更

次のテーブルは、ウェアハウスのランタイムとコンテナのランタイムで異なる制限を比較しています(プレビュー)。ランタイム環境の詳細については、 Streamlitアプリのランタイム環境 をご参照ください。

制限事項

ウェアハウスランタイム

コンテナランタイム(プレビュー)

Pythonバージョン

3.9、3.10、3.11

3.11のみ

Streamlitバージョン

1.22+(制限付き選択)

1.50+( streamlit-nightly バージョンを含む任意のバージョン)

パッケージベースのv2コンポーネント

サポート対象外

サポート対象

大量のデータの表示

32 MB

構成可能

ファイルのアップロード

200 MB

構成可能

MapboxおよびCarto

外部製品規約への同意が必要です。

外部製品規約の対象外です。

キャッシング

単一セッションキャッシング。キャッシュされた値はセッション間で共有できません。

包括的にサポート。キャッシュデコレーターでセッションスコープを使用しない限り、キャッシュされた値はすべてのビューアーセッションで共有されます。

ROOT_LOCATIONパラメーター

CREATE STREAMLITのレガシーパラメーターとしてサポートされます。

サポート対象外

メンテナンス・ウィンドウ

該当なし

Snowpark Container Services メンテナンスウィンドウ の対象です。

静的ファイル使用

サポート対象外

サポート対象

制限の詳細

サポートされていないStreamlit機能

以下のStreamlit機能は、 Streamlit in Snowflake では完全にサポートされていません。

  • st.set_page_config:

    st.set_page_config コマンドの page_titlepage_iconmenu_items プロパティはサポートされていません。

  • config.toml ファイル:

    サポート対象とサポート対象外の構成オプションの概要については、 Streamlit構成 をご参照ください。

外部リソースのロード

すべての Streamlit in Snowflake アプリは、どのリソースをロードできるかを制限するコンテンツセキュリティポリシー(CSP)に準拠して実行されます。CSPは、外部ドメインからのコードのロードとiframeへの外部コンテンツの埋め込みをブロックします。また、 eval() のような一般に安全でないと考えられているフロントエンドの呼び出しもブロックします。CSP の情報については、 コンテンツセキュリティポリシー をご参照ください。

例えば、以下のコードは Python エラーなしで実行されますが、スクリプトはブラウザに読み込まれず、実行もされません。

# This won't work
st.html(
   "<script src="http://www.example.com/example.js"></script>",
   unsafe_allow_javascript=True
)
Copy

注釈

アプリ開発者は、 Snowflake's Shared Responsibility Model に従って、セキュリティチェックと Streamlit in Snowflake アプリコードのソフトウェアサプライチェーンに責任を負います。

カスタムコンポーネント

CSPの結果として、カスタムコンポーネントは、ウェアハウスおよびコンテナランタイムの外部ドメインからスクリプトをロードできません。パッケージベースのコンポーネントはアセットディレクトリを使用して静的コンテンツを提供するため、以下の違いが適用されます。

  • ウェアハウスのランタイムでは、アセットディレクトリを利用するパッケージベースのv2コンポーネントはサポートされていません。

  • コンテナランタイムでは、パッケージベースのv2コンポーネントが完全にサポートされています。

ウェアハウスランタイムでv2カスタムコンポーネントを使用するには、インラインHTML、CSS、JavaScriptで定義する必要があります。

注釈

サードパーティのソースからインポートされたコンポーネントには、そのコンポーネントに添付されたライセンスが適用されます。あなたには、コンポーネントの使用がライセンスによって許可されていることを確認する責任があります。

Snowflakeは、 Streamlit in Snowflake にインポートする可能性のあるサードパーティのコンポーネントを構築または維持しません。そのようなコンポーネントの使用は、お客様ご自身のリスクで行われ、Snowflakeによる保証、サービスレベル契約、またはその他の同様の保証の対象ではありません。

クエリパラメーター

Streamlit in Snowflake の st.query_params の場合、 streamlit- プレフィックスがURLの各クエリパラメーターキーに追加されます。値を取得または設定するために st.query_params を使用する場合、このプレフィックスは含まれません。

たとえば、次の URL を考慮します。

https://app.snowflake.com/org/account_name/#/streamlit-apps/DB.SCHEMA.APP_NAME?streamlit-first_key=one&streamlit-second_key=two

このURLのパラメーターは、以下のキーと値のペアとして st.query_params でアクセス可能です。

{
   "first_key" : "one",
   "second_key" : "two"
}
Copy

大量のデータの表示

ウェアハウスランタイムで実行されるStreamlitアプリでは、バックエンドとフロントエンドの間で交換されるメッセージのサイズに32MBの制限があります。単一のStreamlitコマンドで st.dataframe のような32 MB 以上のデータを表示しようとすると、次のエラーが発生します。

MessageSizeError: Data Size exceeds message limit

この制限を回避するには、Streamlitアプリを32 MB よりも小さなインクリメントでデータを取得するように設計してください。実行できるクエリのサイズや、メモリに保持できるデータの量に明示的な制限はありません。

コンテナランタイムでは、この制限はデフォルトで200MBであり、Streamlit構成オプション server.maxMessageSize を設定することで変更できます。ただし、メッセージサイズはコンテナのメモリ容量を超えることはできません。特に同時ビューアーが存在する場合は、より大きなメッセージを許可すると、コンテナのメモリ制限を超える可能性があります。

ファイルのアップロード

st.file_uploader および st.chat_input のデフォルトのファイルサイズ制限は200MBです。ウェアハウスのランタイムでは、これは構成できません。コンテナランタイムでは、Streamlit 構成オプション server.maxUploadSize を設定することで、この制限を変更できます。ただし、ファイルサイズはコンテナのメモリ容量を超えることはできません。特に同時ビューアーが存在する場合は、より大きなファイルを許可すると、コンテナのメモリ制限を超える可能性があります。

大きなファイルの場合は、より小さなバッチでデータを処理するか、別のアップロード方法を使用することを検討してください。

MapboxおよびCarto

MapboxとCartoは、 st.map または st.pydeck_chart Streamlitコマンドを使用する場合にマップタイルを提供します。

condaでパッケージを管理するウェアハウスランタイムでは、MapboxとCartoはSnowflakeの 外部製品規約 の対象となるサードパーティのアプリケーションです。

ウェアハウスランタイムでこれらのコマンドを使用するには、外部製品規約を確認する必要があります。コンテナランタイムはこの承認を必要としません。

キャッシング

キャッシングはウェアハウスランタイムでは部分的にサポートされ、コンテナランタイムでは完全にサポートされています。

ウェアハウスランタイムでは、キャッシュは単一セッションキャッシュに制限されています。キャッシュされた値はセッション間で共有できません。コンテナランタイムでは、キャッシュは完全にサポートされています。キャッシュされた値は、すべてのビューアーセッションで共有されます。