Развертывание пользовательских пакетов Python с GitHub в Snowflake

Nov 30 2022
ОБНОВЛЕНИЕ: по состоянию на 7 ноября 2022 г. Snowpark для Python является GA, поэтому его установка так же проста, как pip install snowflake-snowpark-python через PyPi.

ОБНОВЛЕНИЕ: по состоянию на 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 .