Bundles de code¶
Tout collaborateur peut regrouper des procédures Python, des UDFs ou des UDTFs personnalisées avec des modèles de collaboration. Les modèles font à leur tour référence au code regroupé pour effectuer des actions complexes sur les données dans le cadre de la collaboration. L’utilisation courante inclut le machine learning ou la manipulation de données personnalisée dans une requête. Votre code importé peut importer et utiliser des paquets à partir d’un bundle de packages Python approuvés et l’APISnowpark.
Le code personnalisé ne peut être appelé que via des modèles, et pas directement.
Note
Python est le seul langage de codage pris en charge pour les bundles de code.
Les sections suivantes vous montrent comment charger et utiliser des bundles de code.
Mise en œuvre de bundles de code personnalisés¶
Voici comment charger et utiliser un bundle de code :
Le demandeur de code :
Crée et enregistre le code en appelant REGISTER_CODE_SPEC.
Le code peut être en ligne dans la spécification, ou lié à une zone de préparation.
Crée un modèle qui fait référence à la spécification du bundle de code par son ID dans le tableau
code_specsdu modèle. Ajoutez ce champ en tant que pair des champs du modèle et de paramètres, comme indiqué dans cet exemple :Enregistre le modèle, puis lie le modèle à la collaboration.
L’exécuteur d’analyses :
Exécute le modèle de la manière standard en appelant
RUN.
Important
Snowflake effectue des contrôles de sécurité sur tous les bundles chargés avant de les déployer dans une salle blanche. Si un contrôle de sécurité échoue, le modèle et son code regroupé ne seront pas déployés et disponibles pour l’utilisation.
Pour confirmer qu’un modèle avec un bundle de code est déployé et prêt à l’emploi, procédez comme suit :
Recherchez le nom de l’application de salles blanches dans laquelle vous essayez de déployer le bundle de code :
Vérifiez la valeur
upgrade_statedans la réponse DESCRIBE APPLICATION. Lorsque l’état de mise à niveau est COMPLETE, les contrôles de sécurité ont réussi et le nouveau modèle et le nouveau bundle sont disponibles pour l’utilisation. Transmettez le nom de l’application renvoyé par la commande à l’étape précédente en utilisant SQL comme dans l’exemple suivant : code SQL :
Créer et enregistrer la spécification du bundle de code¶
La première étape du chargement d’un code personnalisé consiste à créer et à enregistrer la spécification du bundle de code.
Les fonctions personnalisées sont définies dans une spécification de bundle de code YAML. Chaque bundle de code expose une ou plusieurs fonctions qui peuvent être appelées par un modèle. La spécification du bundle de code peut soit inclure le code dans la spécification en ligne, soit renvoyer vers un code qui réside sur une zone de préparation Snowflake.
Un collaborateur enregistre une spécification en appelant``REGISTRY.REGISTER_CODE_SPEC``, qui renvoie l’ID du bundle.
Une fois que le modèle qui référence le bundle de code est lié à la collaboration, ce bundle de code est visible par toute personne de la collaboration qui peut accéder à un modèle qui lie le bundle de code. Appelez VIEW_CODE_SPECS pour répertorier les bundles de code accessibles dans une collaboration.
Toute personne pouvant voir un bundle de code dans une collaboration peut le voir et l’utiliser dans ses propres modèles au sein de cette collaboration. Tout code en ligne peut être vu par n’importe quel membre de la collaboration, mais le code d’artefact en zone de préparation ne peut pas être vu par les collaborateurs. Les collaborateurs doivent s’assurer que le content_hash des artefacts référencés correspond à la vérification de l’intégrité du code.
La spécification du bundle de code suivant qui expose une seule UDF Python appelée normalize_value, qui appelle la fonction normalize définie dans cette spécification :
Créer et enregistrer le modèle appelant¶
Une fois la spécification de code enregistrée, le collaborateur enregistre un modèle qui utilise ce bundle de code. Pour utiliser un bundle de code, ajoutez l’ID de la spécification du bundle dans le champ code_specs du modèle. L’ajout de ce modèle à la collaboration entraînera également la disponibilité du code regroupé dans la collaboration.
Un modèle appelle une fonction personnalisée à l’aide de la syntaxe cleanroom.spec_name$function_name. Notez les marques littérales de portée de nom . et $.
Note
Utilisez le nom de la spécification, et non l’ID de la spécification, pour référencer une fonction dans votre modèle. Vous pouvez ainsi mettre rapidement à jour la version de votre bundle de code sans avoir à modifier toutes les références qui y sont mentionnées dans votre modèle.
Dans l’exemple suivant, un modèle utilise la fonction normalize_value du bundle de code custom_udf :
Ajouter un modèle à une collaboration¶
Ajoutez le modèle qui appelle votre fonction à la collaboration de manière standard. Pour plus d’informations, voir Modèles.
Snowflake valide et charge vers la collaboration lorsque le modèle appelant est ajouté à une collaboration. L’exemple suivant montre une requête pour ajouter un modèle à une collaboration existante :
Note
L’installation d’un modèle avec un bundle de code déclenche un contrôle de sécurité Snowflake et émet un nouveau correctif de la salle blanche sous-jacente. Le modèle ne sera pas disponible ni utilisable tant que le processus ne sera pas terminé et que le correctif n’aura pas été installé.
Pour vérifier la progression de l’installation du correctif :
Recherchez le nom de l’application de la salle blanche. En règle générale, il s’agira de
SFDCR_<clean room name>, mais vous pouvez effectuer une recherche pour le vérifier :Vérifiez l’état de l’installation du correctif. Attendez que
upgrade_statesoit COMPLETE dans la requête suivante :
Versionnage de votre code¶
Chaque spécification de code enregistrée doit posséder un nom et une version uniques dans tous les registres de votre compte. Un modèle charge un nom et une version spécifiques d’une spécification de code. Si vous souhaitez créer ou consommer une nouvelle version de votre code, vous devez soumettre une nouvelle version du modèle qui fait référence à la nouvelle version du code dans le champ code_specs. Vous n’avez pas besoin de modifier le corps du modèle. Par exemple :
Étape 1 : consommez la version 1 du bundle de code :
Étape 2 : mettez à jour et enregistrez la nouvelle version de votre bundle de code, puis mettez à jour votre modèle pour utiliser la nouvelle version :
Notez que les noms de fonctions n’incluent pas la version, de sorte que vous n’avez pas besoin de modifier le code d’appel dans le corps du modèle lorsque vous chargez une nouvelle version d’une fonction.
Exemples de spécifications¶
UDF en ligne avec corps de code¶
Une UDF simple avec du code Python en ligne :
UDTF (Fonction de table définie par l’utilisateur)¶
Cet exemple de YAML définit une UDTF qui renvoie plusieurs lignes :
Artefact en zone de préparation avec paquet de roue¶
Assurez-vous de consulter les exigences de la documentation stage_path pour la liaison vers un code en zone de préparation dans votre spécification de code.
Cet exemple de YAML utilise un paquet de roue Python en zone de préparation :
Procédure stockée¶
Cet exemple de YAML définit une procédure stockée pour le traitement des données :
Plusieurs fichiers Python comme artefacts en zone de préparation¶
Assurez-vous de consulter les exigences de la documentation stage_path pour la liaison vers un code en zone de préparation dans votre spécification de code.
Cet exemple de YAML utilise plusieurs fichiers sources Python en zone de préparation :