チュートリアル1: 基本的なSnowflake Native Appsを作成する¶
概要¶
Snowflake Native App Framework は、プロバイダーはSnowflake Data Cloud内で Snowflake Native App を構築、販売、配布することを可能にします。プロバイダーは、Snowflakeのコア機能を活用してコンシューマーとデータやアプリケーションロジックを共有するアプリケーションを作成できます。 Snowflake Native App のロジックには、ストアドプロシージャやユーザー定義関数 (UDFs) などの関数があります。プロバイダーは、Snowflake Marketplaceのリストまたはプライベートリストを通じて、コンシューマーとアプリケーションを共有することができます。
このチュートリアルでは、 Snowflake Native App Framework を使用して、データと関連するビジネスロジックを他の Snowflake アカウントと共有するための基本的な Snowflake Native App を作成する方法について説明します。
注釈
このチュートリアルでは、 Snowflake CLI と Snowsight ウェブインターフェイスの両方を使用します。
このチュートリアルで学べること¶
このチュートリアルでは、次の方法を学びます。
アプリのデータとビジネスロジックを含むアプリケーションパッケージを作成する。
アプリケーションパッケージとデータを共有する。
アプリケーションパッケージにビジネスロジックを追加する。
アプリをローカルでテストする。
Snowsight でアプリを表示およびテストする。
プライベートリストを作成してアプリを公開する。
プライベートリストからアプリをインストールする。
Snowflake CLI を使用して、上記のステップの多くを実行する。
プロバイダーとコンシューマーについて¶
Snowflake Native App Framework のコンテキストでは、プロバイダーとは、コンシューマーである他のSnowflakeユーザーと共有するデータやビジネスロジックを持つロールや組織のことです。コンシューマーは、組織内の別のアカウント、会社内の別の組織、または別の会社のSnowflakeユーザーである場合があります。
このチュートリアルの文脈では、あなたが実行するタスクのほとんどはプロバイダーが通常実行するタスクですが、 アプリケーション開発者やデータベース管理者など、組織内の複数のロールが実行するタスクも含まれます。
このチュートリアルでは、コンシューマーがアプリをインストールするために行うアクションを模倣したタスクも実行します。
前提条件¶
マシンに Snowflake CLI バージョン 3.0.0 以上がインストールされている必要があります。
セッションコンテキストが必要であるため、すべての SQL コマンドを同じ SQL コマンドセッションで実行する必要があります。
たとえば、これを Snowsight で実行するには、作業をしながらすべてのコードを同じワークシートに貼り付けます。セクションからセクションに進むにつれて、各セクションは前のセクションに基づいて構築されます。
ACCOUNTADMIN ロールを使用して以下のタスクを実行できる必要があります。
このチュートリアルで使用するロール(
tutorial1_role
ロール)を作成します。tutorial1_role
ロールに必要な権限を付与します。アプリのリストを作成します。
このチュートリアルでは、
tutorial1_role
ロールを使用して、基本的な Snowflake Native App を作成する手順を実行します。ただし、一般的には、実行するアクションに対して特別に定義された権限を持つロールを使用します。例えば、次のようなユーザーに別々のロールを設定することができます。UDFs とストアドプロシージャを作成する開発者
ロールと権限を管理するデータベース管理者
Snowflake Collaboration を使用して リストを管理する 管理者
プライベートリストからアプリをインストールするには、2つ目のSnowflakeアカウントにアクセスする必要があります。このアカウントを使用して、コンシューマーがアプリをインストールする方法を模倣します。
注釈
Snowflake Native App Framework は、異なる組織のアカウントによるアプリの共有をサポートしていますが、このチュートリアルでは、両方のアカウントが同じ組織に属している必要があります。
現在のウェアハウスを設定する必要があります。 USE WAREHOUSE をご参照ください。
このチュートリアルのロールを設定する¶
tutorial1_role
ロールを作成してセットアップするには、以下の手順に従います。
tutorial1_role
ロールを作成します。CREATE ROLE tutorial1_role;
チュートリアルを行うSnowflakeユーザーに
tutorial1_role
を付与します。GRANT ROLE tutorial1_role TO USER <user_name>;
条件:
user_name
チュートリアルを行うユーザーの名前を指定します。
基本的な Snowflake Native App および Snowflake オブジェクトの作成に必要な権限を付与します。・
GRANT ALL PRIVILEGES ON warehouse <warehouse_name> TO ROLE tutorial1_role; GRANT CREATE APPLICATION PACKAGE ON ACCOUNT TO ROLE tutorial1_role; GRANT CREATE APPLICATION ON ACCOUNT TO ROLE tutorial1_role;
条件:
warehouse_name
現在セットされているウェアハウス名を指定します。
このセクションのタスクを実行した後、アカウントに tutorial1_role
ロールが付与されたユーザーは、基本 Snowflake Native App の作成に必要なすべての Snowflake オブジェクトを作成する権限を持っています。
このセクションでは、このチュートリアルで使用する tutorial1_role
ロールをセットします。次のセクションでは、チュートリアル用に Snowflake CLI 接続を作成します。
チュートリアル用にSnowflake CLI 接続を作成します。¶
このチュートリアルの Snowflake CLI コマンドを実行するには、チュートリアル用に Snowflake CLI 接続をセットアップする必要があります。
接続を作成します。
ターミナルから以下のコマンドを実行します。
snow connection add
接続名は
tut1-connection
と入力してください。Snowflake CLI 接続の追加情報を入力します。
使用する具体的な値は、Snowflakeアカウントによって異なります。ただし、ロールとウェアハウスのプロパティには以下の値を使用する必要があります。
パラメーター
必要値
接続のロール
チュートリアル1_ロール
接続用ウェアハウス
アクセス可能なウェアハウス名を指定します。
以下のコマンドを実行して接続を確認します。
snow connection test -c tut1-connection
このコマンドの出力は以下のようになるはずです。
+----------------------------------------------------------------------------------+ | key | value | |-----------------+----------------------------------------------------------------| | Connection name | tut1-connection | | Status | OK | | Host | USER_ACCOUNT.snowflakecomputing.com | | Account | USER_ACCOUNT | | User | tutorial_user | | Role | TUTORIAL1_ROLE | | Database | not set | | Warehouse | WAREHOUSE_NAME | +----------------------------------------------------------------------------------+
注意
tut1-connection
接続を作成しない場合は、ロール、データベース、ウェアハウスの接続プロパティに正しい値を指定した接続を使用する必要があります。
このセクションでは、チュートリアル用に Snowflake CLI 接続をセットアップします。次のセクションでは、アプリケーションファイルを作成します。
アプリケーションファイルを作成する¶
このセクションでは、セットアップ スクリプト、マニフェスト ファイル、およびプロジェクト定義ファイルを作成します。これらの最初の2つのファイルは Snowflake Native App Framework で必要となります。
- セットアップスクリプト
コンシューマーが自分のアカウントにアプリをインストールするときに自動的に実行される SQL スクリプト。
- マニフェストファイル
アプリに関する基本的な構成情報を含む YAML ファイル。
- プロジェクト定義ファイル
作成するSnowflakeオブジェクトに関する情報を含む YAML ファイル。
これらのファイルとその内容については、このチュートリアルで詳しく説明します。また、このチュートリアルの後のセクションでアプリを表示したり公開したりするときに便利なReadmeファイルも作成します。
新しいプロジェクトフォルダーの初期化¶
Snowflake CLI を使って、ローカルのファイルシステムにある新しい Snowflake Native App プロジェクトを初期化します。
これを実行するには、
次のコマンドを実行します:
snow init --template app_basic tutorial
プロジェクト識別子の値を入力してください。
この値は、snowアプリコマンドが生成するエンティティのベース名として使用されます。例えば、
foo
と入力すると、アプリケーションパッケージはfoo_pkg
となり、アプリケーションエンティティはfoo
となります。ただし、このチュートリアルでは、プロジェクト定義ファイル(snowflake.yml)の内容を置き換えるので、プロジェクト識別子として指定した値は上書きされます。
このコマンドは、現在の作業ディレクトリ内に tutorial
という名前のフォルダーを作成し、基本テンプレートに基づいて基本的な Snowflake Native App プロジェクトを作成します。これは、すべてのアプリケーションファイルのルートディレクトリです。
注釈
後のセクションで、このフォルダにファイルやサブフォルダを変更したり追加したりします。
注釈
Snowflake Native App Framework を素早く使いこなすために、他にもテンプレートが用意されています。詳細については、 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 identifier: hello_snowflake_package 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.yml
)は、Snowflakeアカウントで作成されるオブジェクトの名前を定義します。
アプリケーションパッケージ(
hello_snowflake_package
)アプリケーションパッケージから作成されるアプリケーションオブジェクト(
hello_snowflake_app
)アプリケーションファイルを保持するステージ(
stage_content.hello_snowflake_stage
)
アプリケーションパッケージの中核は、アプリに関する追加情報を含むように拡張されたSnowflakeデータベースです。その意味では、これは次を含むアプリのためのコンテナといえます。
共有データのコンテンツ
アプリケーションファイル
ステージ名はスキーマ修飾名として指定されることに注意してください。このスキーマはアプリケーションパッケージ内に作成されます。この名前付きステージは、 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 権限を付与しました。これにより、アプリのインストール時にセットアップスクリプトによってストアドプロシージャが作成されます。また、ストアドプロシージャを実行する権限もアプリに付与します。
ステージ開発モードでアプリをインストールしてテストする¶
これで、アプリケーションパッケージ、アプリ、プロジェクト定義ファイルで指定したその他すべてのエンティティを作成する準備が整いました。
これらのタスクを実行するには:
ターミナルで、
tutorial
フォルダに移動します。以下のSnowflake CLI コマンドを実行します。
snow app run -c tut1-connection
このコマンドは次のタスクを実行します。
スキーマ
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 tut1-connection
このコマンドを実行すると、次のような出力が表示されます。
+------------------+
| 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 tut1-connection
これにより、編集されたすべてのファイルがステージにアップロードされ、
scripts/shared_content.sql
スクリプトが実行され、ステージ上のファイルを使用してアプリがアップグレードされます。ビューが正しく動作することを確認するには、次のコマンドを実行します。
snow sql -q "SELECT * FROM hello_snowflake_app.code_schema.accounts_view" -c tut1-connection
このコマンドの出力は次のようになります。
+----+----------+-----------+ | 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 をアプリに含めるには、セットアップスクリプト (setup_script.sql) に以下のコードを追加します。
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関数をセットアップスクリプト(setup_script.sql)に追加します。
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 を作成し、アプリケーションロールに関数に対する権限を付与します。しかし、この例では、 IMPORTS 句があり、あなたが作成し、名前付きステージにインクルードした外部 Python ファイルをリファレンスしています。
tutorial
フォルダーにpython
という名前のサブフォルダーを作成します。python
サブフォルダーにhello_python.py
という名前のファイルを作成します。次を
hello_python.py
ファイルに追加します。def multiply(num1, num2): return num1*num2
この外部ファイルで定義された関数は、セットアップスクリプトで定義されたインライン関数と一致します。
プロジェクト定義ファイル(Snowflake.yml)の既存の
artifacts
セクションに以下を追加します。- python/hello_python.py
このセクションでは、アプリにPython UDF を追加しました。この UDF は、アプリケーションパッケージから参照できる外部Pythonモジュールを参照します。
更新されたアプリをインストールしてテストする¶
アプリをインストールしてテストするには:
アプリケーションパッケージとアプリを更新するには、次のコマンドを実行します。
snow app run -c tut1-connection
このコマンドは、編集されたファイルと新しいファイルをステージにアップロードし、ステージ上のファイルを使用してアプリをアップグレードします。
Pythonストアドプロシージャをテストするには、以下のコマンドを実行します。
snow sql -q "SELECT hello_snowflake_app.code_schema.addone(1)" -c tut1-connection
参照されたPython関数をテストするには、以下のコマンドを実行します。
snow sql -q "SELECT hello_snowflake_app.code_schema.multiply(1,2)" -c tut1-connection
このセクションで学んだことを復習する¶
このセクションでは、アプリに以下の新機能を追加しました。
インライン 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)
プロジェクト定義ファイル(Snowflake.yml)の既存の
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 tut1-connection
このコマンドは、編集されたファイルと新しいファイルをステージにアップロードし、ステージ上のファイルを使用してアプリをアップグレードします。次に、このコマンドが出力する 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 tut1-connection
前のセクションで名前付きステージにアップロードしたアプリケーションファイルに基づくバージョンを追加するために、このコマンドでアプリケーションパッケージを変更しました。
注釈
VERSION 用に指定される値はラベルであり、数値や文字列ではありません。
注釈
追加した新バージョンのパッチ番号は、
0
で自動的に作成されます。あるバージョンのパッチを追加すると、自動的にパッチ数が増えます。しかし、新バージョン、たとえばV1_1
を作成すると、そのバージョンのパッチ番号は0
にリセットされます。バージョンがアプリケーションパッケージに追加されたことを確認するには、以下のコマンドを実行します。
snow app version list -c tut1-connection
このコマンドは、次の出力に示すように、バージョンに関する追加情報を表示します。
+---------+-------+-------+---------+-------------------------------+------------+-----------+-------------+-------+---------------+ | 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 tut1-connection
既存のアプリは名前付きステージのファイルを使用して作成されたため、バージョンを使用してアプリをアップグレードするには、既存のアプリを削除し、このバージョンで再作成する必要があります。プロンプトに応じて「はい」と答えます。
このセクションでは、アプリケーションパッケージを変更してアプリのバージョンを含め、バージョン管理された開発モードを使用してアプリケーションオブジェクトを再作成しました。
Snowsightでアプリを表示する¶
このセクションでは、 Snowsight でアプリを表示します。前のセクションでは、 SQL ステートメントを使用して、アプリをテストしたり、情報を検索したりしました。ただし、 Snowsight でアプリに関する情報を表示することもできます。展開されたStreamlitアプリを表示することもできます。
Snowsight でアプリを表示するには、以下の手順に従ってください。
Snowsight にサインインします。
以前に作成した TUTORIAL1_ROLE ロールに切り替えます。
ナビゲーションメニューでユーザー名を選択し、アカウントメニューを開きます。
アクティブなロールを選択します。例: PUBLIC。
ロールセレクターが表示されます。
TUTORIAL1_ROLE ロールを選択します。
Data Products » Apps を選択します。
HELLO_SNOWFLAKE_APP
を選択します。Read Me
タブには、前のセクションでapp/README.md
ファイルに追加したコンテンツが表示されます。Streamlitアプリを表示するには、 HELLO_SNOWFLAKE_STREAMLIT を選択します。
必要に応じて、ウェアハウスを選択してください。
HELLO_SNOWFLAKE_DATA
データベースのコンテンツは、Streamlitデータフレームに表示されます。ワークシートでアプリを開くには、 Projects » Worksheets を選択します。
新しい SQL ワークシート を HELLO_SNOWFLAKE_APP という名前で新規作成します。
必要に応じて、アプリをインストールしたウェアハウスを選択してください。
作成した
tutorial1_role
ロールを選択します。USE ROLE tutorial1_role;
作成した
hello_snowflake_app
アプリケーションオブジェクトを選択します。USE APPLICATION hello_snowflake_app;
HELLO_SNOWFLAKE_PACKAGE アプリケーション・パッケージのリストを添付する権限を持つ ACCOUNTADMIN ロールを以下のコマンドで付与します。
GRANT ATTACH LISTING ON APPLICATION PACKAGE HELLO_SNOWFLAKE_PACKAGE TO ROLE ACCOUNTADMIN;
この付与は、次のセクションで行うアカウント管理者としてアプリを公開するために必要です。
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);
注釈
Snowflake CLI の snow app open
コマンドを使用して、アプリのユーザーインターフェイスを直接表示することもできます。このコマンドは、システムで設定されたウェブブラウザーで適切な URL を開きます。
アプリの公開とインストール¶
このセクションでは、アプリケーション・パッケージをデータ・コンテンツとして使用するプライベート・リストを作成して、アプリケーションを公開します。リストを作成した後、別のアカウントにログインしてリストをインストールします。
デフォルトのリリースディレクティブの設定¶
アプリケーションパッケージのリストを作成する前に、リリースディレクティブを設定する必要があります。リリースディレクティブは、コンシューマーが利用できるアプリのバージョンとパッチを指定します。
このチュートリアルでは、前のセクションで追加したバージョンを使ってデフォルトのリリースディレクティブをセットします。
アプリケーションパッケージにデフォルトのリリースディレクティブをセットするには、以下の手順に従ってください。
アプリケーションパッケージに定義されているバージョンとパッチを表示するには、以下のコマンドを実行します。
snow app version list -c tut1-connection
このコマンドは、アプリケーションパッケージに定義されているバージョンとパッチを表示します。
デフォルトのリリースディレクティブをバージョン
v1_0
とパッチ0
に設定するには、以下のコマンドを実行します。snow sql -q "ALTER APPLICATION PACKAGE hello_snowflake_package SET DEFAULT RELEASE DIRECTIVE VERSION = v1_0 PATCH = 0" -c tut1-connection
このコマンドの出力を次の例に示します。
+-----------------------------------------------------------+ | status | |-----------------------------------------------------------| | Default release directive set to version 'V1_0', patch 0. | +-----------------------------------------------------------+
このセクションでは、アプリケーションパッケージにどのようなバージョンとパッチが存在するかを確認しました。この情報を使用して、アプリケーションパッケージのデフォルトのリリースディレクティブを定義しました。
アプリケーションのリストを作成する¶
アプリケーション・パッケージにリリース指示文を指定したので、リストを作成し、リストのデータ内容としてアプリケーション・パッケージを追加します。これにより、アプリを他のSnowflakeユーザーと共有し、そのユーザーが自身のアカウントにアプリをインストールして使用できるようになります。
アプリのリストを作成するには:
Snowsight にサインインします。
ナビゲーションメニューで Data Products » Provider Studio を選択します。
+ Listing を選択し、次に Specified consumers を選択すると、リストを特定のアカウントと非公開で共有できます。
Select role ドロップダウンから、 ACCOUNTADMIN を選択します。
リストトの名前を入力します。
Next を選択します。
+ Select をクリックして、リストのアプリケーションパッケージを選択します。
リストの説明を入力します。
Add consumer accounts セクションでは、リストからアプリをインストールするためのコンシューマーエクスペリエンスのテストに使用するアカウントの識別子を追加します。
Publish を選択します。
このセクションでは、共有データコンテンツとしてアプリケーションパッケージを含むプライベートリストを作成しました。
コンシューマーアカウントにアプリをインストールする¶
このセクションでは、前のセクションで作成したリストに関連するアプリをインストールします。コンシューマーが自分のアカウントにアプリをインストールする方法を真似て、別のアカウントにリストをインストールします。
リストからアプリをインストールするには、以下の手順に従ってください。
Snowsight にサインインします。
ナビゲーションメニューで Data Products » Apps を選択します。
Recently shared with you にあるリストのタイルを選択します。
Get を選択します。
Options を選択し、アプリの顧客向けの名前を入力します。このチュートリアルでは、"HelloSnowflakeApp"を使用します。
アプリをインストールするウェアハウスを選択します。
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アカウントにアプリをインストールしました。
アプリケーションパッケージを含んだリストの公開については、 コンシューマーとのアプリの共有 をご参照ください。
コンシューマーがリストからアプリをインストールする方法の情報については、 リストからのアプリのインストール をご参照ください。