- Categorias:
QUALIFY¶
Em uma instrução SELECT, a cláusula QUALIFY filtra os resultados das funções de janela.
QUALIFY faz com as funções de janela o que HAVING faz com as funções agregadas e as cláusulas GROUP BY.
Na ordem de execução de uma consulta, QUALIFY é, portanto, avaliado após o cálculo das funções da janela. Tipicamente, as cláusulas de uma instrução SELECT são avaliadas na ordem mostrada abaixo:
FROM
WHERE
GROUP BY
HAVING
WINDOW
QUALIFY
DISTINCT
ORDER BY
LIMIT
Sintaxe¶
A forma geral de uma instrução com QUALIFY é semelhante à seguinte (algumas variações na ordem são permitidas, mas não são mostradas):
Parâmetros¶
column_listIsso geralmente segue as regras da cláusula de projeção de uma instrução SELECT.
data_sourceA fonte de dados é geralmente uma tabela, mas pode ser outra fonte de dados semelhante a uma tabela, como uma exibição, UDTF (função de tabela definida pelo usuário) etc.
predicateO predicado é uma expressão que filtra o resultado depois que os agregados e as funções de janela são computados. O predicado deve ser semelhante a uma cláusula HAVING, mas sem a palavra-chave HAVING. Além disso, o predicado também pode conter funções de janela.
Consulte a seção Exemplos (neste tópico) para obter exemplos.
Notas de uso¶
A cláusula QUALIFY exige que pelo menos uma função de janela seja especificada em pelo menos uma das seguintes cláusulas da instrução SELECT:
A lista de colunas SELECT.
O predicado do filtro da cláusula QUALIFY.
Exemplos de cada um deles são mostrados na seção Exemplos abaixo.
As expressões na lista SELECT, incluindo funções de janela, podem ser referidas pelo alias da coluna definido na lista SELECT.
QUALIFY oferece suporte a agregados e subconsultas no predicado. Para os agregados, aplicam-se as mesmas regras que para a cláusula HAVING.
A palavra QUALIFY é uma palavra reservada.
A sintaxe Snowflake para QUALIFY não faz parte da norma ANSI.
Exemplos¶
A cláusula QUALIFY simplifica as consultas que exigem filtragem sobre o resultado das funções de janela. Sem QUALIFY, a filtragem exige um ninho. O exemplo abaixo usa a função ROW_NUMBER() para retornar apenas a primeira linha em cada partição.
Criar e carregar uma tabela:
Esta consulta utiliza o aninhamento em vez de QUALIFY:
Esta consulta utiliza QUALIFY:
Você também pode usar QUALIFY para funções de janela de referência que estão na lista de colunas SELECT:
Você pode ver como o QUALIFY assume a função de um filtro removendo-o da consulta anterior e comparando a saída:
A cláusula QUALIFY também pode ser combinada com as funções de agregação e as subconsultas no predicado. Nesse tipo de consulta, HAVING filtra as linhas após a agregação de GROUP BY, enquanto QUALIFY filtra as linhas após a computação das funções de janela. Ambas as cláusulas podem aparecer juntas quando uma consulta exige os dois tipos de filtragem. Por exemplo: