宣言共有ネイティブアプリケーションのユーザー定義関数とストアドプロシージャ¶
Declarative Native Apps には、データのクエリ、視覚化、および探索を行うための ストアドプロシージャ および ユーザー定義関数 (UDFs)を含めることができます。このトピックでは、これらのロジックオブジェクトをアプリに含める方法について説明します。
サポートされているユーザー定義関数およびストアドプロシージャ¶
Declarative Native App では、次のタイプのユーザー定義関数( UDFs )およびストアドプロシージャ(sprocs)を共有できます。
OWNERS RIGHTS または RESTRICTED CALLERS RIGHTS を持つストアドプロシージャ。詳細については、 呼び出し元権限と所有者権限のストアドプロシージャについて をご参照ください。
EXTERNAL 関数を除く、 UDFs のすべてのタイプ
Python、Java、Javascript、およびScalaで記述されたSnowpark UDFs およびストアドプロシージャ。Snowpark Container Service関数はサポートされていません。
アプリケーションにユーザー定義関数とストアドプロシージャを含める¶
Declarative Native App に UDFs およびストアドプロシージャを含めるには、 manifest.yaml ファイルにオブジェクトの名前と権限を追加します。ノートブックと同様に、別のファイルを使ってオブジェクトを追加する必要はありません。
次の例は、 manifest.yaml ファイルに UDF およびストアドプロシージャを含める方法を示しています。
manifest_version: 2
roles:
- ANALYST:
comment: "The ANALYST role provides access to logic objects."
shared_content:
databases:
- SNAF_POPULATION_DB:
schemas:
- LOGIC_SCHEMA:
roles: [ANALYST]
functions:
- POPULATION_ANALYSIS_FUNCTION(NUMBER):
roles: [ANALYST]
procedures:
- POPULATION_ANALYSIS_PROCEDURE():
roles: [ANALYST]
この例では、 POPULATION_ANALYSIS_FUNCTION UDF および POPULATION_ANALYSIS_PROCEDURE ストアドプロシージャは manifest.yaml ファイルに含まれています。ANALYST アプリロールには、両方のオブジェクトへのアクセス権が付与されます。
UDFs およびストアドプロシージャを使用したプライベート(非共有)オブジェクトへのアクセス¶
UDFs およびストアドプロシージャを使用して、プライベート(非共有)テーブルおよびビューにアクセスできます。例えば、データベースにはコンシューマーには表示されないビューを含めることができますが、コンシューマーはストアドプロシージャを使用してそのビューからデータを取得することができます。
カスタマーが UDFs およびストアドプロシージャを使用してプライベートオブジェクトにアクセスできるようにするには、 manifest.yaml ファイル内でオブジェクトに private: true のキーワードをマークします。
次の例は、ストアドプロシージャが manifest.yaml ファイル内のプライベートテーブルにアクセスできるようにする方法を示しています。
manifest_version: 2
roles:
- VIEWER:
comment: "The VIEWER role can access a stored procedure that retrieves data from a view, but not the underlying view."
shared_content:
databases:
- SNAF_POPULATION_DB:
schemas:
- DATA_SCHEMA:
views: # This view is private as no roles are granted
- COUNTRY_POP_BY_YEAR_2000:
private: true
- LOGIC_SCHEMA:
roles: [VIEWER]
procedures:
- POPULATION_DISPLAY_PROCEDURE():
roles: [VIEWER]
前の例では、 COUNTRY_POP_BY_YEAR_2000 ビューはロールにアクセス権が付与されていないためプライベートですが、 private パラメーターは、ロジックオブジェクトがそれにアクセスできるようにします。VIEWER アプリロールはストアドプロシージャを実行できますが、プライベートビューを直接クエリすることはできません。COUNTRY_POP_BY_YEAR_2000 ビューが参照するテーブルは、ビューがアクセスするために manifest.yaml ファイルに含める必要がないことに注意してください。
制限事項¶
- サポートされている言語とタイプ
Python、Java、Javascript、およびScalaで記述されたSnowpark UDFs およびストアドプロシージャ。Snowpark Container Service関数はサポートされていません。
- データオブジェクトとロジックオブジェクトのスキーマ
データオブジェクト(テーブルとビュー)とロジックオブジェクト( UDFs とストアドプロシージャ)には、別々のスキーマを使用する必要があります。例えば、テーブルとビューには
DATA_SCHEMAという名前のスキーマを使用し、 UDFs およびストアドプロシージャにはLOGIC_SCHEMAという名前のスキーマを使用できます。- プライベートオブジェクトの参照
UDFs およびストアドプロシージャは、スキーマ修飾名でプライベートオブジェクトを参照する必要があります。ロジックオブジェクトは、完全修飾名でプライベートオブジェクトを参照できません。
- オブジェクト数
Declarative Native App には最大100個の UDFs およびストアドプロシージャ含めることができます。この制限を増やすには、 `Snowflakeサポート `_ にお問い合わせください。
- 動的テーブル
UDFs およびストアドプロシージャでの動的テーブルの参照はサポートされていません。