Criação de uma UDF

Você cria uma função definida pelo usuário (UDF) ou uma função de tabela definida pelo usuário (UDTF) com um comando CREATE FUNCTION que especifica as propriedades da função, incluindo o manipulador a ser usado para sua lógica.

Este tópico lista as etapas para criar uma UDF. Para obter exemplos, consulte a referência CREATE FUNCTION.

Using the CREATE FUNCTION Statement to Associate the Handler Method With the UDF Name

Você cria uma UDF com os seguintes passos:

  1. Escreva o código do manipulador que executa quando a UDF é chamada.

    Você pode usar uma das linguagens do manipulador suportadas. Para obter mais informações, consulte Linguagens suportadas.

  2. Escolha se você vai manter o código do manipulador em linha com a instrução SQL CREATE FUNCTION ou se vai se referir a ele em um estágio.

    Cada um tem suas vantagens. Para obter mais informações, consulte Como manter o código do manipulador inline ou em um estágio.

  3. Execute uma instrução CREATE FUNCTION em SQL, especificando as propriedades da função.

    O código no exemplo a seguir cria uma UDF chamada function_name com o manipulador em linha HandlerClass.handlerMethod.

    create function function_name(x integer, y integer)
      returns integer
      language java
      handler='HandlerClass.handlerMethod'
      target_path='@~/HandlerCode.jar'
      as
      $$
          class HandlerClass {
              public static int handlerMethod(int x, int y) {
                return x + y;
              }
          }
      $$;
    
    Copy

    A seguir descrevemos algumas das propriedades necessárias ou tipicamente utilizadas na criação de uma função.

    • Nome da função.

      O nome da UDF não precisa corresponder ao nome do manipulador. A instrução CREATE FUNCTION associa o nome da UDF com o manipulador.

      Para saber mais sobre restrições de nome e convenções, consulte Como nomear e sobrecarregar procedimentos e UDFs.

    • Argumentos de função, se houver.

      Consulte Definição de argumentos para UDFs e procedimentos armazenados.

    • Tipo de retorno com a cláusula RETURNS.

      Para um valor de retorno escalar, a cláusula RETURNS especificará um único tipo de retorno; para um valor de retorno tabular, RETURNS especificará a palavra-chave TABLE, especificando o tipo de coluna no valor de retorno tabular.

      Para obter mais informações sobre como o Snowflake mapeia tipos de dados SQL para os tipos de dados do manipulador, consulte Como nomear e sobrecarregar procedimentos e UDFs.

    • Nome do manipulador com a cláusula HANDLER.

      Quando necessário, este é o nome da classe ou método que contém o código que executa quando a UDF é chamada. Você precisa especificar um nome de manipulador somente para manipuladores escritos em Java e Python. Para manipuladores JavaScript e SQL, todos os códigos especificados em linha serão executados como manipuladores.

      A tabela a seguir descreve a forma do valor da cláusula HANDLER com base na linguagem do manipulador e no tipo de função.

      Linguagem do manipulador

      UDF

      UDTF

      Java

      Nome do método e classe

      Por exemplo: MyClass.myMethod

      Somente o nome da classe. O nome do método do manipulador é pré-determinado pela interface necessária.

      JavaScript

      Nenhum.

      Nenhum.

      Python

      Nome do método e classe se for usada uma classe; caso contrário, nome da função.

      Por exemplo: module.my_function ou my_function

      Somente o nome da classe. O nome do método do manipulador é pré-determinado pela interface necessária.

      SQL

      Nenhum.

      Nenhum.

    • Dependências exigidas pelo manipulador, se houver, usando as cláusulas IMPORTS ou PACKAGES.

      Para saber mais sobre como disponibilizar dependências para seu manipulador, consulte Disponibilização das dependências para seus códigos.

    • Linguagem do manipulador com a cláusula RUNTIME_VERSION.

      Quando a linguagem do manipulador for Java ou Python, use a cláusula RUNTIME_VERSION para especificar qual versão suportada em tempo de execução deve ser usada. Omitir a cláusula levará o Snowflake a usar o padrão, que pode mudar no futuro.