User-Defined Functions and Stored Procedures in Declarative Shared Native Applications¶
Declarative Native Apps can include stored procedures and user-defined functions (UDFs) to query, visualize, and explore the data. This topic describes how to include these logic objects in your app.
サポートされているユーザー定義関数およびストアドプロシージャ¶
Declarative Native App では、次のタイプのユーザー定義関数( UDFs )およびストアドプロシージャ(sprocs)を共有できます。
Stored procedures that have OWNERS RIGHTS or RESTRICTED CALLERS RIGHTS. For more information, see Understanding caller’s rights and owner’s rights stored procedures.
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 ファイルに含める必要がないことに注意してください。
制限事項¶
- サポートされている言語とタイプ
Snowpark UDFs and stored procedures written in Python, Java, Javascript, and Scala. Snowpark Container Service functions are not supported.
- データオブジェクトとロジックオブジェクトのスキーマ
データオブジェクト(テーブルとビュー)とロジックオブジェクト( UDFs とストアドプロシージャ)には、別々のスキーマを使用する必要があります。例えば、テーブルとビューには
DATA_SCHEMAという名前のスキーマを使用し、 UDFs およびストアドプロシージャにはLOGIC_SCHEMAという名前のスキーマを使用できます。- プライベートオブジェクトの参照
UDFs およびストアドプロシージャは、スキーマ修飾名でプライベートオブジェクトを参照する必要があります。ロジックオブジェクトは、完全修飾名でプライベートオブジェクトを参照できません。
- オブジェクト数
Declarative Native App には最大100個の UDFs およびストアドプロシージャ含めることができます。この制限を増やすには、 `Snowflakeサポート `_ にお問い合わせください。
- 動的テーブル
UDFs およびストアドプロシージャでの動的テーブルの参照はサポートされていません。