Implantando pacotes Python personalizados do GitHub para o Snowflake
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 .
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 .