Beispiele für die Verwendung von Git mit Snowflake

Die Beispiele unter diesem Thema beschreiben, wie Sie bei der Entwicklung von Snowflake-Anwendungen Dateien aus einem externen Git-Repository verwenden und wie Sie SQL-Skripte in einem Git-Repository-Klon ausführen.

Lesen Sie unbedingt auch die folgenden Abschnitte, in denen andere Möglichkeiten der Interaktion mit einem Git-Repository-Klon beschrieben werden.

Git-Repository-Datei als Handler in gespeicherter Prozedur verwenden

Nachdem das Einrichten der Integration zwischen Snowflake und Ihrem externen Git-Repository erfolgt ist, können Sie Dateien aus dem Repository als Handler-Code in gespeicherten Prozeduren und UDFs verwenden. Beachten Sie, dass Sie den Namen der Funktion des Handlers mit dem Namen der Klasse oder des Moduls, die bzw. das ihn enthält, qualifizieren müssen: wie bei Staging-Handlern.

Dieses Beispiel beschreibt, wie Sie Python-Handler-Code aus dem Repository in einer gespeicherten Prozedur verwenden.

Für dieses Beispiel benötigter Code

Der Handler in diesem Beispiel hängt von einer Datenbank ab, die mit SQL-Code ähnlich dem folgenden erstellt wurde:

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

Das Beispiel verwendet den folgenden Python-Handler-Code, der in filter.py enthalten ist:

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

Datei committen und den Git-Repository-Klon aktualisieren

  1. Fügen Sie den Code über Ihren Git-Client zum externen Repository hinzu.

    Der Code im folgenden Beispiel verwendet das Git-Befehlszeilentool, um die Handler-Datei zum lokalen Repository hinzuzufügen und zu übertragen. Anschließend wird sie in das externe Repository gepusht, auf das der Git-Repository-Klon in Snowflake verweist:

    $ git add python-handlers/filter.py
    $ git commit -m "Adding code to filter by role"
    $ git push
    
    Copy
  2. Aktualisieren Sie in Snowflake den Git-Repository-Klon.

    Angenommen, Sie haben die Integration zwischen Snowflake und Ihrem externen Git-Repository eingerichtet, was zu einem Git-Repository-Klon in Snowflake führt, dann können Sie durch Abrufen aus dem externen Repository den Git-Repository-Klon aktualisieren.

    Die Verwendung von Snowflake zum Aktualisieren aus Ihrem externen Repository ähnelt der Arbeit mit anderen Git-Client-Tools, bei denen Sie vor Beginn der Arbeit das externe Repository abrufen, um sicherzustellen, dass Sie die neuesten Änderungen haben.

    Der Code im folgenden Beispiel führt den Befehl ALTER GIT REPOSITORY aus, um die letzten Änderungen aus dem externen Repository abzurufen. Der Code generiert einen vollständigen Klon, der Zweige, Tags und Commits enthält.

    ALTER GIT REPOSITORY snowflake_extensions FETCH;
    
    Copy

Erstellen und Ausführen einer Prozedur, welche die Datei im Git-Repository-Klon verwendet

  1. Schreiben Sie die Prozedur in Snowflake.

    Wenn Sie eine Prozedur schreiben, können Sie deren Handler-Code am Speicherort der Codedatei im Git-Repository-Klon in Snowflake referenzieren. Um zum Beispiel auf eine Datei python-handlers/filter.py im Hauptzweig eines externen Repositorys zu verweisen, das mit einem Git-Repository-Klon namens snowflake_extensions synchronisiert ist, würden Sie eine Syntax ähnlich der folgenden verwenden:

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

    Der Code im folgenden Beispiel erstellt eine Prozedur namens filter_by_role, die den im Git-Repository-Klon gespeicherten Handler-Code angibt:

    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. Führen Sie die Prozedur aus.

    Der folgende Code führt die Prozedur aus.

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

    Hier ist ein Beispiel für die Ausgabe der Prozedur:

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

Verwenden Sie eine Git-Repository-Klon-Datei, um neue Konten zu konfigurieren

Dieses Beispiel beschreibt, wie Sie ein SQL-Skript, das in einem Git-Repository-Klon enthalten ist, in Snowflake ausführen. Das Skript im Beispiel erstellt einen Benutzer und eine Rolle.

In diesem Beispiel wird der Befehl EXECUTE IMMEDIATE FROM verwendet, um die SQL-Anweisungen auszuführen, die in einer Datei im Git-Repository-Klon enthalten sind.

Mit EXECUTE IMMEDIATE FROM können Sie (von einer beliebigen Snowflake-Sitzung aus) Skripte ausführen, die Sie in Ihrem externen Git-Repository verwalten. Sie könnten zum Beispiel ein Skript haben, das jedes neue Snowflake-Konto in Ihrer Organisation einrichtet. Das Skript kann Anweisungen enthalten, um Benutzer, Rollen und Objekte zu erstellen und Berechtigungen für das Konto und die Objekte zu erteilen.

  1. Erstellen Sie die Datei setup.sql mit dem folgenden Inhalt:

    CREATE ROLE analyst;
    
    CREATE USER gladys;
    
    GRANT ROLE analyst TO USER gladys;
    
    SHOW GRANTS TO USER gladys;
    
    Copy
  2. Übergeben Sie Ihre SQL-Datei an Ihr externes Git-Repository.

    Verwenden Sie das Git-Befehlszeilentool, um die Datei an Ihr externes Git-Repository zu committen:

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

    Detaillierte Anweisungen finden Sie unter Datei committen und den Git-Repository-Klon aktualisieren.

  3. Aktualisieren Sie den Git-Repository-Klon.

    Aktualisieren Sie den Git-Repository-Klon configuration_repo:

    ALTER GIT REPOSITORY configuration_repo FETCH;
    
    Copy

    Detaillierte Anweisungen finden Sie unter Datei committen und den Git-Repository-Klon aktualisieren.

  4. In Snowflake führen Sie die Datei in Ihrem Git-Repository-Klon aus:

    Bemerkung

    Der Benutzer, der die folgende Anweisung ausführt, muss eine Rolle verwenden, die über die erforderlichen Berechtigungen zum Ausführen aller Anweisungen in der Datei verfügt. Weitere Informationen dazu finden Sie unter Anforderungen an die Zugriffssteuerung.

    EXECUTE IMMEDIATE FROM @configuration_repo/branches/main/scripts/setup.sql;
    
    Copy

    Der Befehl EXECUTE IMMEDIATE FROM liefert die Ergebnisse der letzten SQL-Anweisung in der Datei zurück:

    +-------------------------------+---------+------------+--------------+--------------+
    | created_on                    | role    | granted_to | grantee_name | granted_by   |
    |-------------------------------+---------+------------+--------------+--------------|
    | 2023-07-24 22:07:04.354 -0700 | ANALYST | USER       | GLADYS       | ACCOUNTADMIN |
    +-------------------------------+---------+------------+--------------+--------------+