Fonctions définies par l’utilisateur et procédures stockées dans le partage déclaratif dans le Native Application Framework¶
Les Declarative Native Apps peuvent inclure des procédures stockées et des fonctions définies par l’utilisateur (UDFs) pour interroger, visualiser et explorer des données. Cette rubrique décrit comment inclure ces objets dans votre application.
Fonctions définies par l’utilisateur et procédures stockées prises en charge¶
Vous pouvez partager les types de fonctions définies par l’utilisateur (UDFs) et de procédures stockées (sprocs) suivants dans une Declarative Native App :
Les procédures stockées qui disposent de OWNERS RIGHTS ou de RESTRICTED CALLERS RIGHTS. Pour
plus d’informations, consultez Présentation des procédures stockées des droits de l’appelant et des droits du propriétaire.
Tous les types d’UDFs, à l’exception des fonctions EXTERNAL.
Inclure des fonctions définies par l’utilisateur et des procédures stockées dans votre application¶
Pour inclure des UDFs et des procédures stockées dans votre Declarative Native App, ajoutez les noms des objets et leurs autorisations au fichier manifest.yaml. Vous n’avez pas besoin d’ajouter les objets en utilisant des fichiers séparés, comme vous le faites avec les notebooks.
L’exemple suivant montre comment inclure une UDF et une procédure stockée dans le fichier manifest.yaml :
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]
Dans cet exemple, l’UDF POPULATION_ANALYSIS_FUNCTION et la procédure stockée POPULATION_ANALYSIS_PROCEDURE sont incluses dans le fichier manifest.yaml. Le rôle d’application ANALYST a accès aux deux objets.
Référence du manifeste¶
Cette fonctionnalité ajoute les champs suivants au fichier manifest.yaml :
champ functions.{named function}¶
Chaque fonction nommée (liste, obligatoire [OneOfRequired] ): prend en charge la paire nom/valeur suivante :
roles(liste, facultatif) : Une liste des rôles d’application qui peuvent accéder à la fonction, par exemple,[analyst]. Lorsque ce champ est vide ([]) ou omis, alors uniquement les propriétaires d’application et les rôles avec des IMPORTED PRIVILEGES autorisés reçoivent l’accès. Les rôles inclus doivent être définis dans le champ des rôles de niveau supérieur et inclus dans le champ {schéma nommé}.roles.
champ procedures.{named procedure}¶
Chaque procédure stockée nommée (liste, obligatoire [OneOfRequired] ): prend en charge la paire nom/valeur suivante :
roles(liste, facultatif) : Une liste des rôles d’application qui peuvent accéder à la procédure, par exemple,[analyst]. Lorsque ce champ est vide ([]) ou omis, alors uniquement les propriétaires d’application et les rôles avec des IMPORTED PRIVILEGES autorisés reçoivent l’accès. Les rôles inclus doivent être définis dans le champ des rôles de niveau supérieur et inclus dans le champ {schéma nommé}.roles.
Exemple de fichier manifeste¶
Le bloc de code suivant constitue un exemple de fichier manifeste d’Declarative Native App :
Notez que les données et les objets de code doivent se trouver dans des schémas différents.
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
Limitations¶
- Langages et types pris en charge
Les UDFs et les procédures stockées Snowpark écrites en Python, Java, Javascript et Scala. Les fonctions Snowpark Container Service ne sont pas prises en charge.
- Schémas pour les objets de données et les objets logiques
Vous devez utiliser des schémas distincts pour les objets de données (tables et vues) et les objets logiques (UDFs et procédures stockées). Par exemple, vous pouvez utiliser un schéma nommé
DATA_SCHEMApour les tables et les vues, et un schéma nomméLOGIC_SCHEMApour les UDFs et les procédures stockées.- Référencement d’objets privés
Vos UDFs et vos procédures stockées doivent référencer les objets privés par leurs noms qualifiés par schéma. Vos objets logiques ne peuvent pas référencer des objets privés par leurs noms pleinement qualifiés.
- Nombre d’objets
Une Declarative Native App peut inclure jusqu’à 100 UDFs et procédures stockées. Pour augmenter cette limite, contactez le support Snowflake.
- Tables dynamiques
Le référencement des tables dynamiques dans les UDFs et les procédures stockées n’est pas pris en charge.