Bereitstellen benutzerdefinierter Python-Pakete von GitHub in Snowflake
UPDATE: Ab 7. November 2022. Snowpark für Python ist GA, daher ist die Installation so einfach wie pip install snowflake-snowpark-pythonüber PyPi .
Überblick
Snowpark bietet Entwicklern die Möglichkeit, die Funktionalität der Snowflake-Plattform zu erweitern, indem Code in Sprachen wie Python, Java, Scala und JavaScript geschrieben wird. In diesem Blog werden wir eine Möglichkeit zum Bereitstellen benutzerdefinierter reiner Python- Pakete aus einem GitHub-Repo mithilfe von GitHub-Aktionen auf Snowflake untersuchen.
Noch wichtiger: Wenn diese Pakete zum Erstellen von benutzerdefinierten Funktionen (UDFs) in Snowpark Python verwendet werden, erleichtert dieser Ansatz die Verwaltung und Bereitstellung Ihres benutzerdefinierten Codes über mehrere UDFs gleichzeitig und automatisch ohne manuellen Eingriff. Ein weiterer Vorteil, den dieses Setup hervorhebt, ist die Entkopplung der benutzerdefinierten Pakete von dem Skript, das das Paket in Snowflake hochlädt und Namen von UDFs anzeigt, die das aktualisierte benutzerdefinierte Paket verwenden.
Benutzerdefinierte Funktion
Um zu demonstrieren, wie der gesamte Ablauf zusammenkommt, betrachten wir diese einfache UDF in Snowpark Python. (Dieses Skript wird in Snowsight ausgeführt .)
Skriptnotizen
- Das Python-Paket do_something_cool.py wird als Abhängigkeit hinzugefügt – Zeile 6 . Beachten Sie, dass die imports- Anweisung den gesamten Pfad enthält; Name der Bühne und den Dateinamen
- Dieses Paket wird dann importiert ( Zeile 9 ) und die Methode Greetings() wird aufgerufen ( Zeile 11 ), wobei der an diese UDF übergebene Parameter übergeben wird
SELECT greet_me('Dash');
Hello, Dash! How are you doing today? It's great to see you today!
Einrichtung: GitHub-Repository 1
Angenommen, Sie haben ein GitHub-Repository, in dem Sie dieses Python-Paket verwalten, das Sie und Ihre Teammitglieder beitragen und zusammenarbeiten.
Hier ist „ etwas Cooles tun “
In diesem Repository würden Sie auch GitHub Actions einrichten .
So würde die GitHub Actions-Workflow-Datei ( Workflow - Details unten ) aussehen:
Workflow-Details
- Auslösendes Ereignis: Beim Pushen zum Hauptzweig , wenn der Code aktualisiert wird
- Workflow-Schritte:
— 2. Installieren Sie Abhängigkeitsanforderungen und snowflake -connector-python , die zum Bereitstellen des aktualisierten Paketcodes erforderlich sind
— 3. Laden Sie das Skript herunter ( von Repo 2 — siehe unten ), das den aktualisierten benutzerdefinierten Code in Snowflake hochlädt
— 4. Einrichten von Umgebungsvariablen ( Datenbank, Warehouse, Schema, Benutzer, Passwort und Rolle ), die in GitHub Secrets gespeichert sind. Diese Variablen werden vom Snowflake Python Connector im Skript ( in Schritt 3 heruntergeladen ) verwendet, um eine Verbindung zu Snowflake herzustellen
— 5. Führen Sie das Skript aus ( heruntergeladen in Schritt 3 ), um den aktualisierten Code bereitzustellen
[Code auf GitHub : Benutzerdefiniertes Beispielpaket | GitHub Actions-Workflow-Datei ]
Einrichtung: GitHub-Repository 2
Dieses Repo enthält ein Python-Skript (siehe Details unten) , das von der GitHub Actions - Workflow-Einrichtung in Repo 1 heruntergeladen und ausgeführt wird, wenn Aktualisierungen am Paket im Hauptzweig in Repo 1 vorgenommen werden.
So würde das Skript aussehen:
Skriptschritte
— 1. Verbinden Sie sich mit Snowflake über Snowflake Python Connector und die Umgebungsvariablen, die mit GitHub Secrets festgelegt wurden
— 2. Laden Sie die Liste der zu aktualisierenden Pakete (siehe unten im JSON-Format) herunter
— 3. Laden Sie für jedes Paket die neueste Version vom Hauptzweig von Repo 1 herunter und laden Sie sie in die Snowflake-Phase hoch
— 4. Durchlaufen Sie alle UDFs, untersuchen Sie ihre Importe und geben Sie die Namen der UDFs aus, die das aktualisierte Paket verwenden
Liste der Pakete
Dieses Repository enthält auch eine JSON-Datei mit einer Liste von Paketen ( auf die in Schritt 2 oben verwiesen wird ), die aktualisiert werden sollen, wenn das Skript update_packages.py ausgeführt wird.
Hier ist das Dateiformat:
Hinweis : Die Phase in der JSON-Datei bezieht sich auf eine Phase in Snowflake, in der die Datei hochgeladen wird.
Testen
Aktualisieren Sie zum Testen do_something_cool.py in Repo 1 ( ändern Sie beispielsweise die Begrüßungsnachricht in „Willkommen, wie läuft Ihr Tag?“ ) und übertragen Sie die Änderungen auf den Hauptzweig . An diesem Punkt sollten Sie einen Build-Kickoff sehen, und wenn er erfolgreich ist (dh Code/ Syntax ist korrekt, alle referenzierten Dateien und Pfade vorhanden, die Verbindungsparameter zum Herstellen einer Verbindung mit Snowflake sind gültig usw. ), sollten Sie die Build-Ausgabe sehen ähnlich wie dies:
Führen Sie dann dieses SQL erneut aus …
SELECT greet_me('DASH');
Hello, Dash! Welcome, how is your day going?
Das ist es!
Vielen Dank für Ihre Zeit und folgen Sie mir gerne auf Twitter und LinkedIn , wo ich Demo-Videos, Code-Snippets und andere interessante Artefakte speziell rund um Snowpark teile .

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































