CREATE STREAMLIT

Snowflakeに新しいStreamlitオブジェクトを作成するか、同じスキーマの既存のStreamlitオブジェクトを置き換えます。

こちらもご参照ください。

SHOW STREAMLITS, DESCRIBE STREAMLIT, ALTER STREAMLIT, DROP STREAMLIT, UNDROP STREAMLIT

構文

CREATE [ OR REPLACE ] STREAMLIT [ IF NOT EXISTS ] <name>
  [ FROM <source_location> ]
  [ MAIN_FILE = '<filename>' ]
  [ QUERY_WAREHOUSE = <warehouse_name> ]
  [ RUNTIME_NAME = '<runtime_name>' ]
  [ COMPUTE_POOL = <compute_pool_name> ]
  [ COMMENT = '<string_literal>' ]
  [ TITLE = '<app_title>' ]
  [ IMPORTS = ( '<stage_path_and_file_name_to_read>' [ , ... ] ) ]
  [ EXTERNAL_ACCESS_INTEGRATIONS = ( <integration_name> [ , ... ] ) ]
  [ SECRETS = ( '<snowflake_secret_name>' = <snowflake_secret> [ , ... ] ) ]
Copy

以下の構文はレガシーです。

重要

  • ROOT_LOCATION はレガシーパラメーターであり、今後のリリースで非推奨になる可能性があります。

  • コンテナランタイムの場合、 ROOT_LOCATION はサポートされていません。

  • ROOT_LOCATION を使用して作成されたStreamlitアプリでは、マルチファイル編集およびGit統合はサポートされていません。

CREATE [ OR REPLACE ] STREAMLIT [ IF NOT EXISTS ] <name>
  ROOT_LOCATION = '<stage_path_and_root_directory>'
  MAIN_FILE = '<path_to_main_file_in_root_directory>'
  [ QUERY_WAREHOUSE = <warehouse_name> ]
  [ COMMENT = '<string_literal>' ]
  [ TITLE = '<app_title>' ]
  [ IMPORTS = ( '<stage_path_and_file_name_to_read>' [ , ... ] ) ]
  [ EXTERNAL_ACCESS_INTEGRATIONS = ( <integration_name> [ , ... ] ) ]
Copy

必須パラメーター

name

Streamlitオブジェクトの識別子(つまり、名前)を指定します。この識別子は、オブジェクトが作成されるスキーマに対して一意である必要があります。

また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれている場合を除き、スペースや特殊文字を含めることはできません(例: "My object" )。二重引用符で囲まれた識別子も大文字と小文字が区別されます。

詳細については、 識別子の要件 をご参照ください。

オプションのパラメーター

FROM source_location

指定された場所からアプリのソースファイルをコピーします。場所は、内部の名前付きステージ内である必要があります。パスは相対パスでも完全修飾パスでもかまいません。たとえば、ステージの名前が @streamlit_db.streamlit_schema.streamlit_stage の場合、有効なソースの場所は以下のようになります。

  • ステージのルートへの完全修飾パス: FROM '@streamlit_db.streamlit_schema.streamlit_stage'

  • ステージのルートへの相対パス: FROM '@streamlit_stage'

  • ステージ内のサブディレクトリへの完全修飾パスまたは相対パス: FROM '@streamlit_db.streamlit_schema.streamlit_stage/subdir'

ファイルのコピーは、 CREATE コマンドの実行時に一度だけ行われます。将来、ソースの場所が変更されても、Streamlitアプリは自動的に更新されません。

このパラメーターが指定されていない場合、Snowflakeは streamlit_app.py エントリポイントファイルを持つデフォルトアプリのソースファイルをコピーします。

MAIN_FILE = 'filename'

Streamlitエントリポイントファイルを指定します。要件はランタイムのタイプによって異なります。

  • ウェアハウスランタイム:ファイルは、FROM で指定されたソースディレクトリのルートにある必要があります。パスではなく、ファイル名のみが許可されます。

  • コンテナランタイム:ファイルはルートまたはサブディレクトリにあります。'subdir/my_app.py' のように、ソースディレクトリのルートからの相対パスを指定することができます。

ROOT_LOCATION はウェアハウスランタイムしかサポートしていませんが、FROM ではなく ROOT_LOCATION を使用する場合、MAIN_FILE は ROOT_LOCATION からの相対パスになります。

DEFAULT: 'streamlit_app.py'

QUERY_WAREHOUSE = warehouse_name

Streamlitアプリが使用するウェアハウスを指定します。動作はランタイムのタイプによって異なります。

  • ウェアハウスランタイム:アプリコードを実行して SQL クエリを実行するウェアハウスを指定します。これはコードウェアハウスです。クエリのために、アプリコード内の別のウェアハウスに手動で切り替えることをお勧めします。

  • コンテナランタイム:アプリが発行した SQL クエリを実行するウェアハウスを指定します。アプリコードは COMPUTE_POOL で指定されたコンピューティングプール上で実行されます。

DEFAULT: 値なし

注釈

このパラメーターを指定せずにStreamlitオブジェクトを作成することもできますが、クエリウェアハウスを指定するまでアプリは実行されません。

RUNTIME_NAME = 'runtime_name'

Streamlitアプリのランタイム環境を指定します。ランタイムは、アプリがどこでどのように実行されるかを決定します。ランタイム名は、SYSTEM$ST_<タイプ>_RUNTIME_PY<version> というパターンに従います。

  • ウェアハウスランタイム:仮想ウェアハウスでアプリを実行します。各ビューアーは、アプリの個人用インスタンスを取得します。次のウェアハウスランタイムは有効です。

    • SYSTEM$ST_WAREHOUSE_RUNTIME_PY3_9

    • SYSTEM$ST_WAREHOUSE_RUNTIME_PY3_10

    • SYSTEM$ST_WAREHOUSE_RUNTIME_PY3_11

  • コンテナランタイム:Snowpark Container Servicesのコンピューティングプールでアプリを実行します。すべてのビューアーは、アプリの単一の長時間実行インスタンスを共有します。次のコンテナランタイムは有効です。

    • SYSTEM$ST_CONTAINER_RUNTIME_PY3_11

ランタイムは最新のウェアハウスランタイムにデフォルト設定されます。

DEFAULT: SYSTEM$ST_WAREHOUSE_RUNTIME_PY3_11

COMPUTE_POOL = compute_pool_name

Streamlitアプリを実行するコンピューティングプールを指定します。このパラメーターは、コンテナランタイムを使用する場合に必要であり、ウェアハウスランタイムでは無視されます。

DEFAULT: 値なし

COMMENT = 'string_literal'

Streamlitオブジェクトのコメントを指定します。

DEFAULT: 値なし

TITLE = 'app_title'

Snowsight に表示するStreamlitオブジェクトのタイトルを指定します。

DEFAULT:CREATE STREAMLIT に渡されるStreamlitオブジェクトの名前。

IMPORTS = ( 'stage_path_and_file_name_to_read' [ , ... ] )

インポートするファイルの場所(ステージ)、パス、および名前。これはウェアハウスランタイムにのみ適用され、コンテナランタイムでは無視されます。

DEFAULT: 値なし

EXTERNAL_ACCESS_INTEGRATIONS = ( integration_name [ , ... ] )

Streamlitアプリケーションコードが外部ネットワークにアクセスするために必要な 外部アクセス統合 の名前。

コンテナランタイムの場合、PyPI のような外部パッケージインデックスからパッケージをインストールするには、外部アクセス統合が必要です。すべてのランタイムタイプで、外部アクセス統合により、アプリはアウトバウンドネットワークリクエストを行えるようになります。

DEFAULT: 値なし

SECRETS = ( 'snowflake_secret_name' = snowflake_secret [ , ... ] )

SnowflakeのシークレットをStreamlitアプリコードで参照できるシークレット名にマッピングします。シークレット名(左側)はコード内でシークレットを参照する方法で、シークレットオブジェクト(右側)はSnowflakeシークレットの識別子です。

例: SECRETS = ('api_key' = my_database.my_schema.my_secret)

シークレットは、ウェアハウスランタイムで _snowflake モジュールを介してのみ利用でき、EXTERNAL_ACCESS_INTEGRATIONS の外部アクセス統合に関連付けられている必要があります。コンテナランタイムでは、このパラメーターはサポートされておらず、代わりに SQL 関数を作成してシークレットにアクセスする必要があります。詳細については、 シークレットを管理し、Streamlitアプリを設定する をご参照ください。

DEFAULT: 値なし

ROOT_LOCATION = 'stage_path_and_root_directory'

Streamlit Pythonファイル、メディアファイル、 environment.yml ファイルを含む名前付きステージへのパスを指定します。

ROOT_LOCATION = '@streamlit_db.streamlit_schema.streamlit_stage'
Copy

この例では、Streamlit ファイルは streamlit_db という名前のデータベースと streamlit_schema という名前のスキーマ内にある streamlit_stage という名前付きステージにあります。

注釈

  • このパラメーターは、名前付き内部ステージ内の1つのディレクトリをポイントする必要があります。

  • Streamlit in Snowflake 用外部ステージはサポートされていません。

  • Snowflake Native App Framework 内で Streamlit アプリケーションオブジェクトを作成または交換する場合は、 ROOT_LOCATION = 'stage_path_and_root_directory' ではなく FROM 'relative_path_from_stage_root_directory' を使用してください。

アクセス制御の要件

ロールが以下の表にあるオブジェクトを所有していない場合、ロールはそれらのオブジェクトに対して次の 権限 を持つ必要があります。

権限

オブジェクト

メモ

CREATE STREAMLIT

Streamlitオブジェクトを作成するスキーマ

READ

Streamlitアプリのソースファイルをコピーするステージ

USAGE

Streamlitアプリが使用するウェアハウス

USAGE

Streamlitアプリが使用するコンピューティングプール

この権限は、アプリがコンテナランタイムを使用する場合にのみ必要です。

USAGE

Streamlitアプリで使用される外部アクセス統合

この権限は、アプリが外部アクセス統合を使用する場合にのみ必要です。コンテナランタイムの場合、この権限は、 PyPI のような外部パッケージインデックスからパッケージをインストールするために必要です。

USAGE

Streamlitアプリが使用するシークレット

この権限は、アプリがシークレットを使用する場合にのみ必要であり、ウェアハウスのランタイムにのみ適用されます。

CREATE に STAGE

Streamlitオブジェクトを作成するスキーマ

この権限は、 ROOT_LOCATION パラメーターを持つStreamlitオブジェクトを作成する場合にのみ必要です。

スキーマ内のオブジェクトを操作するには、親データベースの少なくとも1つの権限と、親スキーマの少なくとも1つの権限が必要です。

指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。

セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。

使用上の注意

  • アプリを作成したら、初期化する必要があります。

    重要

    CREATE STREAMLIT を使用した後、以下のいずれかの操作を行うまで、Streamlitアプリは稼動しません。

    • 新しいStreamlitオブジェクトに対して ALTER STREAMLIT ... ADD LIVE VERSION FROM LAST を実行する。

    • アプリを所有するロールを使用して、 Snowsight でアプリにアクセスする。

  • Streamlitオブジェクトを含むスキーマまたはデータベースをクローンする場合、Streamlitオブジェクトはクローンされません。

  • Streamlitアプリケーションで使用するパッケージを指定するには、ソースファイルに依存関係ファイルを含めます。依存関係ファイルの形式は、ランタイムのタイプによって異なります。

    • ウェアハウスランタイム:environment.yml ファイルを使用します。

    • コンテナランタイム:pyproject.toml または requirements.txt ファイルを使用します。

    詳細については、 Streamlitアプリの依存関係を管理する をご参照ください。

  • メタデータについて:

    注意

    Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。

  • OR REPLACE 句と IF NOT EXISTS 句は互いに排他的です。この2つを同じステートメントで使うことはできません。

  • CREATE OR REPLACE <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、単一のトランザクションで、古いオブジェクトが削除されて新しいオブジェクトが作成されます。

デフォルトのソースファイルでStreamlitアプリを作成する

組み込みのデフォルトファイルからコンテナランタイムのStreamlitアプリを作成するには、次の例に示すように CREATE STREAMLIT コマンドを実行します。

CREATE STREAMLIT hello_streamlit
  RUNTIME_NAME = 'SYSTEM$ST_CONTAINER_RUNTIME_PY3_11'
  COMPUTE_POOL = my_compute_pool
  QUERY_WAREHOUSE = my_warehouse;
Copy

デフォルトでは、アプリは RUNTIME_NAME が指定されていない場合に最新のウェアハウスランタイムを使用します。組み込みのデフォルトファイルからウェアハウスランタイムのStreamlitアプリを作成するには、次の例に示すように CREATE STREAMLIT コマンドを実行します。

CREATE STREAMLIT hello_streamlit
  QUERY_WAREHOUSE = my_warehouse;
Copy

カスタムソースファイルからStreamlitアプリを作成する

カスタムソースファイルからコンテナランタイムのStreamlitアプリを作成するには、次の例に示すように CREATE STREAMLIT コマンドを実行します。

CREATE STREAMLIT hello_streamlit
  FROM @streamlit_db.streamlit_schema.streamlit_stage
  MAIN_FILE = 'streamlit_main.py'
  QUERY_WAREHOUSE = my_warehouse
  RUNTIME_NAME = 'SYSTEM$ST_CONTAINER_RUNTIME_PY3_11'
  COMPUTE_POOL = my_compute_pool;
Copy

カスタムソースファイルからウェアハウスランタイムのStreamlitアプリを作成するには、次の例に示すように CREATE STREAMLIT コマンドを実行します。

CREATE STREAMLIT hello_streamlit
  FROM @streamlit_db.streamlit_schema.streamlit_stage
  MAIN_FILE = 'streamlit_main.py'
  QUERY_WAREHOUSE = my_warehouse;
Copy

シークレットでウェアハウスランタイムのStreamlitアプリを作成する

シークレットでウェアハウスランタイムのStreamlitアプリを作成するには、次の例に示すように CREATE STREAMLIT コマンドを実行します。

CREATE STREAMLIT hello_streamlit
  FROM @streamlit_db.streamlit_schema.streamlit_stage
  MAIN_FILE = 'streamlit_main.py'
  QUERY_WAREHOUSE = my_warehouse
  SECRETS = ('api_key' = streamlit_db.streamlit_schema.my_api_secret);
Copy

コンテナランタイムのStreamlitアプリは SQL 関数を使用してシークレットにアクセスする必要があります。詳細については、 シークレットを管理し、Streamlitアプリを設定する をご参照ください。

GitリポジトリからStreamlitアプリを作成する

GitリポジトリからStreamlitアプリを作成するには、次の例のように CREATE STREAMLIT コマンドを実行します。

CREATE STREAMLIT hello_streamlit
  FROM @streamlit_db.streamlit_schema.streamlit_repo/branches/streamlit_branch/
  MAIN_FILE = 'streamlit_main.py'
  QUERY_WAREHOUSE = my_warehouse;
Copy