ネイティブアプリケーションフレームワークにおける宣言共有のユーザー定義関数とストアドプロシージャ

Declarative Native Apps には、データのクエリ、視覚化、および探索を行うための ストアドプロシージャ および ユーザー定義関数 ( UDFs )を含めることができます。このトピックでは、これらのオブジェクトをアプリに含める方法について説明します。

サポートされているユーザー定義関数およびストアドプロシージャ

Declarative Native App では、次のタイプのユーザー定義関数( UDFs )およびストアドプロシージャ(sprocs)を共有できます。

アプリケーションにユーザー定義関数とストアドプロシージャを含める

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]
Copy

この例では、 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]
Copy

前の例では、 COUNTRY_POP_BY_YEAR_2000 ビューはロールにアクセス権が付与されていないためプライベートですが、 private パラメーターは、ロジックオブジェクトがそれにアクセスできるようにします。VIEWER アプリロールはストアドプロシージャを実行できますが、プライベートビューを直接クエリすることはできません。COUNTRY_POP_BY_YEAR_2000 ビューが参照するテーブルは、ビューがアクセスするために manifest.yaml ファイルに含める必要がないことに注意してください。

マニフェスト参照

この機能は、 manifest.yaml ファイルに次のフィールドを追加します。

functions.{named function} フィールド

各名前付き機能(リスト、必須 [ OneOfRequired ]_ ): 以下の名前と値のペアをサポートします。

  • roles (リスト、オプション):機能にアクセスできるアプリロールのリストです(例: [analyst] )。このフィールドが空の場合([])または省略されている場合は、アプリの所有者と 付与された IMPORTEDPRIVILEGES<label-dsna_share_access_to_all_data>`ロールのみがアクセスを受け取ります。含まれるロールは :ref: 最上位レベルのロールフィールド <label-dsna_manifest_roles_top>` で定義され、 {named schema}.roles フィールドに含まれている必要があります。

procedures.{named procedure} フィールド

各名前付きストアドプロシージャ(リスト、必須 [ OneOfRequired ]_ ): 以下の名前と値のペアをサポートします。

  • roles (リスト、オプション):プロシージャにアクセスできるアプリロールのリストです(例: [analyst] )。このフィールドが空の場合([])または省略されている場合は、アプリの所有者と 付与された IMPORTEDPRIVILEGES<label-dsna_share_access_to_all_data>`ロールのみがアクセスを受け取ります。含まれるロールは :ref: 最上位レベルのロールフィールド <label-dsna_manifest_roles_top>` で定義され、 {named schema}.roles フィールドに含まれている必要があります。

マニフェストファイルの例

次のコードブロックは、 Declarative Native App マニフェストファイルの例です。

データオブジェクトとコードオブジェクトは異なるスキーマに存在する必要があることに注意してください。

manifest_version: 2

roles:
  - VIEWER:
      comment: "The VIEWER role provides access to only one view."
  - ANALYST:
      comment: "The ANALYST role provides access to views, the table, and logic."

shared_content:
  databases:
    - SNAF_POPULATION_DB:
        schemas:
          - DATA_SCHEMA:
              roles: [VIEWER, ANALYST]
              tables:
                - COUNTRY_POP_BY_YEAR:
                    roles: [ANALYST]
              views:
                - COUNTRY_POP_BY_YEAR_2000:
                    roles: [VIEWER, ANALYST]
          - LOGIC_SCHEMA:
              roles: [ANALYST]
              functions:
                - POPULATION_ANALYSIS_FUNCTION(NUMBER):
                    roles: [ANALYST]
              procedures:
                - POPULATION_ANALYSIS_PROCEDURE():
                    roles: [ANALYST]
application_content:
  notebooks:
      - intro_notebook:
          roles: [VIEWER, ANALYST]
          main_file: INTRO_NB.ipynb
      - analyst_notebook:
          roles: [ANALYST]
          main_file: ANALYST_NB.ipynb
Copy

制限事項

サポートされている言語とタイプ

Python、Java、Javascript、およびScalaで記述されたSnowpark UDFs およびストアドプロシージャ。Snowpark Container Service関数はサポートされていません。

データオブジェクトとロジックオブジェクトのスキーマ

データオブジェクト(テーブルとビュー)とロジックオブジェクト( UDFs とストアドプロシージャ)には、別々のスキーマを使用する必要があります。例えば、テーブルとビューには DATA_SCHEMA という名前のスキーマを使用し、 UDFs およびストアドプロシージャには LOGIC_SCHEMA という名前のスキーマを使用できます。

プライベートオブジェクトの参照

UDFs およびストアドプロシージャは、スキーマ修飾名でプライベートオブジェクトを参照する必要があります。ロジックオブジェクトは、完全修飾名でプライベートオブジェクトを参照できません。

オブジェクト数

Declarative Native App には最大100個の UDFs およびストアドプロシージャ含めることができます。この制限を増やすには、 `Snowflakeサポート `_ にお問い合わせください。

動的テーブル

UDFs およびストアドプロシージャでの動的テーブルの参照はサポートされていません。