Como escrever o manipulador Python para um procedimento armazenado

Você pode escrever o código Python como o manipulador que é executado quando um procedimento armazenado é chamado. Esta seção descreve o projeto de um manipulador.

Você pode criar um procedimento armazenado a partir do código do manipulador de várias maneiras:

Planejamento para escrever seu procedimento armazenado

Os procedimentos armazenados funcionam dentro do Snowflake e, portanto, é preciso planejar o código que se escreve com isso em mente.

  • Limite a quantidade de memória consumida O Snowflake impõe limites em um método em termos da quantidade de memória necessária. Para orientação, consulte Criação de manipuladores que ficam dentro das restrições impostas pelo Snowflake.

  • Certifique-se de que o método ou função do seu manipulador seja thread-safe.

  • Siga as regras e restrições de segurança. Consulte Práticas de segurança para UDFs e procedimentos.

  • Decida se você quer que o procedimento armazenado seja executado com direitos do chamador ou direitos do proprietário.

  • Considere a versão snowflake-snowpark-python usada para executar procedimentos armazenados. Devido a limitações no processo de liberação dos procedimentos armazenados, a biblioteca snowflake-snowpark-python disponível no ambiente do procedimento armazenado Python é geralmente uma versão anterior à versão lançada publicamente. Use o seguinte SQL para descobrir a última versão disponível:

    SELECT * FROM information_schema.packages WHERE package_name = 'snowflake-snowpark-python' ORDER BY version DESC;
    
    Copy

Como escrever o método ou função

Ao escrever o método ou função para o procedimento armazenado, observe o seguinte:

  • Especifique o objeto Session Snowpark como o primeiro argumento de seu método ou função. Quando você chama seu procedimento armazenado, o Snowflake cria automaticamente um objeto Session e o passa para seu procedimento armazenado. (Você, por si só, não pode criar o objeto Session).

  • Para o restante dos argumentos e para o valor de retorno, use os tipos Python que correspondem aos tipos de dados Snowflake. O Snowflake oferece suporte aos tipos de dados Python listados em Mapeamentos de tipos de dados SQL-Python para parâmetros e tipos de retorno.

  • Quando você executa um trabalho filho assíncrono a partir do manipulador de um procedimento - como, por exemplo, usando DataFrame. collect_nowait - não há suporte para «disparar e esquecer».

    Em outras palavras, se o manipulador emitir uma consulta filha que ainda esteja em execução quando o trabalho do procedimento pai for concluído, o trabalho filho será cancelado automaticamente.

Tratamento de erros

Você pode usar as técnicas normais de tratamento de exceções do Python para capturar erros dentro do procedimento.

Se ocorrer uma exceção não capturada dentro do método, o Snowflake gera um erro que inclui o rastreamento de pilha da exceção. Quando o registro de exceções não tratadas está ativado, o Snowflake registra dados sobre exceções não tratadas em uma tabela de eventos.

Disponibilização das dependências para seus códigos

Se seu código de manipulador depender do código definido fora do próprio manipulador (como o código definido em um módulo) ou de arquivos de recursos, você pode disponibilizar essas dependências para seu código, carregando-os em um estágio. Consulte Disponibilização das dependências para seus códigos, ou para planilhas Python, consulte Como adicionar um arquivo Python de um estágio a uma planilha.

Se você criar seu procedimento armazenado usando SQL, use a cláusula IMPORTS ao escrever a instrução CREATE PROCEDURE, para apontar para os arquivos de dependência.