Beispiele für die Verwendung von Git mit Snowflake¶
Die Beispiele unter diesem Thema beschreiben, wie Sie bei der Entwicklung von Snowflake-Anwendungen ein integriertes Git-Repository verwenden und wie Sie SQL-Skripte in einem Repository ausführen.
Git-Repository-Datei als Handler in gespeicherter Prozedur verwenden¶
Nachdem das Einrichten der Integration zwischen Snowflake und Ihrem 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 anderen 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');
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)
Datei committen und den Repository-Stagingbereich aktualisieren¶
Fügen Sie den Code über Ihren Git-Client zum Repository hinzu.
Der Code im folgenden Beispiel verwendet das git-Befehlszeilentool, um die Handler-Datei zum lokalen Repository hinzuzufügen und zu committen. Anschließend wird sie in das externe Repository gepusht, auf das der Repository-Stagingbereich in Snowflake verweist:
$ git add python-handlers/filter.py $ git commit -m "Adding code to filter by role" $ git push
Aktualisieren Sie in Snowflake den Repository-Stagingbereich.
Angenommen, das Einrichten der Integration zwischen Snowflake und Ihrem Git-Repository ist erfolgt und der Repository-Stagingbereich wurde erstellt, dann können Sie den Stagingbereich durch Abrufen der Daten aus dem Repository aktualisieren.
Die Verwendung von Snowflake zum Aktualisieren Ihres Repositorys ähnelt der Arbeit mit anderen Git-Client-Tools, bei denen Sie vor Beginn der Arbeit das 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 Repository abzurufen. Der Code generiert einen vollständigen Klon, der Zweige, Tags und Commits enthält.
ALTER GIT REPOSITORY snowflake_extensions FETCH;
Prozedur erstellen und ausführen, die die Datei im Repository verwendet¶
Schreiben Sie die Prozedur in Snowflake.
Wenn Sie eine Prozedur schreiben, können Sie deren Handler-Code am Speicherort der Code-Datei im Repository-Stagingbereich referenzieren. Um beispielsweise auf eine Datei
python-handlers/filter.py
im Hauptzweig eines Repositorys zu verweisen, das mit einem Git-Repository-Stagingbereich namenssnowflake_extensions
synchronisiert ist, verwenden Sie eine Syntax ähnlich der folgenden:@snowflake_extensions/branches/main/python-handlers/filter.py
Der Code im folgenden Beispiel erstellt eine Prozedur namens
filter_by_role
, die den im Repository-Stagingbereich des Repositorys 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';
Führen Sie die Prozedur aus.
Der folgende Code führt die Prozedur aus.
CALL filter_by_role('employees', 'dev');
Hier ist ein Beispiel für die Ausgabe der Prozedur:
--------------------- | ID | NAME | ROLE | --------------------- | 2 | Bob | dev | --------------------- | 3 | Cindy | dev | ---------------------
Git-Repository-Datei zum Konfigurieren neuer Konten verwenden¶
In diesem Beispiel wird beschrieben, wie Sie ein SQL-Skript ausführen, das in einem Repository-Stagingbereich enthalten ist. 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 Repository-Stagingbereich enthalten sind.
Mit EXECUTE IMMEDIATE FROM können Sie (von einer beliebigen Snowflake-Sitzung aus) Skripte ausführen, die Sie in Ihrem 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.
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;
Committen Sie Ihre SQL-Datei in Ihr Git-Repository. Detaillierte Anweisungen finden Sie unter Datei committen und den Repository-Stagingbereich aktualisieren.
Verwenden Sie das git-Befehlszeilentool, um die Datei in Ihr Git-Repository zu committen:
git add scripts/setup.sql git commit -m "Adding code to set up new accounts" git push
Aktualisieren Sie in Snowflake den Repository-Stagingbereich. Detaillierte Anweisungen finden Sie unter Datei committen und den Repository-Stagingbereich aktualisieren.
Aktualisieren Sie den Repository-Stagingbereich
configuration_repo
:ALTER GIT REPOSITORY configuration_repo FETCH;
Führen Sie in Snowflake die im Repository-Stagingbereich befindliche Datei 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;
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 | +-------------------------------+---------+------------+--------------+--------------+