チュートリアル: Native Apps Frameworkを使用したアプリケーションの開発¶
概要¶
このチュートリアルでは、Native Apps Frameworkを使用して、他のSnowflakeアカウントとデータと関連するビジネスロジックを共有するアプリケーションを作成する方法について説明します。
このチュートリアルでは Snowsight ウェブインターフェイスを使用しますが、 SnowSQL など、 SQL の実行をサポートする任意のSnowflakeクライアントを使用できます。
学習内容¶
このチュートリアルでは、次の方法を学習します。
アプリケーションのデータとビジネスロジックを含むアプリケーションパッケージを作成する。
アプリケーションパッケージとデータを共有する。
アプリケーションパッケージにビジネスロジックを追加する。
アプリケーションをローカルでテストする。
Snowsight でアプリケーションを表示し、テストする。
プライベートリストの作成によりアプリケーションを公開する。
プライベートリストからアプリケーションをインストールする。
プロバイダーとコンシューマーについて¶
Native Apps Frameworkのコンテキストでは、プロバイダーとは、コンシューマーである他のSnowflakeユーザーと共有するデータやビジネスロジックを持つロールや組織のことです。コンシューマーは、組織内の別のアカウント、会社内の別の組織、または別の会社のSnowflakeユーザーである場合があります。
このチュートリアルでは、ほとんどのタスクはプロバイダーが通常実行するものですが、アプリケーション開発者やデータベース管理者など、組織内の複数のロールが実行するタスクも含まれます。
このチュートリアルでは、コンシューマーアプリケーションをインストールするために実行するアクションを模倣するタスクも実行します。
前提条件¶
セッションコンテキストが必要であるため、すべての SQL コマンドを同じ SQL コマンドセッションで実行する必要があります。
たとえば、これを Snowsight で実行するには、作業をしながらすべてのコードを同じワークシートに貼り付けます。セクションからセクションに進むにつれて、各セクションは前のセクションに基づいて構築されます。
ACCOUNTADMIN ロールが使用できなければなりません。
このチュートリアルでは、 ACCOUNTADMIN ロールを使用してすべてのステップを実行します。ただし、一般的には、実行するアクションに対して特別に定義された権限を持つロールを使用します。たとえば、 UDFs とストアドプロシージャを作成する開発者、ロールと権限を管理するデータベース管理者、Snowflakeコラボレーションを使用して リストを管理する 管理者用に、それぞれ別のロールを設定することができます。
プライベートリストからアプリケーションをインストールするには、2つ目のSnowflakeアカウントにアクセスする必要があります。このアカウントを使用して、コンシューマーがアプリケーションをインストールする方法を模倣します。
注釈
Native Apps Frameworkは、異なる組織のアカウントによるアプリケーションの共有をサポートしていますが、このチュートリアルでは、両方のアカウントが同じ組織に属している必要があります。
チュートリアルを実行する前に、現在のウェアハウスを設定する必要があります。セッションに対してウェアハウスを指定し、ウェアハウスを実行してからでないと、セッションでクエリやその他の DML ステートメントを実行できません。詳細については、 USE WAREHOUSE をご参照ください。
アプリケーションファイルを作成する¶
このセクションでは、セットアップスクリプトとマニフェストファイルを作成します。これらのファイルはどちらもNative Apps Frameworkで必要になります。
- セットアップスクリプト
コンシューマーが自分のアカウントにアプリケーションをインストールするときに自動的に実行される SQL スクリプト。
- マニフェストファイル
アプリケーションに関する基本的な構成情報を含む YAML ファイル。
このチュートリアルで、これらのファイルとその内容について詳しく説明します。また、このチュートリアルの後のセクションでアプリケーションを表示したり公開したりするときに役立つReadmeファイルも作成します。
セットアップスクリプトを作成する¶
セットアップスクリプトを作成するには、次を実行します。
ローカルのファイルシステムに、
tutorial
という名前のフォルダーを作成します。これはアプリケーションの外部ファイルのルートディレクトリになります。注釈
このフォルダーには、後のセクションでさらにファイルやサブフォルダーを追加します。
tutorial
フォルダーにscripts
という名前のサブフォルダーを作成します。このフォルダーに、
setup.sql
という名前の新規ファイルを作成します。注釈
このチュートリアルでは、セットアップスクリプトのこの構造とファイル名を参照します。しかし、独自のアプリケーションをビルドする際には、このファイルの名前やディレクトリ構造を自分で決めることができます。
このファイルに以下の SQL ステートメントを追加します。
-- Setup script for the Hello Snowflake! application.
この行をプレースホルダーとして追加するのは、セットアップスクリプトを空にはできないためです。
アプリケーションの README ファイルを作成する¶
Readmeファイルは、アプリケーションが何をするのかについての説明を提供します。 Snowsight でアプリケーションを表示すると、Readmeが表示されます。
アプリケーションのReadme.mdファイルを作成するには、
tutorial
フォルダーに、readme.md
という名前のファイルを作成します。このファイルに以下のコンテンツを追加します。
This is the readme file for the Hello Snowflake Application!
マニフェストファイルを作成する¶
Native Apps Frameworkには、アプリケーションごとにマニフェストファイルが必要です。マニフェストファイルには、アプリケーションのメタデータと構成パラメーター含まれます。
マニフェストファイルを作成するには、
tutorial
フォルダーに、manifest.yml
という名前のファイルを作成します。注釈
このファイルには
manifest.yml
という名前を付け、ファイルはプロジェクトのルートレベルに存在する必要があります。セットアップスクリプトを含む他のファイルへのパスは、このファイルの場所からの相対パスです。このファイルに以下のコンテンツを追加します。
manifest_version: 1 artifacts: setup_script: scripts/setup.sql readme: readme.md
setup_script
プロパティは、マニフェストファイルの場所に対するセットアップスクリプトの場所を指定します。ここで指定するパスとファイル名は、上記で作成したセットアップスクリプトの場所と同じにする必要があります。注釈
manifest_version
、artifacts
、およびsetup_script
プロパティは必須です。readme
パラメーターはオプションです。
このセクションで学んだことを復習する¶
このセクションのステップを実行した後、ディレクトリ構造は次のようになります。
/tutorial
manifest.yml
readme.md
/scripts/
setup.sql
このセクションでは、Native Apps Frameworkで必要なセットアップスクリプトとマニフェストファイルの作成方法を学びました。この2つのファイルに追加したコンテンツは基本的なものですが、すべてのアプリケーションにこれらのファイルが必要です。
また、 Snowsight でアプリケーションを表示するときや、アプリケーションをリストとして公開するときに表示されるReadmeファイルも追加しました。
アプリケーションパッケージを作成する¶
このセクションでは、アプリケーションに必要なリソースのコンテナーとして機能するアプリケーションパッケージを作成します。次のタスクを実行します。
アプリケーションパッケージを作成する。
アプリケーションパッケージ内に名前付きステージングを作成する。
アプリケーションパッケージを作成する¶
アプリケーションパッケージの中核は、アプリケーションに関する追加情報を含むように拡張されたSnowflakeデータベースです。その意味では、次を含むアプリケーションのためのコンテナーといえます。
共有データのコンテンツ
アプリケーションファイル
アプリケーションパッケージを作成するには、
ロールに CREATE APPLICATION PACKAGE 権限を付与するには、以下のコマンドを実行します。
GRANT CREATE APPLICATION PACKAGE ON ACCOUNT TO ROLE accountadmin;
注釈
ACCOUNTADMIN ロールにはデフォルトでこの権限がありますが、アプリケーションパッケージを作成するには、使用するロールにこの権限が付与されていることを確認する必要があります。
アプリケーションパッケージを作成するには、以下のコマンドを実行します。
CREATE APPLICATION PACKAGE hello_snowflake_package;
注釈
このコマンドを実行すると、現在のコンテキストは HELLO_SNOWFLAKE_PACKAGE に変わります。
アプリケーションパッケージが正常に作成されたことを確認するには、以下のコマンドを実行します。
SHOW APPLICATION PACKAGES;
出力の
name
列にHELLO_SNOWFLAKE_PACKAGE
と表示されます。このコマンドの追加情報については、 SHOW APPLICATION PACKAGES をご参照ください。
このセクションでは、アプリケーションパッケージがアプリケーションで使用されるリソースのコンテナーであることを学びました。また、アプリケーションパッケージの作成方法も学びました。
名前付きステージを作成する¶
このセクションでは、Native Apps Frameworkで必要なファイルを格納するための名前付きステージを作成します。アプリケーションに含める外部コードファイルを格納するために、名前付きステージも必要です。これらのファイルを名前付きステージにアップロードすると、アプリケーションを作成するときに利用できるようになります。
名前付き内部ステージを作成するには、次を実行します。
前のセクションで作成したアプリケーションパッケージにコンテキストを設定するには、以下のコマンドを実行します。
USE APPLICATION PACKAGE hello_snowflake_package;
名前付きステージに必要なスキーマを作成するには、以下のコマンドを実行します。
CREATE SCHEMA stage_content;
名前付きステージを作成するには、以下のコマンドを実行します。
CREATE OR REPLACE STAGE hello_snowflake_package.stage_content.hello_snowflake_stage FILE_FORMAT = (TYPE = 'csv' FIELD_DELIMITER = '|' SKIP_HEADER = 1);
このコマンドは、前のステップで作成したデータベースとスキーマに名前付きステージを作成します。
注釈
このコマンドの一部として
FILE_FORMAT = (TYPE = 'CSV' FIELD_DELIMITER = '|' SKIP_HEADER = 1);
を含める必要があります。これらはオプションではありません。
これで、アプリケーションパッケージの中に、アプリケーションのビルドに使用するファイルをアップロードする名前付きステージができました。
注釈
このチュートリアルでは、アプリケーションパッケージ内の名前付きステージを使用しますが、これは必須ではありません。アプリケーションパッケージ外部のデータベースとスキーマに存在する名前付きステージを使用することもできます。
名前付きステージにアプリケーションファイルをアップロードする¶
前のセクションでは、アプリケーションのコンテナーとして機能するアプリケーションパッケージを作成しました。また、アプリケーションパッケージ内に、必要なアプリケーションファイルを含む名前付きステージを作成しました。
このセクションでは、これらのファイルを名前付きステージにアップロードします。
アプリケーションファイルをアップロードするには、以下のうちの1つを実行します。
Snowsightを使用したファイルのステージング で説明されているように、 Snowsight を使用してアプリケーションファイルをアップロードします。
以下のコマンドの実行により、 SnowSQL を使用してアプリケーションファイルをアップロードします。
PUT file:///<path_to_your_root_folder>/tutorial/manifest.yml @hello_snowflake_package.stage_content.hello_snowflake_stage overwrite=true auto_compress=false; PUT file:///<path_to_your_root_folder>/tutorial/scripts/setup.sql @hello_snowflake_package.stage_content.hello_snowflake_stage/scripts overwrite=true auto_compress=false; PUT file:///<path_to_your_root_folder>/tutorial/readme.md @hello_snowflake_package.stage_content.hello_snowflake_stage overwrite=true auto_compress=false;
注釈
上記の例のパスを変更して、プロジェクトのルートフォルダーへのパスを反映させます。
ワークシートで以下のコマンドを実行し、ファイルのアップロードが成功したことを確認します。
LIST @hello_snowflake_package.stage_content.hello_snowflake_stage;
このコマンドを実行すると、以下の出力に示すように各ファイルがリストされます。
+----------------------------------------+------+----------------------------------+-------------------------------+
| name | size | md5 | last_modified |
|----------------------------------------+------+----------------------------------+-------------------------------|
| hello_snowflake_stage/manifest.yml | 80 | 9acab2ba718eebfa5f98f4e95c822db6 | Mon, 29 May 2023 22:51:04 GMT |
| hello_snowflake_stage/readme.md | 64 | 1bc95f95109dc60a09b478dd95c31808 | Mon, 29 May 2023 22:51:05 GMT |
| hello_snowflake_stage/scripts/setup.sql | 64 | 7807ee1f2f27312799fc83c66ba775cf | Mon, 29 May 2023 22:51:04 GMT |
+----------------------------------------+------+----------------------------------+-------------------------------+
このセクションでは、アプリケーションファイルを名前付きステージにアップロードしました。これらのファイルは、アプリケーションの開発を続ける際に、アプリケーションパッケージで利用できるようになります。後のセクションで、アプリケーションに機能を追加する際、これらのファイルの改訂したファイルや新規ファイルをアップロードするために、このセクションに戻ります。
アプリケーションロジックを追加し、最初のアプリケーションをインストールする¶
このセクションでは、コードを追加し、最初のアプリケーションをインストールします。そのために、以下のタスクを実行します。
セットアップスクリプトにストアドプロシージャを追加する。
アプリケーションにバージョンを追加する。
アプリケーションをインストールしてテストする。
セットアップスクリプトにストアドプロシージャを追加する¶
前のセクションでは、アプリケーションパッケージを作成しました。しかし、アプリケーションパッケージにはまだデータコンテンツやアプリケーションファイルは含まれていません。
このセクションでは、ストアドプロシージャのコードをローカルファイルシステムのセットアップスクリプトに追加して、アプリケーションにストアドプロシージャを追加します。
セットアップスクリプトにストアドプロシージャを追加するには、
前のセクションで作成した
setup.sql
ファイルの最後に、以下の SQL ステートメントを追加します。CREATE APPLICATION ROLE app_public; CREATE SCHEMA IF NOT EXISTS core; GRANT USAGE ON SCHEMA core TO APPLICATION ROLE app_public;
インストール中にセットアップスクリプトが実行されると、これらのステートメントにより、
app_public
という名前のアプリケーションロールが作成されます。アプリケーションロールはデータベースロールに似ていますが、アプリケーションのコンテキスト内でのみ使用できます。アプリケーション内のオブジェクトへのアクセス権を付与するために使用されます。この例では、ストアドプロシージャを格納するスキーマも作成し、そのスキーマの USAGE 権限をアプリケーションロールに付与しています。アプリケーションロールを作成し、スキーマなどのオブジェクトに対する権限をアプリケーションロールに付与することは、セットアップスクリプト内で一般的なパターンです。
ストアドプロシージャのコードを
setup.sql
ファイルの最後に追加します。CREATE OR REPLACE PROCEDURE CORE.HELLO() RETURNS STRING LANGUAGE SQL EXECUTE AS OWNER AS BEGIN RETURN 'Hello Snowflake!'; END;
この例では、文字列「Hello Snowflake!」を出力するストアドプロシージャを作成します。
setup.sql
ファイルの最後に以下のステートメントを追加します。GRANT USAGE ON PROCEDURE core.hello() TO APPLICATION ROLE app_public;
この例では、ストアドプロシージャに対する USAGE 権限をアプリケーションロールに付与しています。
改訂したセットアップスクリプトを名前付きステージにアップロードします。
前のセクション(名前付きステージにアプリケーションファイルをアップロードする)を参照して、改訂したセットアップスクリプトをアップロードします。
このセクションでは、セットアップスクリプトにストアドプロシージャを追加しました。また、アプリケーションロールを作成し、このロールに USAGE 権限を付与しました。これにより、アプリケーションの作成時にセットアップスクリプトはストアドプロシージャを作成できるようになります。また、アプリケーションにストアドプロシージャを実行する権限を与えます。
アプリケーションをインストールする¶
前のセクションでは、ストアドプロシージャを含めるようにセットアップスクリプトを変更しました。
このセクションでは、アプリケーションをインストールし、 Snowsight を使用してストアドプロシージャを実行します。
アプリケーションをインストールするには、次を実行します。
アプリケーションを作成するには、以下のコマンドを実行します。
CREATE APPLICATION HELLO_SNOWFLAKE_APP FROM APPLICATION PACKAGE HELLO_SNOWFLAKE_PACKAGE USING '@hello_snowflake_package.stage_content.hello_snowflake_stage';
アプリケーションが正常に作成されたことを確認するには、以下のコマンドを実行します。
SHOW APPLICATIONS;
出力の
name
列でHELLO_SNOWFLAKE_APP
が表示されます。前のセクションで
setup.sql
に追加したHELLO
ストアドプロシージャを実行するには、以下のコマンドを実行します。CALL core.hello();
このコマンドを実行すると、次のような出力が表示されます。
+------------------+ | HELLO | |------------------| | HELLO SNOWFLAKE! | +------------------+
このセクションで学んだことを復習する¶
おめでとうございます。Native Apps Frameworkを使用して最初のアプリケーションを作成し、インストールし、テストしました。アプリケーションには基本的な機能しかありませんが、アプリケーションを構築するために使用したコンポーネントはより複雑なアプリケーションでも同じです。
このセクションでは、以下を完了しました。
セットアップスクリプトにストアドプロシージャを追加しました。セットアップスクリプトは、コンシューマーアカウントにアプリケーションをインストールする方法を指定します。この後のセクションでは、アプリケーションにデータコンテンツや他のタイプのアプリケーションロジックを追加します。
ストアドプロシージャを実行してアプリケーションをインストールし、テストしました。後のセクションでは、アプリケーションを表示してテストする他の方法について学びます。
アプリケーションにデータコンテンツを追加する¶
前のセクションでは、アプリケーションにアプリケーションロジックを追加する方法を示すストアドプロシージャを含んだ、アプリケーションを作成しました。
このセクションでは、 HELLO_SNOWFLAKE_PACAKAGE
アプリケーションパッケージ内にデータベースを作成し、このデータベースをアプリケーションと共有する権限を付与して、データコンテンツをアプリケーションに含めます。
データコンテンツにアクセスするためのビューを追加する¶
このセクションでは、セットアップスクリプトを更新して、前のサブセクションで作成した ACCOUNTS
テーブルのデータにアプリケーションからアクセスできるようにするビューを追加します。
データコンテンツにアクセスするためのビューを追加するには、
ビューのスキーマを作成するには、セットアップスクリプトに以下を追加します。
CREATE OR ALTER VERSIONED SCHEMA code_schema; GRANT USAGE ON SCHEMA code_schema TO APPLICATION ROLE app_public;
これらのステートメントは、ビューを含むバージョン管理されたスキーマを作成し、そのスキーマに対する USAGE 権限を付与します。Native Apps 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
スキーマにビューを作成し、ビューに対する必要な権限をアプリケーションロールに付与します。改訂したセットアップスクリプトを名前付きステージにアップロードします。
前のセクション 名前付きステージにアプリケーションファイルをアップロードする を参照して、このセクションで更新したファイルをアップロードします。
更新されたアプリケーションをテストする¶
このサブセクションでは、アプリケーションを再インストールし、インストールされたアプリケーション内のビューを使用して、例のテーブルをクエリします。
更新されたアプリケーションをテストするには、次を実行します。
既存のアプリケーションを削除するには、以下のコマンドを実行します。
DROP APPLICATION hello_snowflake_app;
アプリケーションの新バージョンを作成するには、以下のコマンドを実行します。
CREATE APPLICATION hello_snowflake_app FROM APPLICATION PACKAGE hello_snowflake_package USING '@hello_snowflake_package.stage_content.hello_snowflake_stage';
ビューが正常に機能することを確認するには、以下のコマンドを実行します。
SELECT * FROM code_schema.accounts_view;
このコマンドの出力は、サンプルデータのセットアップ時に実行した SELECT コマンドの出力と同じです。
+----+----------+-----------+ | ID | NAME | VALUE | |----+----------+-----------| | 1 | Nihar | Snowflake | | 2 | Frank | Snowflake | | 3 | Benoit | Snowflake | | 4 | Steven | Acme | +----+----------+-----------+
このセクションで学んだことを復習する¶
このセクションでは、以下のタスクを実行して、共有データコンテンツをアプリケーションに含める方法を学びました。
アプリケーションパッケージ内に
ACCOUNTS
テーブルを作成し、そのテーブルにデータを挿入する。アプリケーションパッケージに
ACCOUNTS
テーブルに対する参照の使用権を付与する。アプリケーションパッケージの
ACCOUNTS
テーブルを参照するスキーマとビューを作成する。アプリケーションロールにスキーマの使用権を付与する。
アプリケーションロールにビューの選択権を付与する。
また、セットアップスクリプトを更新して、アプリケーションのインストール時に以下を実行するようにしました。
アプリケーションが例のデータにアクセスするために使用するスキーマとビューを作成する。
アプリケーションロールにスキーマの使用権を付与する。
アプリケーションロールにビューの選択権を付与する。
HELLO_SNOWFLAKE_DATA
データベースをセットアップするために実行したコマンドは、セットアップスクリプトと類似していることに注意してください。
アプリケーションに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.8' 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.8 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
この外部ファイルで定義された関数は、セットアップスクリプトで定義されたインライン関数と一致します。
このセクションでは、アプリケーションにPython UDF を追加しました。この UDF は、アプリケーションパッケージから参照できる外部Pythonモジュールを参照します。
更新されたアプリケーションをインストールしてテストする¶
新規ファイルと改訂したファイルを名前付きステージにアップロードします。
名前付きステージにアプリケーションファイルをアップロードする のセクションを参照して外部Pythonファイルをアップロードしてから、ここに戻ってチュートリアルを続けます。
ファイルのアップロードに SnowSQL を使用している場合は、以下のコマンドを実行します。
PUT file:///<path_to_your_root_folder>/tutorial/scripts/setup.sql @hello_snowflake_package.stage_content.hello_snowflake_stage/scripts overwrite=true auto_compress=false; PUT file:///<path_to_your_root_folder>/tutorial/python/hello_python.py @hello_snowflake_package.stage_content.hello_snowflake_stage/python overwrite=true auto_compress=false;
既存のアプリケーションを削除するには、以下のコマンドを実行します。
DROP APPLICATION hello_snowflake_app;
アプリケーションの新バージョンを作成するには、以下のコマンドを実行します。
CREATE APPLICATION hello_snowflake_app FROM APPLICATION PACKAGE hello_snowflake_package USING '@hello_snowflake_package.stage_content.hello_snowflake_stage';
Pythonストアドプロシージャをテストするには、以下のコマンドを実行します。
SELECT code_schema.addone(1);
参照されたPython関数をテストするには、以下のコマンドを実行します。
SELECT code_schema.multiply(1,2);
このセクションで学んだことを復習する¶
このセクションでは、アプリケーションに以下の新機能を追加しました。
インライン UDF として定義されたPython関数。
外部コードを参照する UDF として定義されたPython関数。
また、アプリケーションの更新バージョンをインストールして、各関数を実行し、これらの各例をテストしました。
アプリケーションにStreamlitアプリを追加する¶
このセクションでは、Streamlitアプリを追加して、アプリケーションを完成させます。Streamlitは、データサイエンスと機械学習アプリケーションを開発するためのオープンソースのPythonフレームワークです。Native AppsにStreamlitアプリを含めると、ユーザーとのインタラクションやデータ可視化を追加できます。
Streamlitアプリファイルを作成する¶
Streamlitアプリを作成するには、次を実行します。
tutorial
フォルダーに、streamlit
という名前のサブフォルダーを作成します。streamlit
フォルダーに、hello_snowflake.py
という名前のファイルを作成します。このファイルに以下のコードを追加します。
# Import python packages import streamlit as st from snowflake.snowpark.context import get_active_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 = get_active_session() # 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)
セットアップスクリプトにStreamlitオブジェクトを追加する¶
アプリケーションでStreamlitオブジェクトを作成するには、次を実行します。
setup.sql
ファイルの末尾に、Streamlitオブジェクトを作成するための以下のステートメントを追加します。CREATE STREAMLIT code_schema.hello_snowflake_streamlit FROM '/streamlit' MAIN_FILE = '/hello_snowflake.py' ;
このステートメントはコアスキーマに STREAMLIT オブジェクトを作成します。
APP_PUBLIC ロールがStreamlitオブジェクトにアクセスできるように、
setup.sql
ファイルの末尾に以下のステートメントを追加します。GRANT USAGE ON STREAMLIT code_schema.hello_snowflake_streamlit TO APPLICATION ROLE app_public;
新規および更新されたアプリケーションファイルを名前付きステージにアップロードします。
前のセクション 名前付きステージにアプリケーションファイルをアップロードする を参照して、作成したStreamlitファイルをアップロードしてから、ここに戻ってチュートリアルを続けます。
ファイルのアップロードに SnowSQL を使用している場合は、以下のコマンドを実行します。
PUT file:///<path_to_your_root_folder>/tutorial/scripts/setup.sql @hello_snowflake_package.stage_content.hello_snowflake_stage/scripts overwrite=true auto_compress=false; PUT file:///<path_to_your_root_folder>/tutorial/streamlit/hello_snowflake.py @hello_snowflake_package.stage_content.hello_snowflake_stage/streamlit overwrite=true auto_compress=false;
更新されたアプリケーションをインストールする¶
改訂したセットアップスクリプトを名前付きステージにアップロードします。
前のセクション(名前付きステージにアプリケーションファイルをアップロードする)を参照して、改訂したセットアップスクリプトをアップロードします。
以前のアプリケーションを削除するには、以下のコマンドを実行します。
DROP APPLICATION hello_snowflake_app;
アプリケーションの新バージョンを作成するには、以下のコマンドを実行します。
CREATE APPLICATION hello_snowflake_app FROM APPLICATION PACKAGE hello_snowflake_package USING '@hello_snowflake_package.stage_content.hello_snowflake_stage';
このセクションで学んだことを復習する¶
このセクションでは、以下を実行してStreamlitアプリをアプリケーションに追加しました。
Streamlitアプリを作成します。
アプリケーションにバージョンを追加する¶
このセクションでは、このチュートリアルで追加したすべての機能を含むバージョンをアプリケーションに追加します。そのために、 ALTER APPLICATION PACKAGE コマンドを使用して、以前に作成したアプリケーションパッケージを更新します。
アプリケーションにバージョンを追加するには、
HELLO_SNOWFLAKE_PACKAGE
アプリケーションパッケージにバージョンを追加するには、以下のコマンドを実行します。ALTER APPLICATION PACKAGE hello_snowflake_package ADD VERSION v1_0 USING '@hello_snowflake_package.stage_content.hello_snowflake_stage';
前のセクションで名前付きステージにアップロードしたアプリケーションファイルに基づくバージョンを追加するために、このコマンドでアプリケーションパッケージを変更しました。
注釈
VERSION 用に指定される値はラベルであり、数値や文字列ではありません。詳細については、 ALTER APPLICATION PACKAGE をご参照ください
注釈
追加した新バージョンのパッチ番号は、
0
で自動的に作成されます。あるバージョンのパッチを追加すると、自動的にパッチ数が増えます。しかし、新バージョン、たとえばV1_1
を作成すると、そのバージョンのパッチ番号は0
にリセットされます。バージョンがアプリケーションパッケージに追加されたことを確認するには、以下のコマンドを実行します。
SHOW VERSIONS IN APPLICATION PACKAGE hello_snowflake_package;
このコマンドは、次の出力に示すように、バージョンに関する追加情報を表示します。
+---------+-------+-------+---------+-------------------------------+------------+-----------+-------------+-------+---------------+ | version | patch | label | comment | created_on | dropped_on | log_level | trace_level | state | review_status | |---------+-------+-------+---------+-------------------------------+------------+-----------+-------------+-------+---------------| | V1_0 | 0 | NULL | NULL | 2023-05-30 10:33:39.768 -0700 | NULL | OFF | OFF | READY | NOT_REVIEWED | +---------+-------+-------+---------+-------------------------------+------------+-----------+-------------+-------+---------------+
詳細については、 SHOW VERSIONS をご参照ください
バージョンに基づいてアプリケーションをインストールするには、以下のコマンドを実行します。
DROP APPLICATION hello_snowflake_app; CREATE APPLICATION hello_snowflake_app FROM APPLICATION PACKAGE hello_snowflake_package USING VERSION V1_0;
このセクションでは、アプリケーションのバージョンを含むようにアプリケーションパッケージを変更しました。
Snowsightでアプリケーションを表示する¶
このセクションでは、アプリケーションを Snowsight で表示します。前のセクションでは、 SQL ステートメントを使用して、アプリケーションをテストしたり、情報を検索したりしました。ただし、 Snowsight でアプリケーションに関する情報を表示することもできます。展開されたStreamlitアプリケーションを表示することもできます。
Snowsight でアプリケーションを表示するには、次を実行します。
Snowsight にサインインします。
Data Products » Apps を選択します。
HELLO_SNOWFLAKE_APP
を選択します。Read Me
タブには、前のセクションでreadme.md
ファイルに追加したコンテンツが表示されます。Streamlitアプリを表示するには、 HELLOSNOWFLAKE_STREAMLIT を選択します。
HELLO_SNOWFLAKE_DATA
データベースのコンテンツは、Streamlitデータフレームに表示されます。Snowflakeワークシートでアプリケーションを開くには、 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 で別のページに移動すると失われます。
アプリケーションを公開してインストールする¶
このセクションでは、アプリケーションパッケージをデータコンテンツとして使用するプライベートリストを作成して、アプリケーションを公開します。リストを作成した後、別のアカウントにログインしてリストをインストールします。
デフォルトのリリースディレクティブを設定する¶
アプリケーションパッケージのリストを作成する前に、リリースディレクティブを設定する必要があります。リリースディレクティブは、どのバージョンのアプリケーションをコンシューマーが利用できるかを指定します。
このチュートリアルでは、前のセクションで追加したバージョンを使用してデフォルトのリリースディレクティブを設定します。
アプリケーションパッケージのデフォルトのリリースディレクティブを設定するには、以下を実行します。
アプリケーションパッケージに定義されているバージョンとパッチを表示するには、以下のコマンドを実行します。
SHOW VERSIONS IN APPLICATION PACKAGE hello_snowflake_package;
このコマンドは、アプリケーションパッケージに定義されているバージョンとパッチを表示します。
デフォルトのリリースディレクティブをバージョン
v1_0
とパッチ0
に設定するには、以下のコマンドを実行します。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ユーザーと共有するためのリストを公開し、インストールする方法を学びました。
詳細¶
おめでとうございます。このチュートリアルを終えただけでなく、Native Apps Frameworkを使用したアプリケーションの開発と公開のライフサイクルに取り組みました。
その際、次も学びました。
Snowsight とSnowflakeワークシートを使用して、Native Apps Frameworkを使用したアプリケーションを構築しました。
Snowsight の詳細については、 ワークシートをはじめるにあたり と Snowsightでのワークシートの管理と使用 をご参照ください。
すべてのアプリケーションで必要なマニフェストとセットアップスクリプトを作成しました。
詳細については、 アプリケーションパッケージのマニフェストファイルを作成する および セットアップスクリプトを作成する をご参照ください。
アプリケーションのアプリケーションロジックとデータコンテンツのコンテナーとして機能するアプリケーションパッケージを作成しました。
詳細については、 アプリケーションパッケージを作成する をご参照ください。
Pythonで記述されたストアドプロシージャと UDFs を使用してアプリケーションにロジックを追加しました。
Native Apps Frameworkでのストアドプロシージャ、 UDFs、外部関数の使用については、 アプリケーションパッケージにビジネスロジックを追加する をご参照ください。
プロシージャと関数の各型に関する一般的な情報については、 Snowpark API、 関数とプロシージャによるSnowflakeの拡張、および 外部関数の記述 をご参照ください。
アプリケーションに共有データコンテンツを追加しました。
追加情報については、 アプリケーションパッケージに共有データコンテンツを追加する をご参照ください。
アプリケーションにStreamlitアプリが含めました。
追加情報については、 Streamlitを使用してアプリにフロントエンドエクスペリエンスを追加する をご参照ください。
Snowsight でアプリケーションを表示しました。
コンシューマーとしてのアプリケーションの操作 をご参照ください
アプリケーションのプライベートリストを作成し、別のアカウントにアプリケーションをインストールしました。
アプリケーションパッケージを含んだリストの公開については、 コンシューマーとのアプリケーションの共有 をご参照ください。
コンシューマーがリストからアプリケーションをインストールする方法の情報については、 リストからのアプリケーションのインストール をご参照ください。