Exemples d’utilisation de Git avec Snowflake¶
Les exemples de cette rubrique décrivent comment utiliser un référentiel Git intégré lors du développement d’applications Snowflake et comment exécuter des scripts SQL dans un référentiel.
Utiliser un fichier de référentiel Git comme gestionnaire (handler) de procédure stockée¶
Après avoir configuré l’intégration entre Snowflake et votre référentiel Git, vous pouvez utiliser les fichiers du référentiel comme code de gestionnaire (handler) dans les procédures stockées et les UDFs. Notez que, comme avec d’autres gestionnaires mis en zone de préparation, vous devez qualifier le nom de la fonction gestionnaire avec le nom de la classe ou du module qui le contient.
Cet exemple décrit comment utiliser le code du gestionnaire (handler) Python du référentiel dans une procédure stockée.
Code requis par cet exemple¶
Le gestionnaire (handler) de cet exemple dépend d’une base de données créée à l’aide d’un code SQL similaire au suivant :
CREATE DATABASE example_db;
USE DATABASE example_db;
CREATE SCHEMA example_schema;
USE SCHEMA example_schema;
CREATE OR REPLACE TABLE employees(id NUMBER, name VARCHAR, role VARCHAR);
INSERT INTO employees (id, name, role) VALUES (1, 'Alice', 'op'), (2, 'Bob', 'dev'), (3, 'Cindy', 'dev');
L’exemple utilise le code du gestionnaire (handler) Python suivant, contenu dans filter.py
:
from snowflake.snowpark.functions import col
def filter_by_role(session, table_name, role):
df = session.table(table_name)
return df.filter(col("role") == role)
Valider le fichier et actualiser la zone de préparation de référentiel¶
Depuis votre référentiel Git, ajoutez le code au référentiel.
Le code de l’exemple suivant utilise l’outil de ligne de commande git pour ajouter et valider le fichier du gestionnaire (handler) dans le référentiel local, puis le pousser dans le référentiel distant référencé par la zone de préparation du référentiel dans Snowflake :
$ git add python-handlers/filter.py $ git commit -m "Adding code to filter by role" $ git push
Dans Snowflake, actualisez la zone de préparation du référentiel.
En supposant que vous avez configuré l’intégration entre Snowflake et votre référentiel Git, résultant en une zone de préparation de référentiel, vous pouvez actualiser la zone de préparation en récupérant des données du référentiel.
L’utilisation de Snowflake pour actualiser votre référentiel est similaire à celle d’autres outils clients Git, où vous récupérez le référentiel avant de commencer à travailler pour vous assurer que vous disposez des dernières modifications.
Le code de l’exemple suivant exécute la commande ALTER GIT REPOSITORY pour récupérer les dernières modifications du référentiel. Le code génère un clone complet qui inclut des branches, des balises et des validations.
ALTER GIT REPOSITORY snowflake_extensions FETCH;
Créer et exécuter une procédure qui utilise le fichier dans le référentiel¶
Dans Snowflake, écrivez la procédure.
Lorsque vous écrivez une procédure, vous pouvez faire référence au code de son gestionnaire (handler) à l’emplacement du fichier en question dans la zone de préparation de référentiel. Par exemple, pour faire référence à un fichier
python-handlers/filter.py
dans la branche principale d’un référentiel synchronisé avec une zone de préparation de référentiel Git appeléesnowflake_extensions
, vous utiliserez une syntaxe similaire à la suivante :@snowflake_extensions/branches/main/python-handlers/filter.py
Le code de l’exemple suivant crée une procédure appelée
filter_by_role
, en spécifiant le code du gestionnaire (handler) stocké dans la zone de préparation du référentiel :CREATE OR REPLACE PROCEDURE filter_by_role(tableName VARCHAR, role VARCHAR) RETURNS TABLE(id NUMBER, name VARCHAR, role VARCHAR) LANGUAGE PYTHON RUNTIME_VERSION = '3.9' PACKAGES = ('snowflake-snowpark-python') IMPORTS = ('@example_db.example_schema.snowflake_extensions/branches/main/python-handlers/filter.py') HANDLER = 'filter.filter_by_role';
Exécutez la procédure.
Le code suivant exécute la procédure.
CALL filter_by_role('employees', 'dev');
Voici un exemple de sortie de la procédure.
--------------------- | ID | NAME | ROLE | --------------------- | 2 | Bob | dev | --------------------- | 3 | Cindy | dev | ---------------------
Utiliser un fichier de référentiel Git pour configurer de nouveaux comptes¶
Cet exemple décrit comment exécuter un script SQL contenu dans une zone de préparation du référentiel. Le script de l’exemple crée un utilisateur et un rôle.
Cet exemple utilise la commande EXECUTE IMMEDIATE FROM pour exécuter les instructions SQL contenues dans un fichier de la zone de préparation du référentiel.
Avec EXECUTE IMMEDIATE FROM, vous pouvez exécuter (à partir de n’importe quelle session Snowflake) les scripts que vous gérez dans votre référentiel Git. Par exemple, vous pouvez avoir un script qui configure chaque nouveau compte Snowflake dans votre organisation. Le script peut contenir des instructions permettant de créer des utilisateurs, des rôles et des objets, et d’accorder des privilèges sur le compte et les objets.
Créez le fichier
setup.sql
avec le contenu suivant :CREATE ROLE analyst; CREATE USER gladys; GRANT ROLE analyst TO USER gladys; SHOW GRANTS TO USER gladys;
Commencez votre fichier SQL dans votre référentiel Git. Pour des instructions détaillées, voir Valider le fichier et actualiser la zone de préparation de référentiel.
Utilisez l’outil de ligne de commande git pour valider le fichier dans votre référentiel Git :
git add scripts/setup.sql git commit -m "Adding code to set up new accounts" git push
Dans Snowflake, actualisez la zone de préparation du référentiel. Pour des instructions détaillées, voir Valider le fichier et actualiser la zone de préparation de référentiel.
Actualisez la zone de préparation du référentiel
configuration_repo
:ALTER GIT REPOSITORY configuration_repo FETCH;
Dans Snowflake, exécutez le fichier dans la zone de préparation du référentiel :
Note
L’utilisateur qui exécute l’instruction suivante doit utiliser un rôle qui dispose des privilèges requis pour exécuter toutes les instructions du fichier. Pour plus d’informations, voir Exigences en matière de contrôle d’accès.
EXECUTE IMMEDIATE FROM @configuration_repo/branches/main/scripts/setup.sql;
La commande EXECUTE IMMEDIATE FROM renvoie les résultats de la dernière instruction SQL du fichier :
+-------------------------------+---------+------------+--------------+--------------+ | created_on | role | granted_to | grantee_name | granted_by | |-------------------------------+---------+------------+--------------+--------------| | 2023-07-24 22:07:04.354 -0700 | ANALYST | USER | GLADYS | ACCOUNTADMIN | +-------------------------------+---------+------------+--------------+--------------+