Créer une définition de projet Snowpark

Le fichier snowflake.yml contient les déclarations de fonctions et de procédures pour un projet Snowpark.

Note

Actuellement, le fichier de définition du projet Snowpark doit être nommé snowflake.yml.

L’extrait suivant montre un exemple de fichier de définition de projet Snowpark : avec deux fonctions et deux procédures. La fonction hello_function utilise les capacités externes de Snowpark.

definition_version: '2'

mixins:
  snowpark_shared:
    artifacts:
      - dest: my_snowpark_project
        src: app/
    stage: dev_deployment

entities:

  hello_function:
    type: function
    identifier:
      name: hello_function
    handler: functions.hello_function
    signature:
      - name: name
        type: string
    returns: string
    external_access_integrations:
      - my_external_access
    secrets:
        cred: my_cred_name
    meta:
      use_mixins:
        - snowpark_shared

  hello_procedure:
    type: procedure
    identifier:
      name: hello_procedure
    handler: procedures.hello_procedure
    signature:
      - name: name
        type: string
    returns: string
    meta:
      use_mixins:
        - snowpark_shared

  test_procedure:
    type: procedure
    identifier:
      name: test_procedure
    handler: procedures.test_procedure
    signature: ''
    returns: string
    meta:
      use_mixins:
        - snowpark_shared
Copy

Prudence

Les fichiers se trouvant dans le répertoire d’un projet sont traités par Snowflake CLI et peuvent être téléchargés vers Snowflake lors de l’exécution d’autres commandes snow snowpark. Vous devez faire preuve de prudence lorsque vous placez des informations sensibles dans les fichiers d’un répertoire de projet.

Propriétés des objets de fonction et de procédure

Le tableau suivant décrit les propriétés utilisées par les fonctions et les procédures.

Propriétés des objets de fonction et de procédure

Propriété

Définition

identifier

optional, string

Identificateur Snowflake facultatif pour l’entité. La valeur peut avoir les formes suivantes :

  • Texte d’identificateur de chaîne

    identifier: my-snowpark-id
    
    Copy

    Les identificateurs entre guillemets et sans guillemets sont pris en charge. Pour utiliser des identificateurs entre guillemets, incluez les guillemets dans la valeur de YAML (par exemple, ’”Ma fonction Snowpark”’).

  • Objet

    identifier:
      name: my-snowpark-id
      schema: my-schema # optional
      database: my-db # optional
    
    Copy

    Note

    Une erreur se produit si vous spécifiez schema ou database et que vous utilisez un nom complet dans la propriété name (tel que mydb.schema1.my-app).

type

optional, string

Doit être au choix : function ou procedure.

artifact_repository

optional, string

Nom du référentiel d’artefacts. Snowflake dispose d’un référentiel d’artefacts par défaut appelé snowflake.snowpark.pypi_shared_repository que vous utilisez pour vous connecter et pour installer des paquets PyPI dans les UDFs et les procédures Snowpark. Pour plus d’informations, voir Aperçu d’Artifact Repository.

artifact_repository_packages

optional, string

Noms des paquets qui proviendraient du référentiel d’artefacts. Notez que les paquets contenus dans le fichier requirements.txt sont toujours traités et téléchargés, même s’ils sont répertoriés dans ce paramètre. Pour plus d’informations, voir Aperçu d’Artifact Repository.

Les paramètres artifact_repository et artifact_repository_packages vous permettent d’utiliser des paquets qui ne sont pas ceux d’Anaconda, comme ci-dessous :

  • Dans le fichier app.py du projet, vous pouvez définir une fonction comme la suivante :

    from sklearn.datasets import load_iris
    from sklearn.model_selection import train_test_split
    from sklearn.ensemble import RandomForestClassifier
    
    def udf():
      X, y = load_iris(return_X_y=True)
      X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)
    
      model = RandomForestClassifier()
      model.fit(X_train, y_train)
      return model.score(X_test, y_test)
    
    Copy
  • Dans le fichier snowflake.yml, vous le définissez ensuite comme suit :

    test_function:
      type: "function"
      handler: "app.udf"
      identifier:
        name: "udf"
      stage: "dev_deployment"
      signature: ""
      returns: float
      artifact_repository: snowflake.snowpark.pypi_shared_repository
      artifact_repository_packages:
        - 'scikit-learn'
      artifacts:
        - "app.py"
    
    Copy

Pour les paquets qui dépendent d’architectures spécifiques, vous pouvez les définir dans le paramètre resource_constraint comme suit :

test_function:
  type: "function"
  handler: "app.udf"
  identifier:
    name: "udf"
  stage: "dev_deployment"
  signature: ""
  returns: float
  artifact_repository: snowflake.snowpark.pypi_shared_repository
  artifact_repository_packages:
    - 'scikit-learn'
  artifacts:
    - "app.py"
  resource_constraint:
    architecture: 'x86'
Copy

Pour plus d’informations, voir Paquets conçus uniquement pour x86.

artifacts

requis, séquence de chaînes

Liste des paires de fichiers source et destination à ajouter à la racine du déploiement. Vous pouvez utiliser les propriétés d’artefacts suivantes :

  • src : chemin vers le ou les fichiers sources du code

  • dest : chemin vers le répertoire dans lequel déployer les artefacts.

    Les chemins de destination qui font référence à des répertoires doivent se terminer par un /. La destination d’un modèle de glob qui ne se termine pas par / entraîne une erreur. S’il est omis, dest prend par défaut la même chaîne que src.

    Note

    L’utilisation de modèles globaux dans les fichiers snowflake.yml Snowpark nécessite l’activation de l’indicateur de fonction ENABLE_SNOWPARK_GLOB_SUPPORT.

    Vous pouvez également transmettre une chaîne pour chaque élément au lieu d’un dict, auquel cas la valeur est traitée à la fois comme src et dest.

Si src fait référence à un seul fichier (pas un glob), dest peut faire référence à un <chemin> ou <chemin/nom> cible.

Vous pouvez également transmettre une chaîne pour chaque élément au lieu d’un dict, auquel cas la valeur est traitée à la fois comme src et dest.

handler

required, string

Implémentation par la fonction ou la procédure de l’objet contenu dans le module défini dans snowpark.src. Par exemple, functions.hello_function fait référence à la fonction hello_function du fichier <src>/functions.py.

returns

required, string

Type SQL du résultat. Consultez la liste des types disponibles.

signature

required, sequence

Le paramètre signature décrit les arguments consécutifs transmis à l’objet. Chacun d’entre eux doit préciser son nom et son type, par exemple :

signature:
  - name: "first_argument"
    type: int
  - name: "second_argument"
    default: "default value"
    type: string
Copy

Si une fonction ou une procédure ne prend aucun argument, cette valeur est une chaîne vide (signature: "").

Vérifiez la colonne Type SQL des types disponibles. Pour en savoir plus sur la syntaxe des arguments nommés et facultatifs, consultez Appeler une UDF qui a des arguments optionnels.

runtime

optional, string

Version de Python à utiliser lors de l’exécution de la procédure ou de la fonction. Par défaut : « 3.9 ».

external_access_integrations

optional, string sequence

Noms des intégrations d’accès externe nécessaires pour que le code du handler (gestionnaire) de cette procédure puisse accéder aux réseaux externes. Pour plus de détails, voir le paramètre EXTERNAL_ACCESS_INTEGRATIONS dans CREATE PROCEDURE.

secrets

optional, dictionary

Attribue les noms des secrets aux variables afin que vous puissiez utiliser les variables pour référencer les secrets lors de la récupération des informations des secrets dans le code du gestionnaire. Pour plus de détails, voir le paramètre SECRETS dans CREATE PROCEDURE <label-create_procedure_python_secrets>.

imports

optional, string sequence

Zone de préparation et chemin d’accès aux fichiers en zone de préparation que vous souhaitez importer. Pour plus de détails, voir le paramètre IMPORT dans CREATE PROCEDURE <label-create_procedure_python_imports>.

execute_as_caller

optional, bool

Disponible uniquement pour les procédures. Déterminez si la procédure est exécutée avec les privilèges du propriétaire (vous) ou avec les privilèges de l’appelant. Par défaut : False (privilèges du propriétaire).