Implantando pacotes Python personalizados do GitHub para o Snowflake

Nov 30 2022
ATUALIZAÇÃO: a partir de 7 de novembro de 2022. Snowpark para Python é GA, portanto, instalá-lo é tão fácil quanto pip install snowflake-snowpark-python via PyPi.

ATUALIZAÇÃO: a partir de 7 de novembro de 2022. Snowpark para Python é GA, portanto, instalá-lo é tão fácil quanto pip install snowflake-snowpark-pythonvia PyPi .

Visão geral

O Snowpark fornece uma maneira para os desenvolvedores estenderem a funcionalidade da plataforma Snowflake por meio da escrita de código em linguagens como Python, Java, Scala e JavaScript. Neste blog, revisaremos uma maneira de implantar pacotes personalizados de Python puro de um repositório do GitHub usando o GitHub Actions no Snowflake.

Mais importante ainda, quando esses pacotes são usados ​​para criar funções definidas pelo usuário (UDFs) no Snowpark Python , essa abordagem facilita a manutenção e a implantação de seu código personalizado em várias UDFs de uma só vez e automaticamente, sem intervenção manual. Outro benefício que essa configuração destaca é a dissociação do(s) pacote(s) personalizado(s) do script que carrega o pacote no Snowflake e exibe nomes de UDFs que usam o pacote personalizado atualizado.

Função definida pelo usuário

Para demonstrar como todo o fluxo se junta, vamos considerar este UDF simples no Snowpark Python. (Este script é executado no Snowsight .)

Notas do roteiro

  • O pacote Python do_something_cool.py é adicionado como uma dependência — linha 6 . Observe que a instrução imports inclui o caminho inteiro; nome do palco e o nome do arquivo
  • Esse pacote é então importado ( linha 9 ) e o método greetings() é chamado ( linha 11 ) passando o parâmetro passado para esta UDF

SELECT greet_me('Dash');

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

Configuração: Repositório GitHub 1

Digamos que você tenha um repositório GitHub onde mantém este pacote Python com o qual você e os membros de sua equipe contribuem e colaboram.

Aqui está “ faça algo legal

Este repositório também é onde você configuraria o GitHub Actions .

Veja como seria o arquivo de fluxo de trabalho do GitHub Actions ( detalhes do fluxo de trabalho abaixo ):

Detalhes do fluxo de trabalho

  • Evento de acionamento: Ao enviar para a ramificação principal quando o código é atualizado
  • Etapas do fluxo de trabalho:

— 2. Instalar solicitações de dependências e snowflake-connector-python necessários para implantar o código do pacote atualizado

— 3. Baixe o script ( do Repo 2 — veja abaixo ) que fará o upload do código personalizado atualizado para o Snowflake

— 4. Variáveis ​​de ambiente de configuração ( banco de dados, depósito, esquema, usuário, senha e função ) armazenadas no GitHub Secrets. Essas variáveis ​​serão usadas pelo Snowflake Python Connector no script ( baixado na etapa 3 ) para se conectar ao Snowflake

— 5. Execute o script ( baixado na etapa 3 ) para implantar o código atualizado

[Código no GitHub : Exemplo de pacote personalizado | Arquivo de fluxo de trabalho do GitHub Actions ]

Configuração: Repositório GitHub 2

Este repositório contém um script Python (veja os detalhes abaixo) que é baixado e executado na configuração do fluxo de trabalho do GitHub Actions no Repo 1 quando as atualizações são feitas no pacote na ramificação principal no Repo 1.

Veja como ficaria o script:

Passos do roteiro

— 1. Conecte-se ao Snowflake usando o Snowflake Python Connector e as variáveis ​​de ambiente definidas usando o GitHub Secrets

— 2. Baixe a lista de pacotes (veja abaixo o formato JSON) para ser atualizado

— 3. Para cada pacote, baixe a versão mais recente da ramificação principal do Repo 1 e carregue-a no estágio Snowflake

— 4. Percorra todos os UDFs, examine suas importações e imprima os nomes dos UDFs que usam o pacote atualizado

Lista de Pacotes

Este repositório também contém um arquivo JSON que possui uma lista de pacotes ( referenciados na etapa 2 acima ) a serem atualizados quando o script update_packages.py for executado.

Aqui está o formato do arquivo:

Observação : o estágio no arquivo JSON refere-se a um estágio no Snowflake em que o arquivo é carregado.

teste

Para testar, atualize do_something_cool.py no Repo 1 ( por exemplo, altere a mensagem de saudação para “Bem-vindo, como está indo o seu dia?” ) e envie as alterações para o branch principal . Nesse ponto, você deve ver um início de compilação e, se for bem-sucedido (ou seja, o código/ sintaxe está correto, todos os arquivos e caminhos referenciados existem, os parâmetros de conexão para conectar ao Snowflake são válidos, etc. ), você deve ver a saída de compilação semelhante a isto:

Em seguida, executando este SQL novamente…

SELECT greet_me('DASH');

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

É isso!

Obrigado pelo seu tempo e sinta-se à vontade para me seguir no Twitter e no LinkedIn , onde compartilho vídeos de demonstração, trechos de código e outros artefatos interessantes especificamente sobre o Snowpark .