チュートリアル: Snowflake Native AppフレームワークによるSnowflake Native Appの開発¶
概要¶
このチュートリアルでは、 Snowflake Native App Framework を使用して Snowflake Native App を作成し、データと関連するビジネスロジックを他のSnowflakeアカウントと共有する方法について説明します。
チュートリアルでは、 Snowflake CLI と Snowsight の両方のウェブインターフェイスを使用します。
学習内容¶
このチュートリアルでは、次の方法を学習します。
アプリのデータとビジネスロジックを含むアプリケーションパッケージを作成する。
アプリケーションパッケージとデータを共有する。
アプリケーションパッケージにビジネスロジックを追加する。
アプリをローカルでテストする。
Snowsight でアプリを表示およびテストする。
プライベートリストを作成してアプリを公開する。
プライベートリストからアプリをインストールする。
Snowflake CLI を使用して、上記のステップの多くを実行する。
プロバイダーとコンシューマーについて¶
Snowflake Native App Framework のコンテキストでは、プロバイダーとは、コンシューマーである他のSnowflakeユーザーと共有するデータやビジネスロジックを持つロールや組織のことです。コンシューマーは、組織内の別のアカウント、会社内の別の組織、または別の会社のSnowflakeユーザーである場合があります。
このチュートリアルでは、ほとんどのタスクはプロバイダーが通常実行するものですが、アプリケーション開発者やデータベース管理者など、組織内の複数のロールが実行するタスクも含まれます。
このチュートリアルでは、コンシューマーアプリをインストールするために実行するアクションを模倣するタスクも実行します。
前提条件¶
使用中のマシンに Snowflake CLI がインストールされている必要があります。
セッションコンテキストが必要であるため、すべての SQL コマンドを同じ SQL コマンドセッションで実行する必要があります。
たとえば、これを Snowsight で実行するには、作業をしながらすべてのコードを同じワークシートに貼り付けます。セクションからセクションに進むにつれて、各セクションは前のセクションに基づいて構築されます。
ACCOUNTADMIN ロールが使用できなければなりません。
このチュートリアルでは、 ACCOUNTADMIN ロールを使用してすべてのステップを実行します。ただし、一般的には、実行するアクションに対して特別に定義された権限を持つロールを使用します。たとえば、 UDFs とストアドプロシージャを作成する開発者、ロールと権限を管理するデータベース管理者、Snowflakeコラボレーションを使用して リストを管理する 管理者用に、それぞれ別のロールを設定することができます。
プライベートリストからアプリをインストールするには、2つ目のSnowflakeアカウントにアクセスする必要があります。このアカウントを使用して、コンシューマーがアプリをインストールする方法を模倣します。
注釈
Snowflake Native App Framework は、異なる組織のアカウントによるアプリの共有をサポートしていますが、このチュートリアルでは、両方のアカウントが同じ組織に属している必要があります。
現在のウェアハウスを設定する必要があります。 USE WAREHOUSE をご参照ください。
アプリケーションファイルを作成する¶
このセクションでは、セットアップスクリプト、マニフェストファイル、プロジェクト定義ファイルを作成します。これらの最初の2つのファイルは Snowflake Native App Framework で必要となります。
- セットアップスクリプト
コンシューマーが自分のアカウントにアプリをインストールするときに自動的に実行される SQL スクリプト。
- マニフェストファイル
アプリに関する基本的な構成情報を含む YAML ファイル。
- プロジェクト定義ファイル
作成するSnowflakeオブジェクトに関する情報を含む YAML ファイル。
このチュートリアルでは、これらのファイルとその内容について詳しく説明します。また、このチュートリアルの後のセクションでアプリを表示したり公開したりするときに役立つReadmeファイルも作成します。
新しいプロジェクトフォルダーの初期化¶
Snowflake CLI を使用して、ローカルファイルシステムで新しい Snowflake Native App プロジェクトを初期化します。
そのためには、次のコマンドを実行します。
snow init --template app_basic tutorial
このコマンドは、現在の作業ディレクトリ内に tutorial
という名前のフォルダーを作成し、基本テンプレートに基づいて基本的な Snowflake Native App プロジェクトを作成します。これは、すべてのアプリケーションファイルのルートディレクトリです。
注釈
後のセクションでは、このフォルダーのファイルとサブフォルダーを変更および追加します。
注釈
ネイティブアプリケーションをすぐに起動して実行できるようにするために、他のテンプレートも用意されています。詳細については、 snow init --help
をご参照ください。
セットアップスクリプトを作成する¶
app/setup_script.sql
ファイルの内容を次のように変更または置き換えます。
-- Setup script for the Hello Snowflake! app.
この行をプレースホルダーとして追加するのは、セットアップスクリプトを空にはできないためです。
注釈
このチュートリアルでは、セットアップスクリプトの特定の構造とファイル名を参照します。しかし、独自のアプリを構築する際には、このファイルの名前やディレクトリ構造を自分で決めることができます。
アプリの README ファイルを作成する¶
Readmeファイルは、アプリケーションが何をするのかについての説明を提供します。 Snowsight でアプリを表示すると、Readmeが表示されます。
app/README.md
の内容を次のように変更または置き換えます。
This is the readme file for the Hello Snowflake app.
マニフェストファイルを作成する¶
Snowflake Native App Framework では、アプリごとにマニフェストファイルが必要です。マニフェストファイルには、アプリのメタデータと構成パラメーターが含まれており、アプリの実行時の動作に影響を与えます。
注釈
このファイルの名前は manifest.yml
にする必要があります。セットアップスクリプトを含む他のファイルへのパスは、このファイルの場所を基準とします。
app/manifest.yml
の内容を次のように変更または置き換えます。
manifest_version: 1
artifacts:
setup_script: setup_script.sql
readme: README.md
setup_script
プロパティは、マニフェストファイルの場所に対するセットアップスクリプトの場所を指定します。ここで指定するパスとファイル名は、上記で変更したセットアップスクリプトの相対的な場所と同じである必要があります。 readme
プロパティも同じルールに従います。
注釈
manifest_version
、 artifacts
、および setup_script
プロパティは必須です。 readme
パラメーターはオプションです。
プロジェクト定義ファイルを作成する¶
Snowflake CLI は、プロジェクト定義ファイルを使用して、Snowflakeにデプロイ可能なオブジェクトを記述します。このファイルの名前は snowflake.yml
にする必要があります。このファイルは、デプロイされたアプリケーションパッケージとオブジェクトの名前、およびプロジェクトステージにアップロードされるファイルを制御します。
注釈
このファイルには
snowflake.yml
という名前を付け、ファイルはプロジェクトのルートレベルに存在する必要があります。manifest.yml
やセットアップスクリプトなどの他のファイルへのパスは、このファイルの場所を基準とします。
snowflake.yml
の内容を次のように変更または置き換えます。
definition_version: 2 entities: hello_snowflake_package: type: application package stage: stage_content.hello_snowflake_stage manifest: app/manifest.yml artifacts: - src: app/* dest: ./ hello_snowflake_app: type: application from: target: hello_snowflake_package debug: false
このチュートリアルの次のセクションでは、これらの各プロパティの使用方法について説明します。
このセクションで学んだことを復習する¶
このセクションのステップを実行した後、ディレクトリ構造は次のようになります。
/tutorial
snowflake.yml
README.md
/app/
manifest.yml
README.md
setup_script.sql
このセクションでは、 Snowflake Native App Framework に必要なセットアップスクリプトとマニフェストファイル、およびSnowflake CLI に必要なプロジェクト定義ファイルを作成する方法を学習しました。
セットアップスクリプトとマニフェストファイルの両方に追加した内容は基本的なものですが、すべてのアプリにこれらのファイルが必要です。
また、 Snowsight でアプリを表示するときや、アプリをリストとして公開するときに表示されるReadmeファイルも追加しました。
プロジェクト定義ファイルについて¶
このセクションでは、前のセクションで作成した プロジェクト定義 ファイル(snowflake.yml
)の内容について学習します。プロバイダーアカウントの追加設定タスクも実行します。
アプリケーションパッケージの中核は、アプリに関する追加情報を含むように拡張されたSnowflakeデータベースです。その意味では、これは次を含むアプリのためのコンテナといえます。
共有データのコンテンツ
アプリケーションファイル
アプリケーションパッケージを作成するには、ロールに CREATE APPLICATION PACKAGE 権限が必要です。Snowflake CLI を使用してこの権限を付与するには、次のコマンドを実行します。
snow sql -q 'GRANT CREATE APPLICATION PACKAGE ON ACCOUNT TO ROLE accountadmin' -c connection_nameここで、
connection_name
は、Snowflake CLI をインストールしたときにconfig.toml
ファイルで指定した接続の名前です。
注釈
ACCOUNTADMIN ロールにはデフォルトでこの権限がありますが、アプリケーションパッケージを作成するには、使用するロールにこの権限が付与されていることを確認する必要があります。
プロジェクト定義ファイル(snowflake.yml
)は、Snowflakeアカウントで作成されるオブジェクトの名前を定義します。
アプリケーションパッケージ(
hello_snowflake_package
)アプリケーションパッケージから作成されるアプリケーションオブジェクト(
hello_snowflake_app
)アプリケーションファイルを保持するステージ(
stage_content.hello_snowflake_stage
)
ステージ名はスキーマ修飾名として指定されることに注意してください。このスキーマはアプリケーションパッケージ内に作成されます。この名前付きステージは、 Snowflake Native App Framework に必要なファイルを保存するために使用されます。このステージには、アプリのセットアップスクリプトまたは実行時に利用するファイルをすべて含める必要があります。
プロジェクト定義ファイルには、名前付きステージにコピーされるファイルを指定するルールのリストである artifacts
というセクションもあります。
このルールでは、 app/
サブフォルダー内のすべてのものがステージのルートにコピーされることを指定します。これは、次のことを意味します。
tutorial/app/manifest.yml
は@hello_snowflake_package.stage_content.hello_snowflake_stage
のルートにアップロードされます。tutorial/app/README.md
は@hello_snowflake_package.stage_content.hello_snowflake_stage
のルートにアップロードされます。tutorial/app/setup_script.sql
は@hello_snowflake_package.stage_content.hello_snowflake_stage
のルートにアップロードされます。
アプリケーションパッケージをまだ作成しておらず、これらのタスクを実行する SQL コマンドも実行していません。後のセクションでは、Snowflake CLI コマンドを実行してこれらのタスクを実行します。
最後に、アプリ定義内で debug: false
を設定します。Snowflake CLI を使用してデプロイされたアプリケーションの場合、デバッグモードはデフォルトで有効になっています。
このセクションでは、アプリパッケージがアプリケーションで使用されるリソースのコンテナであることを学びました。また、プロジェクト定義ファイルでフィールドを設定する方法も学習しました。
アプリケーションロジックを追加して最初のアプリをインストールする¶
このセクションでは、アプリケーションパッケージにコードを追加し、最初のアプリをインストールします。そのために、以下のタスクを実行します。
セットアップスクリプトにストアドプロシージャを追加する。
ステージ開発モードでアプリをインストールしてテストします。
セットアップスクリプトにストアドプロシージャを追加する¶
このセクションでは、ストアドプロシージャのコードをローカルファイルシステムのセットアップスクリプトに追加して、アプリにストアドプロシージャを追加します。
セットアップスクリプトにストアドプロシージャを追加するには、
このチュートリアルの前のセクションで作成した
setup_script.sql
ファイルの最後に次の SQL ステートメントを追加します。CREATE APPLICATION ROLE IF NOT EXISTS app_public; CREATE SCHEMA IF NOT EXISTS core; GRANT USAGE ON SCHEMA core TO APPLICATION ROLE app_public;
アプリのインストール中にセットアップスクリプトが実行されると、これらのステートメントによって
app_public
という名前のアプリケーションロールが作成されます。アプリケーションロールはデータベースロールに似ていますが、アプリのコンテキスト内でのみ使用できます。これらは、コンシューマーアカウントで作成されたアプリケーションオブジェクト内のオブジェクトへのアクセスを許可するために使用されます。この例では、ストアドプロシージャを格納するスキーマも作成し、そのスキーマの USAGE 権限をアプリケーションロールに付与しています。アプリケーションロールを作成し、スキーマなどのオブジェクトに対する権限をアプリケーションロールに付与することは、セットアップスクリプト内で一般的なパターンです。
ストアドプロシージャのコードを
setup_script.sql
ファイルの最後に追加します。CREATE OR REPLACE PROCEDURE CORE.HELLO() RETURNS STRING LANGUAGE SQL EXECUTE AS OWNER AS BEGIN RETURN 'Hello Snowflake!'; END;
この例では、文字列「Hello Snowflake!」を出力するストアドプロシージャを作成します。
setup_script.sql
ファイルの末尾に次のステートメントを追加します。GRANT USAGE ON PROCEDURE core.hello() TO APPLICATION ROLE app_public;
この例では、ストアドプロシージャに対する USAGE 権限をアプリケーションロールに付与しています。
このセクションでは、セットアップスクリプトにストアドプロシージャを追加しました。また、アプリケーションロールを作成し、このロールに USAGE 権限を付与しました。これにより、アプリのインストール時にセットアップスクリプトによってストアドプロシージャが作成されます。また、ストアドプロシージャを実行する権限もアプリに付与します。
ステージ開発モードでアプリをインストールしてテストする¶
これで、アプリケーションパッケージ、アプリ、プロジェクト定義ファイルで指定したその他すべてのエンティティを作成する準備が整いました。
これらのタスクを実行するには、次のSnowflake CLI コマンドを実行します。
snow app run -c connection_nameここで
connection_name
は、Snowflake CLI をインストールしたときにconfig.toml
ファイルで指定した接続名です。
このコマンドは次のタスクを実行します。
スキーマ
stage_content
およびステージhello_snowflake_stage
を使用して、アプリケーションパッケージ名hello_snowflake_package
を作成します。必要なファイルをすべて名前付きステージにアップロードします。
このステージのファイルを使用して、アプリ
hello_snowflake_app
を作成またはアップグレードします。
コマンドが正常に実行されると、 URL が出力され、アプリが Snowsight に表示されます。前のセクションで setup_script.sql
に追加した HELLO
ストアドプロシージャを実行するには、次のSnowflake CLI コマンドを実行します。
snow sql -q "call hello_snowflake_app.core.hello()" -c connection_name
このコマンドを実行すると、次のような出力が表示されます。
+------------------+
| HELLO |
|------------------|
| Hello Snowflake! |
+------------------+
このセクションで学んだことを復習する¶
おめでとうございます。 Snowflake Native App Framework を使用して最初の Snowflake Native App を作成、インストール、テストしました。アプリには基本的な機能しかありませんが、アプリを構築するために使用したコンポーネントは、より複雑なアプリでも同じです。
このセクションでは、以下を完了しました。
セットアップスクリプトにストアドプロシージャを追加しました。セットアップスクリプトは、コンシューマーアカウントにアプリをインストールする方法を指定します。この後のセクションでは、アプリにデータコンテンツや他のタイプのアプリケーションロジックを追加します。
Snowflake CLI を使用して初めてアプリをデプロイしました。
ストアドプロシージャを実行して、インストールしたアプリをテストしました。
後のセクションでは、アプリを表示してテストする他の方法について学びます。
アプリにデータコンテンツを追加する¶
前のセクションでは、アプリケーションロジックをアプリに追加する方法を示すストアドプロシージャを含むアプリを作成しました。
このセクションでは、 HELLO_SNOWFLAKE_PACKAGE
アプリケーションパッケージ内にデータベースを作成し、このデータベースをアプリと共有する権限を付与して、データコンテンツをアプリに含めます。
データコンテンツにアクセスするためのビューを追加する¶
このセクションでは、セットアップスクリプトを更新して、アプリをインストールしたコンシューマーが前のセクションで作成した ACCOUNTS
テーブルのデータにアクセスできるようにするビューを追加します。
データコンテンツにアクセスするためのビューを追加するには、
ビューのスキーマを作成するには、セットアップスクリプトに以下を追加します。
CREATE OR ALTER VERSIONED SCHEMA code_schema; GRANT USAGE ON SCHEMA code_schema TO APPLICATION ROLE app_public;
これらのステートメントは、ビューを含むバージョン管理されたスキーマを作成し、そのスキーマに対する USAGE 権限を付与します。 Snowflake Native App Framework は、バージョン管理されたスキーマを使用して、異なるバージョンのストアドプロシージャや関数を処理します。
ビューを作成するには、セットアップスクリプトに以下を追加します。
CREATE VIEW IF NOT EXISTS code_schema.accounts_view AS SELECT ID, NAME, VALUE FROM shared_data.accounts; GRANT SELECT ON VIEW code_schema.accounts_view TO APPLICATION ROLE app_public;
これらのステートメントは、
code_schema
スキーマにビューを作成し、ビューに対する必要な権限をアプリケーションロールに付与します。この更新されたセットアップスクリプトは、次回Snowflake CLI を使用してアプリをデプロイするときにもステージにアップロードされます。
更新されたアプリをテストする¶
このサブセクションでは、アプリをアップグレードし、インストールされたアプリ内のビューを使用してサンプルテーブルをクエリします。
更新されたアプリをテストするには、次を実行します。
コンシューマーアカウントにインストールされているアプリケーションパッケージとアプリケーションオブジェクトを更新するには、次のコマンドを実行します。
snow app run -c connection_name
ここで、
connection_name
は、Snowflake CLI をインストールしたときにconfig.toml
ファイルで指定した接続の名前です。これにより、編集されたすべてのファイルがステージにアップロードされ、
scripts/shared_content.sql
スクリプトが実行され、ステージ上のファイルを使用してアプリがアップグレードされます。ビューが正しく動作することを確認するには、次のコマンドを実行します。
snow sql -q "SELECT * FROM hello_snowflake_app.code_schema.accounts_view" -c connection_name
このコマンドの出力は次のようになります。
+----+----------+-----------+ | ID | NAME | VALUE | |----+----------+-----------| | 1 | Joe | Snowflake | | 2 | Nima | Snowflake | | 3 | Sally | Snowflake | | 4 | Juan | Acme | +----+----------+-----------+
このセクションで学んだことを復習する¶
このセクションでは、以下のタスクを実行して、共有データコンテンツをアプリに含める方法を学びました。
アプリケーションパッケージ内に
ACCOUNTS
テーブルを作成し、そのテーブルにデータを挿入しました。アプリケーションパッケージに
ACCOUNTS
テーブルに対する参照の使用権を付与しました。アプリケーションパッケージの
ACCOUNTS
テーブルを参照するスキーマとビューを作成しました。アプリケーションロールにスキーマの使用権を付与しました。
アプリケーションロールにビューの選択権を付与しました。
また、セットアップスクリプトを更新して、アプリケーションのインストール時に以下を実行するようにしました。
アプリがサンプルデータにアクセスするために使用するスキーマとビューを作成しました。
アプリケーションロールにスキーマの使用権を付与しました。
アプリケーションロールにビューの選択権を付与しました。
アプリにPythonコードを追加する¶
このセクションでは、Pythonコードを追加してアプリケーションロジックを強化し、アプリの機能を拡張します。このセクションでは、以下のPythonコードを含めます。
セットアップスクリプト内で自己完結した関数であるインラインPython UDF。
セットアップスクリプトの外部にあるPythonファイルを参照するPython UDF。
注釈
このセクションではPythonを使用した例を紹介しますが、Javaや JavaScript 同じ手法を適用できます。
インラインPython関数をユーザー定義関数(UDF)として追加する¶
このセクションでは、Python関数を UDF として追加します。
アプリにPython UDF を含めるには、セットアップファイルに以下のコードを追加します。
CREATE OR REPLACE FUNCTION code_schema.addone(i int) RETURNS INT LANGUAGE PYTHON RUNTIME_VERSION = '3.11' HANDLER = 'addone_py' AS $$ def addone_py(i): return i+1 $$; GRANT USAGE ON FUNCTION code_schema.addone(int) TO APPLICATION ROLE app_public;
これらのコマンドは、アプリのインストール時に以下のタスクを実行します。
code_schema
という名前のバージョン管理されたスキーマを作成します。APP_PUBLIC
アプリケーションロールにスキーマに対する使用権限を付与します。code_schema
スキーマでADDONE()
UDF を作成します。APP_PUBLIC
アプリケーションロールに関数に対する使用権限を付与します。
上記のコードの例で作成されたスキーマは、バージョン管理されたスキーマであることに注意してください。ユーザー定義関数とストアドプロシージャは、通常のスキーマではなくバージョン管理されたスキーマで定義する必要があります。これにより、アプリのアップグレードが同時コード実行を妨げることがなくなります。
外部Pythonモジュールを追加する¶
アプリに外部Pythonモジュールを追加するには、次を実行します。
以下のPython関数をセットアップスクリプトに追加します。
CREATE or REPLACE FUNCTION code_schema.multiply(num1 float, num2 float) RETURNS float LANGUAGE PYTHON RUNTIME_VERSION = 3.9 IMPORTS = ('/python/hello_python.py') HANDLER='hello_python.multiply'; GRANT USAGE ON FUNCTION code_schema.multiply(FLOAT, FLOAT) TO APPLICATION ROLE app_public;
前の例と同様に、これらのステートメントはスキーマにPython UDF を作成し、アプリケーションロールに関数に対する権限を付与します。ただし、この例には、名前付きステージに作成して含める外部Pythonファイルを参照する IMPORTS 句が含まれています。
tutorial
フォルダーにpython
という名前のサブフォルダーを作成します。python
サブフォルダーにhello_python.py
という名前のファイルを作成します。次を
hello_python.py
ファイルに追加します。def multiply(num1, num2): return num1*num2
この外部ファイルで定義された関数は、セットアップスクリプトで定義されたインライン関数と一致します。
プロジェクト定義ファイルの既存の
artifacts
セクションに次を追加します。- python/hello_python.py
このセクションでは、アプリにPython UDF を追加しました。この UDF は、アプリケーションパッケージから参照できる外部Pythonモジュールを参照します。
更新されたアプリをインストールしてテストする¶
アプリをインストールしてテストするには:
アプリケーションパッケージとアプリを更新するには、次のコマンドを実行します。
snow app run -c connection_name
ここで、
connection_name
は、Snowflake CLI をインストールしたときにconfig.toml
ファイルで指定した接続の名前です。このコマンドは、編集されたファイルと新しいファイルをステージにアップロードし、ステージ上のファイルを使用してアプリをアップグレードします。
Pythonストアドプロシージャをテストするには、以下のコマンドを実行します。
snow sql -q "SELECT hello_snowflake_app.code_schema.addone(1)" -c connection_name
参照されたPython関数をテストするには、以下のコマンドを実行します。
snow sql -q "SELECT hello_snowflake_app.code_schema.multiply(1,2)" -c connection_name
このセクションで学んだことを復習する¶
このセクションでは、アプリに以下の新機能を追加しました。
インライン UDF として定義されたPython関数。
外部コードを参照する UDF として定義されたPython関数。
また、アプリの更新バージョンをインストールして、各関数を実行し、これらの各例をテストしました。
アプリにStreamlitアプリを追加する¶
このセクションでは、Streamlitユーザーインターフェイスを追加して、 Snowflake Native App を完了します。Streamlitは、データサイエンスと機械学習アプリケーションを開発するためのオープンソースのPythonフレームワークです。アプリにStreamlitアプリを含めると、ユーザーとのインタラクションやデータ可視化を追加できます。
Streamlitアプリファイルを作成する¶
Streamlitアプリを作成するには、次を実行します。
tutorial
フォルダーに、streamlit
という名前のサブフォルダーを作成します。streamlit
フォルダーに、hello_snowflake.py
という名前のファイルを作成します。このファイルに以下のコードを追加します。
# Import python packages import streamlit as st from snowflake.snowpark import Session # Write directly to the app st.title("Hello Snowflake - Streamlit Edition") st.write( """The following data is from the accounts table in the application package. However, the Streamlit app queries this data from a view called code_schema.accounts_view. """ ) # Get the current credentials session = Session.builder.getOrCreate() # Create an example data frame data_frame = session.sql("SELECT * FROM code_schema.accounts_view") # Execute the query and convert it into a Pandas data frame queried_data = data_frame.to_pandas() # Display the Pandas data frame as a Streamlit data frame. st.dataframe(queried_data, use_container_width=True)
プロジェクト定義ファイルの既存の
artifacts
セクションに次を追加します。- streamlit/hello_snowflake.py
セットアップスクリプトにStreamlitオブジェクトを追加する¶
アプリでStreamlitオブジェクトを作成するには、次を実行します。
setup_script.sql
ファイルの末尾に、Streamlitオブジェクトを作成するための以下のステートメントを追加します。CREATE STREAMLIT IF NOT EXISTS code_schema.hello_snowflake_streamlit FROM '/streamlit' MAIN_FILE = '/hello_snowflake.py' ;
このステートメントはコアスキーマに STREAMLIT オブジェクトを作成します。
APP_PUBLIC ロールがStreamlitオブジェクトにアクセスできるように、
setup_script.sql
ファイルの末尾に以下のステートメントを追加します。GRANT USAGE ON STREAMLIT code_schema.hello_snowflake_streamlit TO APPLICATION ROLE app_public;
更新されたアプリをインストールする¶
アプリケーションパッケージとアプリを更新するには、次のコマンドを実行します。
snow app run -c connection_name
ここで、
connection_name
は、Snowflake CLI をインストールしたときにconfig.toml
ファイルで指定した接続の名前です。このコマンドは、編集されたファイルと新しいファイルをステージにアップロードし、ステージ上のファイルを使用してアプリをアップグレードします。次に、このコマンドが出力する URL に移動して、新しいStreamlitの動作を確認できます。移動したら、アプリケーションの名前の横に表示される HELLO_SNOWFLAKE_STREAMLIT というタブをクリックします。
このセクションで学んだことを復習する¶
このセクションでは、以下を実行してStreamlitアプリを Snowflake Native App に追加しました。
Streamlitライブラリを使用してユーザーインターフェイスをレンダリングするPythonファイルを作成しました。
共有データを表示するStreamlitアプリを Snowflake Native App に作成しました。
アプリにバージョンを追加する¶
前のセクションでは、「ステージ開発」モードを使用して変更をプッシュしてきました。ステージ開発モードを使用すると、新しいバージョンやパッチを作成しなくても、アプリ開発を迅速に反復できます。ただし、アプリケーションパッケージをリストし、他のSnowflakeユーザーと共有するには、アプリのバージョンを作成する必要があります。
このセクションでは、このチュートリアルで追加したすべての機能を含むバージョンをアプリに追加します。
HELLO_SNOWFLAKE_PACKAGE
アプリケーションパッケージにバージョンを追加するには、以下のコマンドを実行します。snow app version create v1_0 -c connection_name
前のセクションで名前付きステージにアップロードしたアプリケーションファイルに基づくバージョンを追加するために、このコマンドでアプリケーションパッケージを変更しました。
注釈
VERSION 用に指定される値はラベルであり、数値や文字列ではありません。
注釈
追加した新バージョンのパッチ番号は、
0
で自動的に作成されます。あるバージョンのパッチを追加すると、自動的にパッチ数が増えます。しかし、新バージョン、たとえばV1_1
を作成すると、そのバージョンのパッチ番号は0
にリセットされます。バージョンがアプリケーションパッケージに追加されたことを確認するには、以下のコマンドを実行します。
snow app version list -c connection_name
このコマンドは、次の出力に示すように、バージョンに関する追加情報を表示します。
+---------+-------+-------+---------+-------------------------------+------------+-----------+-------------+-------+---------------+ | version | patch | label | comment | created_on | dropped_on | log_level | trace_level | state | review_status | |---------+-------+-------+---------+-------------------------------+------------+-----------+-------------+-------+---------------| | V1_0 | 0 | NULL | NULL | 2024-05-09 10:33:39.768 -0700 | NULL | OFF | OFF | READY | NOT_REVIEWED | +---------+-------+-------+---------+-------------------------------+------------+-----------+-------------+-------+---------------+
バージョンに基づいてアプリをインストールするには、以下のコマンドを実行します。
snow app run --version V1_0 -c connection_name
既存のアプリは名前付きステージのファイルを使用して作成されたため、バージョンを使用してアプリをアップグレードするには、既存のアプリを削除し、このバージョンで再作成する必要があります。プロンプトに応じて「はい」と答えます。
このセクションでは、アプリケーションパッケージを変更してアプリのバージョンを含め、バージョン管理された開発モードを使用してアプリケーションオブジェクトを再作成しました。
Snowsightでアプリを表示する¶
このセクションでは、アプリを Snowsight で表示します。前のセクションでは、 SQL ステートメントを使用して、アプリをテストしたり、情報を検索したりしました。ただし、 Snowsight でアプリに関する情報を表示することもできます。展開されたStreamlitアプリを表示することもできます。
Snowsight でアプリを表示するには、次を実行します。
Snowsight にサインインします。
次の操作を実行して、 ACCOUNTADMIN ロールに切り替えます。
ナビゲーションメニューでユーザー名を選択し、アカウントメニューを開きます。
アクティブなロールを選択します。例: PUBLIC。
ロールセレクターが表示されます。
ACCOUNTADMIN ロールを選択します。
Data Products » Apps を選択します。
HELLO_SNOWFLAKE_APP
を選択します。Read Me
タブには、前のセクションでapp/README.md
ファイルに追加したコンテンツが表示されます。Streamlitアプリを表示するには、 HELLO_SNOWFLAKE_STREAMLIT を選択します。
HELLO_SNOWFLAKE_DATA
データベースのコンテンツは、Streamlitデータフレームに表示されます。ワークシートでアプリを開くには、 Projects » Worksheets を選択します。
インストールされているワークシートのリストから HELLO_SNOWFLAKE_APP を選択します。
必要に応じて、アプリをインストールしたウェアハウスを選択してください。
SQL コマンドを使用して、Snowflakeワークシートからアプリをテストできます。たとえば、アプリケーションに追加した機能をテストするために、前のセクションで実行したコマンドを再実行することができます。
LIST @hello_snowflake_package.stage_content.hello_snowflake_stage;
CALL core.hello();
SELECT * FROM code_schema.accounts_view;
SELECT code_schema.addone(10);
SELECT code_schema.multiply(2,3);
注釈
このワークシートに追加した SQL ステートメントは、 Snowsight で別のページに移動すると失われます。
注釈
Snowflake CLI の snow app open
コマンドを使用して、アプリのユーザーインターフェイスを直接表示することもできます。このコマンドは、システムで設定されたウェブブラウザーで適切な URL を開きます。
アプリの公開とインストール¶
このセクションでは、アプリケーションパッケージをデータコンテンツとして使用するプライベートリストを作成して、アプリを公開します。リストを作成した後、別のアカウントにログインしてリストをインストールします。
デフォルトのリリースディレクティブの設定¶
アプリケーションパッケージのリストを作成する前に、リリースディレクティブを設定する必要があります。リリースディレクティブは、どのバージョンのアプリをコンシューマーが利用できるかを指定します。
このチュートリアルでは、前のセクションで追加したバージョンを使用してデフォルトのリリースディレクティブを設定します。
アプリケーションパッケージのデフォルトのリリースディレクティブを設定するには、以下を実行します。
アプリケーションパッケージに定義されているバージョンとパッチを表示するには、以下のコマンドを実行します。
snow app version list -c connection_name
このコマンドは、アプリケーションパッケージに定義されているバージョンとパッチを表示します。
デフォルトのリリースディレクティブをバージョン
v1_0
とパッチ0
に設定するには、以下のコマンドを実行します。snow sql -q "ALTER APPLICATION PACKAGE hello_snowflake_package SET DEFAULT RELEASE DIRECTIVE VERSION = v1_0 PATCH = 0"
このコマンドの出力を次の例に示します。
+-----------------------------------------------------------+ | status | |-----------------------------------------------------------| | Default release directive set to version 'V1_0', patch 0. | +-----------------------------------------------------------+
このセクションでは、アプリケーションパッケージにどのようなバージョンとパッチが存在するかを確認しました。この情報を使用して、アプリケーションパッケージのデフォルトのリリースディレクティブを定義しました。
アプリケーションのリストを作成する¶
アプリケーションパッケージに対するリリースディレクティブの指定が完了したため、リストを作成し、リストのデータコンテンツとしてアプリケーションパッケージを追加します。これにより、アプリを他のSnowflakeユーザーと共有し、そのユーザーが自身のアカウントにアプリをインストールして使用できるようになります。
アプリのリストを作成するには:
Snowsight にサインインします。
ナビゲーションメニューで Data Products » Provider Studio を選択します。
+ Listing を選択します。リスト作成ウィンドウが開きます。
リストトの名前を入力します。
In the Who can discover the listing セクションで Only specified consumers を選択して、リストを特定のアカウントとプライベートで共有します。
+ Select をクリックして、リストのアプリケーションパッケージを選択します。
リストの説明を入力します。
Add consumer accounts セクションでは、リストからアプリをインストールするためのコンシューマーエクスペリエンスのテストに使用するアカウントの識別子を追加します。
このセクションでは、共有データコンテンツとしてアプリケーションパッケージを含むプライベートリストを作成しました。
コンシューマーアカウントにアプリをインストールする¶
このセクションでは、前のセクションで作成したリストに関連するアプリをインストールします。コンシューマーが自身のアカウントにアプリをインストールする方法を模倣して、別のアカウントにリストをインストールします。
リストからアプリをインストールするには、次を実行します。
Snowsight にサインインします。
ナビゲーションメニューで Data Products » Apps を選択します。
Recently shared with you にあるリストのタイルを選択します。
Get を選択します。
アプリの顧客向けの名前を入力します。このチュートリアルでは、「Hello Snowflake App」を使用します。
アプリをインストールするウェアハウスを選択します。
Get を選択します。
Open を選択してリストを表示するか、 Done を選択して終了します。
このセクションでは、アプリを他のSnowflakeユーザーと共有するためのリストを公開し、インストールする方法を学びました。
詳細¶
おめでとうございます。このチュートリアルを終えただけでなく、 Snowflake Native App Framework を使用したアプリの開発と公開のライフサイクルに取り組みました。
その際、次も学びました。
Snowsight と Snowflake CLI を使用して、 Snowflake Native App Framework を使用したアプリを構築しました。
Snowsight の詳細については、 ワークシートをはじめるにあたり と Snowsightのワークシートで作業する をご参照ください。
Snowflake CLI の Snowflake Native App については、 Snowflake CLI での Snowflake Native App の使用 をご参照ください。
すべてのアプリで必要なマニフェストとセットアップスクリプトを作成しました。
詳細については、 アプリケーションパッケージのマニフェストファイルを作成する および セットアップスクリプトを作成する をご参照ください。
アプリのアプリケーションロジックとデータコンテンツのコンテナとして機能するアプリケーションパッケージを作成しました。
詳細については、 アプリケーションパッケージを作成する をご参照ください。
Pythonで記述されたストアドプロシージャと UDFs を使用してアプリにロジックを追加しました。
Snowflake Native App Framework でのストアドプロシージャ、 UDFs、外部関数の使用については、 アプリケーションパッケージにビジネスロジックを追加する をご参照ください。
プロシージャと関数の各型に関する一般的な情報については、 Snowpark API、 関数とプロシージャによるSnowflakeの拡張、および 外部関数の記述 をご参照ください。
アプリに共有データコンテンツを追加しました。
追加情報については、 Snowflake Native App でデータのコンテンツを共有する をご参照ください。
アプリにStreamlitアプリを含めました。
追加情報については、 Streamlitを使用してアプリにフロントエンドエクスペリエンスを追加する をご参照ください。
Snowsight でアプリを表示しました。
コンシューマーとしてのアプリの操作 をご参照ください
アプリのプライベートリストを作成し、別のSnowflakeアカウントにアプリをインストールしました。
アプリケーションパッケージを含んだリストの公開については、 コンシューマーとのアプリの共有 をご参照ください。
コンシューマーがリストからアプリをインストールする方法の情報については、 リストからのアプリのインストール をご参照ください。