Exemples d’utilisation de Git avec Snowflake

Les exemples de cette rubrique décrivent comment utiliser les fichiers d’un référentiel Git distant lors du développement d’applications Snowflake et comment exécuter des scripts SQL dans un clone de référentiel Git.

N’oubliez pas de consulter les pages suivantes, qui décrivent d’autres façons d’interagir avec un clone de référentiel Git.

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 distant, vous pouvez utiliser les fichiers du référentiel comme code de gestionnaire dans les procédures stockées et les UDFs. Notez que, comme pour les gestionnaires 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');
Copy

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)
Copy

Valider le fichier et actualiser le clone de référentiel Git

  1. Depuis votre client Git, ajoutez le code au référentiel distant.

    Le code de l’exemple suivant utilise l’outil de ligne de commande Git pour ajouter et valider le fichier du gestionnaire dans le référentiel local, puis le pousser vers le référentiel distant référencé par le clone de référentiel Git dans Snowflake :

    $ git add python-handlers/filter.py
    $ git commit -m "Adding code to filter by role"
    $ git push
    
    Copy
  2. Dans Snowflake, actualisez le clone du référentiel Git.

    En supposant que vous avez configuré l’intégration entre Snowflake et votre référentiel Git distant, entraînant un clone de référentiel Git dans Snowflake, vous pouvez actualiser le clone de référentiel Git en récupérant des données du référentiel distant.

    Utiliser Snowflake pour actualiser à partir du référentiel distant revient à travailler avec d’autres outils clients Git, où vous extrayez du référentiel distant 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 distant. Le code génère un clone complet qui inclut des branches, des balises et des validations.

    ALTER GIT REPOSITORY snowflake_extensions FETCH;
    
    Copy

Créer et exécuter une procédure qui utilise le fichier dans le clone du référentiel Git

  1. Dans Snowflake, écrivez la procédure.

    Lorsque vous écrivez une procédure, vous pouvez faire référence à son code du gestionnaire à l’emplacement du fichier de code dans le clone du référentiel Git dans Snowflake. Par exemple, pour faire référence à un fichier python-handlers/filter.py dans la branche principale d’un référentiel distant synchronisé avec un clone de référentiel Git appelé snowflake_extensions, vous utiliserez une syntaxe similaire à la suivante :

    @snowflake_extensions/branches/main/python-handlers/filter.py
    
    Copy

    Le code de l’exemple suivant crée une procédure appelée filter_by_role, qui spécifie le code du gestionnaire stocké dans le clone du référentiel Git :

    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';
    
    Copy
  2. Exécutez la procédure.

    Le code suivant exécute la procédure.

    CALL filter_by_role('employees', 'dev');
    
    Copy

    Voici un exemple de sortie de la procédure.

    ---------------------
    | ID | NAME  | ROLE |
    ---------------------
    | 2  | Bob   | dev  |
    ---------------------
    | 3  | Cindy | dev  |
    ---------------------
    

Utilisez un fichier clone du référentiel Git pour configurer de nouveaux comptes

Cet exemple décrit comment exécuter un script SQL contenu dans un clone de référentiel Git dans Snowflake. 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 du clone du référentiel Git.

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 distant. 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.

  1. 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;
    
    Copy
  2. Validez votre fichier SQL dans votre référentiel Git distant.

    Utilisez l’outil de ligne de commande Git pour valider le fichier dans votre référentiel Git distant :

    git add scripts/setup.sql
    git commit -m "Adding code to set up new accounts"
    git push
    
    Copy

    Pour des instructions détaillées, voir Valider le fichier et actualiser le clone de référentiel Git.

  3. Actualisez le clone du référentiel Git.

    Actualisez le clone du référentiel Git configuration_repo :

    ALTER GIT REPOSITORY configuration_repo FETCH;
    
    Copy

    Pour des instructions détaillées, voir Valider le fichier et actualiser le clone de référentiel Git.

  4. Dans Snowflake, exécutez le fichier dans le clone de votre référentiel Git :

    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;
    
    Copy

    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 |
    +-------------------------------+---------+------------+--------------+--------------+