Развертывание пользовательских пакетов Python с GitHub в Snowflake
ОБНОВЛЕНИЕ: по состоянию на 7 ноября 2022 г. Snowpark для Python является GA, поэтому установить его так же просто, как pip install snowflake-snowpark-python
через PyPi .
Обзор
Snowpark предоставляет разработчикам возможность расширить функциональность платформы Snowflake путем написания кода на таких языках, как Python, Java, Scala и JavaScript. В этом блоге мы рассмотрим способ развертывания пользовательских пакетов pure-Python из репозитория GitHub с помощью GitHub Actions на Snowflake.
Что еще более важно, когда эти пакеты используются для создания определяемых пользователем функций (UDF) в Snowpark Python , такой подход упрощает поддержку и развертывание пользовательского кода в нескольких UDF одновременно и автоматически, без ручного вмешательства. Еще одним преимуществом этой установки является отделение пользовательского пакета(ов) от сценария, который загружает пакет в Snowflake и отображает имена пользовательских функций, использующих обновленный пользовательский пакет.
Пользовательская функция
Чтобы продемонстрировать, как весь поток объединяется, давайте рассмотрим эту простую определяемую пользователем функцию в Snowpark Python. (Этот скрипт запускается в Snowsight .)
Примечания к сценарию
- Пакет Python do_something_cool.py добавлен как зависимость — строка 6 . Обратите внимание, что инструкция imports включает весь путь; название сцены и имя файла
- Затем этот пакет импортируется ( строка 9 ) и вызывается метод Greetings() ( строка 11 ), передавая параметр, переданный в эту UDF.
SELECT greet_me('Dash');
Hello, Dash! How are you doing today? It's great to see you today!
Установка: репозиторий GitHub 1
Допустим, у вас есть репозиторий GitHub, в котором вы поддерживаете этот пакет Python, который вы и члены вашей команды вносите и сотрудничаете.
Вот " сделай что- нибудь крутое "
В этом репозитории также можно настроить GitHub Actions .
Вот как будет выглядеть файл рабочего процесса GitHub Actions ( подробности рабочего процесса ниже):
Подробности рабочего процесса
- Инициирующее событие: при отправке в основную ветку при обновлении кода.
- Шаги рабочего процесса:
— 2. Установите запросы зависимостей и snowflake-connector-python , необходимые для развертывания обновленного кода пакета.
— 3. Загрузите скрипт ( из Repo 2 — см. ниже ), который загрузит обновленный пользовательский код в Snowflake .
— 4. Настройте переменные среды ( база данных, хранилище, схема, пользователь, пароль и роль ), хранящиеся в секретах GitHub. Эти переменные будут использоваться Snowflake Python Connector в скрипте ( загруженном на шаге 3 ) для подключения к Snowflake.
— 5. Запустите скрипт ( загруженный на шаге 3 ) для развертывания обновленного кода.
[Код на GitHub : Пример пользовательского пакета | Файл рабочего процесса GitHub Actions ]
Установка: репозиторий GitHub 2
Этот репозиторий содержит скрипт Python (подробности см. ниже) , который загружается и запускается из настройки рабочего процесса GitHub Actions в репозитории 1 при обновлении пакета в основной ветке в репозитории 1.
Вот как будет выглядеть сценарий:
Шаги скрипта
— 1. Подключитесь к Snowflake с помощью Snowflake Python Connector и задайте переменные среды с помощью секретов GitHub.
— 2. Скачать список пакетов (см. ниже формат JSON) для обновления
— 3. Для каждого пакета загрузите последнюю версию из основной ветки из Репозитория 1 и загрузите ее на этап Snowflake.
— 4. Прокрутите все пользовательские функции, проверьте их импорт и распечатайте имена пользовательских функций, использующих обновленный пакет.
Список пакетов
Этот репозиторий также содержит файл JSON со списком пакетов ( упомянутых в шаге 2 выше ), которые необходимо обновить при запуске сценария update_packages.py .
Вот формат файла:
Примечание . Этап в файле JSON относится к этапу в Snowflake , на котором загружается файл.
Тестирование
Для тестирования обновите do_something_cool.py в Repo 1 ( например, измените приветственное сообщение на «Добро пожаловать, как проходит ваш день?» ) и отправьте изменения в основную ветку. В этот момент вы должны увидеть начало сборки, и если она завершится успешно (т. е. код/ синтаксис верен, все указанные файлы и пути существуют, параметры соединения для подключения к Snowflake действительны и т. д. ), то вы должны увидеть выходные данные сборки. похоже на это:

Затем, снова запустив этот SQL…
SELECT greet_me('DASH');
Hello, Dash! Welcome, how is your day going?
Вот и все!
Спасибо за ваше время, и не стесняйтесь подписываться на меня в Twitter и LinkedIn , где я делюсь демонстрационными видео, фрагментами кода и другими интересными артефактами, относящимися к Snowpark .