コードバンドル¶
コラボレーターは、カスタムPythonプロシージャ、 UDFs または UDTFs をコラボレーションテンプレートでバンドルできます。テンプレートは順番にバンドルされたコードを参照して、コラボレーションで複雑なデータアクションを実行します。一般的な使用法には、クエリ内の機械学習やカスタマイズされたデータ操作が含まれます。アップロードされたコードは、 Pythonパッケージの承認済みバンドル および Snowpark API からパッケージをインポートして、使用できます。
カスタムコードはテンプレート経由でのみ呼び出すことができ、直接呼び出すことはできません。
注釈
Pythonは、コードバンドルでサポートされている唯一のコーディング言語です。
次のセクションでは、コードバンドルをアップロードして使用する方法を説明します。
カスタムコードバンドルの実装¶
コードバンドルをアップロードして使用する方法は次のとおりです。
コード送信者
REGISTER_CODE_SPEC。
コードは仕様内にインラインで記述するか、ステージからリンクできます。
テンプレートの``code_specs``配列内でIDによって:ref:
コードバンドル仕様を参照するテンプレートを作成します<label-dcr_collaboration_create_and_register_code_bundle_template>。この例に示すように、このフィールドをテンプレートおよびパラメーターフィールドと同列に追加します。テンプレートを登録してから、テンプレートをコラボレーションにリンクします。
分析実行者:
``RUN``を呼び出して、標準的な方法でテンプレートを実行します。
重要
Snowflakeは、アップロードされたバンドルをクリーンルームにデプロイする前にセキュリティチェックを実行します。セキュリティチェックが失敗した場合、テンプレートとそのバンドルコードはデプロイされず、使用できません。
コードバンドルを含むテンプレートがデプロイされ、使用可能であることを確認するには、以下のステップを実行します。
コードバンドルをデプロイしようとしているクリーンルームアプリケーションの名前を見つけます。
DESCRIBE APPLICATIONの応答で``upgrade_state``の値を確認します。アップグレード状態がCOMPLETEの場合、セキュリティチェックに合格しており、新しいテンプレートとバンドルを使用できます。次の例のSQLコードのように、SQLを使用して前のステップのコマンドによって返されたアプリケーション名を渡します。
コードバンドル仕様の作成と登録¶
カスタムコードをアップロードする最初のステップは、コードバンドル仕様を作成して登録することです。
カスタム関数は、YAMLコードバンドル仕様で定義されます。各コードバンドルは、テンプレートから呼び出すことができる1つ以上の関数を公開します。コードバンドル仕様には、仕様内にコードをインラインで含めるか、:ref:`Snowflakeステージ上にあるコードにリンクする<label-dcr_collab_code_bundles_staged_artifacts>`ことができます。
コラボレーターは、``REGISTRY.REGISTER_CODE_SPEC``を呼び出して仕様を登録します。これにより、バンドルIDが返されます。
コードバンドルを参照するテンプレートがコラボレーションにリンクされると、そのコードバンドルは、コードバンドルをリンクするテンプレートにアクセスできるコラボレーション内のすべてのユーザーに表示されます。``VIEW_CODE_SPECS``を呼び出して、コラボレーション内でアクセス可能なコードバンドルを一覧表示します。
コラボレーションでコードバンドルを表示できるユーザーは誰でも、そのコラボレーション内の自分のテンプレートでそれを表示して使用できます。インラインコードはコラボレーションのメンバーであれば誰でも表示できますが、ステージングされたアーティファクトコードはコラボレーターには表示されません。コラボレーターは、参照されたアーティファクトの content_hash がコードの整合性検証にふさわしいものか確認する必要があります。
その仕様で定義されている``normalize``関数を呼び出す、``normalize_value``という名前の単一のPythonUDFを公開するコードバンドル仕様は次のとおりです。
呼び出しテンプレートの作成と登録¶
コード仕様が登録された後、コラボレーターはこのコードバンドルを使用するテンプレートを登録します。コードバンドルを使用するには、テンプレートの``code_specs``フィールドにバンドル仕様IDを追加します。このテンプレートをコラボレーションに追加すると、バンドルされたコードもコラボレーションで利用できるようになります。
テンプレートは、構文:samp:cleanroom.{spec_name}${function_name}`を使用してカスタム関数を呼び出します。リテラルの`.``および``$``の名前スコープマークに注意してください。
注釈
テンプレート内の関数を参照するには、仕様IDではなく仕様名を使用します。これは、テンプレート内のすべての参照を変更することなく、コードバンドルのバージョンをすばやく更新できるようにするためです。
以下の例では、テンプレートはコードバンドル``custom_udf``の関数``normalize_value``を使用します。
コラボレーションへのテンプレートの追加¶
標準的な方法で、関数を呼び出すテンプレートをコラボレーションに追加します。詳細については、 テンプレート をご参照ください。
呼び出しテンプレートがコラボレーションに追加されると、Snowflakeは検証を行い、コラボレーションにアップロードします。次の例は、既存のコラボレーションにテンプレートを追加するリクエストを示しています。
注釈
コードバンドルを含むテンプレートをインストールすると、Snowflakeセキュリティチェックがトリガーされ、基礎となるクリーンルームの新しいパッチが発行されます。プロセスが完了し、パッチがインストールされるまで、テンプレートは使用できません。
パッチインストールの進行状況を確認するには、以下を手順を実行します。
クリーンルームアプリケーションの名前を検索します。通常、これは
SFDCR_<clean room name>ですが、検索して以下であることを確認できます。パッチインストールのステータスを確認します。以下のクエリで
upgrade_stateが COMPLETE になるまで待機します。
コードのバージョン管理¶
すべての登録済みコード仕様は、アカウント内のすべてのレジストリにおいて一意の「名前+バージョン」を持つ必要があります。テンプレートは、コード仕様の特定の名前とバージョンをロードします。コードの新しいバージョンを作成または使用する場合は、code_specsフィールドで新しいコードバージョンを参照するテンプレートの新しいバージョンを送信する必要があります。テンプレート本文を変更する必要はありません。例:
**ステップ1:**コードバンドルのバージョン1を使用します。
**ステップ2:**コードバンドルの新しいバージョンを更新および登録し、新しいバージョンを使用するようにテンプレートを更新します。
関数名にはバージョンが含まれないため、関数の新しいバージョンをアップロードするときにテンプレート本文の呼び出しコードを変更する必要はありません。
仕様の例¶
コード本文付きのインラインUDF¶
インラインPythonコードを使用した単純なUDF
UDTF(ユーザー定義テーブル関数)¶
この例のYAMLは、複数行を返すUDTFを定義します。
Wheelパッケージを使用したステージングされたアーティファクト¶
コード仕様内のステージングされたコードにリンクするための、:ref:`stage_pathドキュメント要件<label-dcr_collab_code_bundle_spec_yaml>`を必ずお読みください。
この例のYAMLは、ステージングされたPython Wheelパッケージを使用します。
ストアドプロシージャ¶
この例のYAMLは、データ処理用のストアドプロシージャを定義します。
ステージングされたアーティファクトとしての複数のPythonファイル¶
コード仕様内のステージングされたコードにリンクするための、:ref:`stage_pathドキュメント要件<label-dcr_collab_code_bundle_spec_yaml>`を必ずお読みください。
この例のYAMLは、ステージングされた複数のPythonソースファイルを使用します。