Wdrażanie niestandardowych pakietów Pythona z GitHub do Snowflake
AKTUALIZACJA: Stan na 7 listopada 2022 r. Snowpark dla Pythona jest GA, więc instalacja jest tak prosta, jak pip install snowflake-snowpark-python
przez 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 .