Wdrażanie niestandardowych pakietów Pythona z GitHub do Snowflake

Nov 30 2022
AKTUALIZACJA: Stan na 7 listopada 2022 r. Snowpark dla Pythona jest GA, więc jego instalacja jest tak prosta, jak pip install snowflake-snowpark-python przez PyPi.

AKTUALIZACJA: Stan na 7 listopada 2022 r. Snowpark dla Pythona jest GA, więc instalacja jest tak prosta, jak pip install snowflake-snowpark-pythonprzez PyPi .

Przegląd

Snowpark umożliwia programistom rozszerzenie funkcjonalności platformy Snowflake poprzez pisanie kodu w językach takich jak Python, Java, Scala i JavaScript. Na tym blogu przyjrzymy się sposobowi wdrażania niestandardowych pakietów czysto Pythonowych z repozytorium GitHub przy użyciu GitHub Actions na Snowflake.

Co ważniejsze, gdy te pakiety są używane do tworzenia funkcji zdefiniowanych przez użytkownika (UDF) w Snowpark Python , takie podejście ułatwia utrzymanie i wdrażanie niestandardowego kodu w kilku UDF jednocześnie i automatycznie, bez ręcznej interwencji. Kolejną zaletą tej konfiguracji jest oddzielenie niestandardowych pakietów od skryptu, który przesyła pakiet do Snowflake i wyświetla nazwy UDF, które używają zaktualizowanego niestandardowego pakietu.

Funkcja zdefiniowana przez użytkownika

Aby zademonstrować, jak cały przepływ się łączy, rozważmy ten prosty UDF w Snowpark Python. (Ten skrypt jest uruchamiany w Snowsight .)

Notatki do scenariusza

  • Pakiet Pythona do_something_cool.py jest dodawany jako zależność — wiersz 6 . Zauważ, że instrukcja imports zawiera całą ścieżkę; nazwę etapu i nazwę pliku
  • Ten pakiet jest następnie importowany ( linia 9 ) i wywoływana jest metoda pozdrowienia() ( linia 11 ) przekazując parametr przekazany do tego UDF

SELECT greet_me('Dash');

Hello, Dash! How are you doing today? It's great to see you today!

Konfiguracja: repozytorium GitHub 1

Załóżmy, że masz repozytorium GitHub, w którym utrzymujesz ten pakiet Pythona, który ty i członkowie twojego zespołu współtworzycie i współpracujecie.

Oto „ zrób coś fajnego

To repozytorium jest również miejscem, w którym skonfigurujesz GitHub Actions .

Oto jak wyglądałby plik przepływu pracy GitHub Actions ( szczegóły przepływu pracy poniżej ):

Szczegóły przepływu pracy

  • Zdarzenie wyzwalające: Po wypychaniu do głównej gałęzi, gdy kod jest aktualizowany
  • Kroki przepływu pracy:

— 2. Zainstaluj żądania zależności i snowflake-connector-python wymagane do wdrożenia zaktualizowanego kodu pakietu

— 3. Pobierz skrypt ( z Repo 2 — patrz poniżej ), który prześle zaktualizowany niestandardowy kod do Snowflake

— 4. Skonfiguruj zmienne środowiskowe ( baza danych, magazyn, schemat, użytkownik, hasło i rola ) przechowywane w GitHub Secrets. Te zmienne będą używane przez Snowflake Python Connector w skrypcie ( pobranym w kroku 3 ) do łączenia się z Snowflake

— 5. Uruchom skrypt ( pobrany w kroku 3 ), aby wdrożyć zaktualizowany kod

[Kod w GitHub : przykładowy pakiet niestandardowy | Plik przepływu pracy GitHub Actions ]

Konfiguracja: repozytorium GitHub 2

To repozytorium zawiera skrypt Pythona (szczegóły poniżej) , który jest pobierany i uruchamiany z konfiguracji przepływu pracy GitHub Actions w Repo 1 , gdy wprowadzane są aktualizacje pakietu w głównej gałęzi w Repo 1.

Oto jak wyglądałby skrypt:

Kroki skryptu

— 1. Połącz się ze Snowflake za pomocą Snowflake Python Connector i zmiennych środowiskowych ustawionych za pomocą GitHub Secrets

— 2. Pobierz listę pakietów (patrz poniżej format JSON) do aktualizacji

— 3. Dla każdego pakietu pobierz najnowszą wersję z głównej gałęzi z Repo 1 i prześlij ją na etap Snowflake

— 4. Przejrzyj wszystkie UDF, sprawdź ich import i wydrukuj nazwy UDF, które używają zaktualizowanego pakietu

Lista pakietów

To repozytorium zawiera również plik JSON zawierający listę pakietów (o których mowa w kroku 2 powyżej ), które mają zostać zaktualizowane po uruchomieniu skryptu update_packages.py .

Oto format pliku:

Uwaga : Etap w pliku JSON odnosi się do etapu w Snowflake , do którego przesyłany jest plik.

Testowanie

Aby przetestować, zaktualizuj do_something_cool.py w Repo 1 ( na przykład zmień wiadomość powitalną na „Witamy, jak mija dzień?” ) i wypchnij zmiany do głównej gałęzi. W tym momencie powinieneś zobaczyć rozpoczęcie kompilacji i jeśli się powiedzie (tj. Kod/ składnia jest poprawna, wszystkie przywoływane pliki i ścieżki istnieją, parametry połączenia do połączenia ze Snowflake są prawidłowe itp. ), Powinieneś zobaczyć dane wyjściowe kompilacji podobny do tego:

Następnie ponowne uruchomienie tego kodu SQL…

SELECT greet_me('DASH');

Hello, Dash! Welcome, how is your day going?

Otóż ​​to!

Dziękuję za poświęcony czas i zachęcam do obserwowania mnie na Twitterze i LinkedIn, gdzie udostępniam filmy demonstracyjne, fragmenty kodu i inne interesujące artefakty dotyczące Snowparku .