Déploiement de packages Python personnalisés de GitHub vers Snowflake
MISE À JOUR : À compter du 7 novembre 2022. Snowpark pour Python est GA, donc son installation est aussi simple que pip install snowflake-snowpark-python
via PyPi .
Aperçu
Snowpark permet aux développeurs d'étendre les fonctionnalités de la plateforme Snowflake en écrivant du code dans des langages tels que Python, Java, Scala et JavaScript. Dans ce blog, nous examinerons un moyen de déployer des packages personnalisés en pur Python à partir d'un référentiel GitHub à l'aide des actions GitHub sur Snowflake.
Plus important encore, lorsque ces packages sont utilisés pour créer des fonctions définies par l'utilisateur (UDF) dans Snowpark Python , cette approche facilite la maintenance et le déploiement de votre code personnalisé sur plusieurs UDF à la fois et automatiquement sans intervention manuelle. Un autre avantage mis en évidence par cette configuration est le découplage du ou des packages personnalisés du script qui télécharge le package sur Snowflake et affiche les noms des UDF qui utilisent le package personnalisé mis à jour.
Fonction définie par l'utilisateur
Pour démontrer comment l'ensemble du flux se rassemble, considérons ce simple UDF dans Snowpark Python. (Ce script est exécuté dans Snowsight .)
Notes de scénario
- Le package Python do_something_cool.py est ajouté en tant que dépendance — ligne 6 . Notez que l' instruction imports inclut le chemin d'accès complet ; le nom de la scène et le nom du fichier
- Ce paquet est ensuite importé ( ligne 9 ) et la méthode greetings() est appelée ( ligne 11 ) en passant le paramètre passé dans cette UDF
SELECT greet_me('Dash');
Hello, Dash! How are you doing today? It's great to see you today!
Configuration : Référentiel GitHub 1
Supposons que vous disposiez d'un référentiel GitHub dans lequel vous gérez ce package Python auquel vous et les membres de votre équipe contribuez et collaborez.
Voici « faire quelque chose de cool »
Ce référentiel est également l'endroit où vous configurez GitHub Actions .
Voici à quoi ressemblerait le fichier de workflow GitHub Actions ( détails du workflow ci-dessous ) :
Détails du flux de travail
- Evénement déclencheur : lors de l' envoi vers la branche principale lorsque le code est mis à jour
- Étapes du flux de travail :
— 2. Installer les demandes de dépendances et snowflake-connector-python requis pour déployer le code de package mis à jour
— 3. Télécharger le script ( à partir de Repo 2 — voir ci-dessous ) qui téléchargera le code personnalisé mis à jour sur Snowflake
— 4. Configurez les variables d'environnement ( base de données, entrepôt, schéma, utilisateur, mot de passe et rôle ) stockées dans GitHub Secrets. Ces variables seront utilisées par Snowflake Python Connector dans le script ( téléchargé à l'étape 3 ) pour se connecter à Snowflake
— 5. Exécutez le script ( téléchargé à l'étape 3 ) pour déployer le code mis à jour
[Code sur GitHub : Exemple de package personnalisé | Fichier de flux de travail GitHub Actions ]
Configuration : Référentiel GitHub 2
Ce référentiel contient un script Python (voir les détails ci-dessous) qui est téléchargé et exécuté à partir de la configuration du flux de travail GitHub Actions dans le référentiel 1 lorsque des mises à jour sont apportées au package dans la branche principale du référentiel 1.
Voici à quoi ressemblerait le script :
Étapes de script
— 1. Connectez-vous à Snowflake à l'aide de Snowflake Python Connector et des variables d'environnement définies à l'aide de GitHub Secrets
— 2. Télécharger la liste des packages (voir ci-dessous format JSON) à mettre à jour
— 3. Pour chaque package, téléchargez la dernière version de la branche principale depuis Repo 1 et téléchargez-la sur l'étape Snowflake.
— 4. Parcourez toutes les UDF, examinez leurs importations et imprimez les noms des UDF qui utilisent le package mis à jour
Liste des forfaits
Ce référentiel contient également un fichier JSON contenant une liste de packages ( référencés à l'étape 2 ci-dessus ) à mettre à jour lorsque le script update_packages.py est exécuté.
Voici le format de fichier :
Remarque : L' étape dans le fichier JSON fait référence à une étape dans Snowflake où le fichier est téléchargé.
Essai
Pour tester, mettez à jour do_something_cool.py dans Repo 1 ( par exemple, changez le message d'accueil en "Bienvenue, comment se passe votre journée?" ) et poussez les modifications vers la branche principale . À ce stade, vous devriez voir un lancement de construction et s'il réussit (c'est-à-dire que le code/ syntaxe est correct, tous les fichiers et chemins référencés existent, les paramètres de connexion pour se connecter à Snowflake sont valides, etc. ), alors vous devriez voir la sortie de construction semblable à ceci :

Ensuite, en exécutant à nouveau ce SQL…
SELECT greet_me('DASH');
Hello, Dash! Welcome, how is your day going?
C'est ça!
Merci pour votre temps, et n'hésitez pas à me suivre sur Twitter et LinkedIn où je partage des vidéos de démonstration, des extraits de code et d'autres artefacts intéressants spécifiquement autour de Snowpark .