UDFs tabulares de SQL (UDTFs)¶
O Snowflake oferece suporte para UDFs de SQL que retornam um conjunto de linhas consistindo de 0, 1, ou várias linhas, cada uma com 1 ou mais colunas. Tais UDFs são chamadas de UDFs tabulares, UDFs de tabela ou, mais frequentemente, UDTFs (funções de tabela definidas pelo usuário).
Uma UDTF pode ser acessada na cláusula FROM de uma consulta.
Sintaxe¶
Para obter uma descrição mais detalhada da sintaxe geral para todas as UDFs, incluindo UDTFs de SQL, consulte CREATE FUNCTION.
Argumentos¶
name:Deve ser um nome válido de objeto de banco de dados que segue as regras descritas em: Requisitos para identificadores.
arguments:Deve ser uma expressão, por exemplo, um nome de coluna, um literal ou uma expressão que possa ser avaliada como um único valor. Normalmente, uma função requer um argumento, que é um nome de coluna. Você pode passar mais de um valor, por exemplo, mais de um nome de coluna, ou um nome de coluna e um ou mais valores literais.
É possível passar uma constante ou nenhum valor. Entretanto, na maioria dos casos, se a entrada for sempre a mesma, a saída será sempre a mesma.
RETURNS TABLE(...)Especifica que a UDF deve retornar uma tabela. Dentro dos parênteses, especifique pares de nomes e tipos para colunas (como descrito abaixo) a serem incluídos na tabela retornada.
output_col_name:O nome de uma coluna de saída a ser incluída na tabela retornada. Deve haver pelo menos uma coluna de saída.
output_col_type:O tipo de dados da coluna de saída.
sql_expression:Uma expressão ou instrução válida de SQL que retorna uma tabela com zero ou mais linhas, cada uma delas com uma ou mais colunas. As saídas devem corresponder ao número e aos tipos de dados especificados na cláusula RETURNS.
Notas de uso¶
O corpo principal (ou seja, a “definição”) de uma UDTF de SQL deve ser uma expressão SELECT.
Embora os delimitadores em torno da
sql_expressiongeralmente sejam aspas simples, você pode usar um par de cifrões$$como delimitador. O delimitador de fechamento deve corresponder ao delimitador de abertura. É conveniente usar um par de cifrões quando asql_expressioncontém aspas simples. Um exemplo usando um par de cifrões está incluído na seção Exemplos abaixo.Se o delimitador for aspas simples e o corpo contiver uma única citação, você poderá escapar a citação única no corpo usando o caractere de barra invertida
\como caractere de escape. Um exemplo está incluído na seção Exemplos abaixo.As colunas definidas na UDTF podem aparecer em qualquer lugar onde uma coluna de tabela normal pode ser usada.
Os tipos de retorno especificados na cláusula RETURNS determinam os nomes e tipos das colunas nos resultados tabulares e devem corresponder aos tipos das expressões nas posições correspondentes da instrução SELECT no corpo da função.
Ao chamar uma UDTF, você deve incluir o nome e os argumentos da UDTF dentro dos parênteses depois da palavra-chave TABLE. Para obter mais informações, consulte Como chamar uma UDTF de SQL.
Nota
Funções tabulares (UDTFs) têm um limite de 500 argumentos de entrada e 500 colunas de saída.
Como chamar uma UDTF de SQL¶
Ao chamar uma UDTF na cláusula FROM de uma consulta, especifique o nome e os argumentos da UDTF dentro dos parênteses que seguem a palavra-chave TABLE.
Em outras palavras, use um formulário como o seguinte para a palavra-chave TABLE quando chamar uma UDTF:
Exemplos de UDTFs de SQL¶
Exemplos básicos¶
Esse é um exemplo artificialmente simples de uma UDTF com uma saída embutida no código. Ele também ilustra o uso de $$ como delimitador:
Este exemplo é semelhante ao exemplo anterior, mas usa aspas simples como delimitador e usa o caractere de escape \ para escapar as aspas simples no corpo da UDTF:
Este é outro exemplo básico de uma UDTF. Ele consulta uma tabela e retorna duas das colunas dessa tabela:
Essa mesma funcionalidade também pode ser implementada usando uma exibição.
Exemplos com junções¶
Criar e usar uma UDTF de SQL que retorna informações do país (COUNTRY_CODE e COUNTRY_NAME) para uma ID de usuário especificada:
Criar uma UDTF de SQL que retorna a cor favorita para um ano específico:
Usar a UDTF em uma consulta:
Usar a UDTF em uma junção com outra tabela; observe que a coluna de junção da tabela é passada como argumento para a função.
Usar uma cláusula WHERE, em vez de ON, para predicatos adicionais:
Usar a UDTF com uma constante em uma expressão de junção; observe que uma cláusula WHERE, no lugar de ON, deve ser usada para condições adicionais de junção: