Gerenciamento de funções Snowflake e procedimentos armazenados com Python¶
É possível usar Python para gerenciar funções definidas pelo usuário (UDFs) e procedimentos armazenados no Snowflake. Ao criar uma UDF ou procedimento, você escreve sua lógica em uma das linguagens de manipulador compatíveis e, em seguida, o cria usando o Snowflake Python APIs. Para obter mais informações sobre UDFs e procedimentos, consulte Como estender o Snowflake com funções e procedimentos.
Pré-requisitos¶
Os exemplos neste tópico pressupõem que você tenha adicionado código para se conectar ao Snowflake e criar um objeto Root a partir do qual usar o Snowflake Python APIs.
Por exemplo, o seguinte código usa parâmetros de conexão definidos em um arquivo de configuração para criar uma conexão com o Snowflake:
Usando o objeto Session resultante, o código cria um objeto Root para usar os tipos e métodos de API. Para obter mais informações, consulte Conexão ao Snowflake com o Snowflake Python APIs.
Gerenciamento de funções definidas pelo usuário (UDFs)¶
É possível gerenciar funções definidas pelo usuário (UDFs), que podem ser escritas para estender o sistema para executar operações que não estão disponíveis através das funções definidas pelo sistema integradas fornecidas pelo Snowflake. Após criar uma UDF, é possível reutilizá-la diversas vezes. Para obter mais informações, consulte Visão geral das funções definidas pelo usuário.
Nota
Não há suporte para chamar UDFs usando a API no momento.
O Snowflake Python APIs representa UDFs com dois tipos separados:
UserDefinedFunction: Expõe as propriedades de uma UDF, como nome, lista de argumentos, tipo de retorno e definição de função.UserDefinedFunctionResource: Expõe métodos que podem ser usados para buscar um objetoUserDefinedFunctioncorrespondente, renomear a UDF e descartar a UDF.
Criação de uma UDF¶
Para criar uma UDF, primeiro crie um objeto UserDefinedFunction e depois crie um objeto UserDefinedFunctionCollection a partir do objeto Root da API. Usando UserDefinedFunctionCollection.create, adicione a nova UDF ao Snowflake.
Ao criar uma UDF, você especifica um manipulador cujo código é escrito em uma das seguintes linguagens compatíveis.
Python¶
O código no exemplo a seguir cria um objeto UserDefinedFunction que representa uma UDF nomeada my_python_function no banco de dados my_db e no esquema my_schema, com os argumentos especificados, o tipo de retorno, a linguagem e definição Python da UDF:
Java¶
O código no exemplo a seguir cria um objeto UserDefinedFunction que representa uma UDF nomeada my_java_function no banco de dados my_db e no esquema my_schema, com os argumentos especificados, o tipo de retorno, a linguagem e a definição Java da UDF:
JavaScript¶
O código no exemplo a seguir cria um objeto UserDefinedFunction que representa uma UDF nomeada my_javascript_function no banco de dados my_db e no esquema my_schema, com os argumentos especificados, o tipo de retorno, a linguagem e a definição JavaScript da UDF:
Scala¶
O código no exemplo a seguir cria um objeto UserDefinedFunction que representa uma UDF nomeada my_scala_function no banco de dados my_db e no esquema my_schema, com os argumentos especificados, o tipo de retorno, a linguagem e a definição Scala da UDF:
SQL¶
O código no exemplo a seguir cria um objeto UserDefinedFunction que representa uma UDF nomeada my_sql_function no banco de dados my_db e no esquema my_schema, com os argumentos especificados, o tipo de retorno, a linguagem e a definição SQL da UDF:
Como obter detalhes da UDF¶
É possível obter informações sobre a UDF chamando o método UserDefinedFunctionResource.fetch, que retorna um objeto UserDefinedFunction.
O código no exemplo a seguir busca informações sobre UDF my_javascript_function(DOUBLE) no banco de dados my_db e no esquema my_schema:
Nota
Ao obter um objeto de recurso da UDF, é necessário especificar a assinatura completa (o nome da UDF e seus tipos de dados de parâmetro), visto que as UDFs podem ser sobrecarregadas.
Listagem de UDFs¶
É possível listar UDFs usando o método UserDefinedFunctionCollection.iter, que retorna um iterador PagedIter de objetos UserDefinedFunction.
O código no exemplo a seguir lista aas UDFs cujo nome começa com my_java no banco de dados my_db e no esquema my_schema e, em seguida, imprime o nome de cada um:
Como renomear uma UDF¶
É possível renomear uma UDF com um objeto UserDefinedFunctionResource.
O código no exemplo a seguir obtém o objeto de recurso da UDF my_javascript_function(DOUBLE) no banco de dados my_db e no esquema my_schema e, em seguida, renomeia a UDF para my_other_js_function, ao mesmo tempo em que a move para o banco de dados my_other_db e o esquema my_other_schema:
Descarte de uma UDF¶
É possível descartar uma UDF com um objeto UserDefinedFunctionResource.
O código no exemplo a seguir obtém o objeto de recurso da UDF my_javascript_function(DOUBLE) e descarta a UDF:
Gerenciamento de procedimentos armazenados¶
É possível gerenciar procedimentos armazenados, que você pode escrever para estender o sistema com código procedural que executa SQL. Em um procedimento armazenado, você pode usar construções programáticas para realizar ramificações e looping. Após criar um procedimento armazenado, você pode reutilizá-lo diversas vezes. Para obter mais informações, consulte Visão geral dos procedimentos armazenados.
O Snowflake Python APIs representa procedimentos com dois tipos separados:
Procedure: Expõe as propriedades de um procedimento, como nome, lista de argumentos, tipo de retorno e definição do procedimento.ProcedureResource: Expõe métodos que você pode usar para buscar um objetoProcedurecorrespondente, chamar o procedimento e descartar o procedimento.
Criação de um procedimento¶
Para criar um procedimento, primeiro crie um objeto Procedure e depois crie um objeto ProcedureCollection a partir do objeto Root da API. Usando ProcedureCollection.create, adicione o novo procedimento ao Snowflake.
O código no exemplo a seguir cria um objeto Procedure que representa um procedimento nomeado my_procedure no banco de dados my_db e no esquema my_schema, com os argumentos especificados, o tipo de retorno e a definição de procedimento SQL:
Como chamar um procedimento¶
É possível chamar um procedimento com um objeto ProcedureResource.
O código no exemplo a seguir obtém o objeto de recurso do procedimento my_procedure(VARCHAR), cria um objeto CallArgumentList e, em seguida, chama o procedimento usando essa lista de argumentos.
Nota
Ao obter um objeto de recurso de procedimento, é necessário especificar a assinatura completa (o nome do procedimento e seus tipos de dados de parâmetro) porque os procedimentos podem ser sobrecarregados.
Como obter detalhes do procedimento¶
É possível obter informações sobre um procedimento chamando o método ProcedureResource.fetch, que retorna um objeto Procedure.
O código no exemplo a seguir busca informações sobre o procedimento my_procedure(VARCHAR) no banco de dados my_db e no esquema my_schema:
Procedimentos de listagem¶
É possível listar procedimentos usando o método ProcedureCollection.iter, que retorna um iterador PagedIter de objetos Procedure.
O código no exemplo a seguir lista procedimentos cujos nomes começam com my no banco de dados my_db e no esquema my_schema e, em seguida, imprime o nome de cada um:
Descarte de um procedimento¶
É possível descartar um procedimento com um objeto ProcedureResource.
O código no exemplo a seguir obtém o objeto de recurso do procedimento my_procedure(VARCHAR) no banco de dados my_db e no esquema my_schema e, em seguida, descarta o procedimento.