Categorias:

Funções de agregação (Cardinality Estimation) , Funções de janela

APPROX_COUNT_DISTINCT

Utiliza HyperLogLog para retornar uma aproximação da cardinalidade distinta da entrada (isto é, HLL(col1, col2, ... ) devolve uma aproximação de COUNT(DISTINCT col1, col2, ... )).

Para obter mais informações sobre HyperLogLog, consulte Estimativa do número de valores distintos.

Aliases:

HLL.

Consulte também:

HLL_ACCUMULATE , HLL_COMBINE , HLL_ESTIMATE

Sintaxe

Função de agregação

APPROX_COUNT_DISTINCT( [ DISTINCT ] <expr1>  [ , ... ] )

APPROX_COUNT_DISTINCT(*)
Copy

Função de janela

APPROX_COUNT_DISTINCT( [ DISTINCT ] <expr1>  [ , ... ] ) OVER ( [ PARTITION BY <expr2> ] )

APPROX_COUNT_DISTINCT(*) OVER ( [ PARTITION BY <expr2> ] )
Copy

Argumentos

expr1

Esta é a expressão pela qual você quer saber o número de valores distintos.

expr2

Esta é a expressão opcional usada para agrupar linhas em partições.

*

Retorna uma aproximação do número total de registros, excluindo registros com valores NULL.

Ao passar um curinga para a função, você pode qualificar o curinga com o nome ou alias da tabela. Por exemplo, para passar todas as colunas da tabela nomeadas mytable, especifique o seguinte:

(mytable.*)
Copy

Também é possível usar as palavras-chave ILIKE e EXCLUDE para filtrar:

  • ILIKE filtra nomes de colunas que correspondem ao padrão especificado. Apenas um padrão é permitido. Por exemplo:

    (* ILIKE 'col1%')
    
    Copy
  • EXCLUDE filtra nomes de coluna que não correspondem à coluna ou colunas especificadas. Por exemplo:

    (* EXCLUDE col1)
    
    (* EXCLUDE (col1, col2))
    
    Copy

Os qualificadores são válidos quando você usa essas palavras-chave. O exemplo a seguir usa a palavra-chave ILIKE para filtrar todas as colunas que correspondem ao padrão col1% na tabela mytable:

(mytable.* ILIKE 'col1%')
Copy

As palavras-chave ILIKE e EXCLUDE não podem ser combinadas em uma única chamada de função.

Para esta função, as palavras-chave ILIKE e EXCLUDE são válidas somente em uma lista SELECT ou cláusula GROUP BY.

Para obter mais informações sobre as palavras-chave ILIKE e EXCLUDE, consulte a seção «Parâmetros» em SELECT.

Retornos

O tipo de dados do valor retornado é INTEGER.

Notas de uso

  • Embora o cálculo seja aproximado, ele é determinante. Quando esta função é chamada com os mesmos dados de entrada, esta função retorna os mesmos resultados.

  • Para obter mais informações sobre valores NULL e funções agregadas, consulte Funções de agregação e valores NULL.

  • Quando esta função é chamada como uma função de janela, ela não oferece suporte para:

    • Uma cláusula ORDER BY dentro da cláusula OVER.

    • Quadros de janela explícitos.

Exemplos

Este exemplo mostra como usar APPROX_COUNT_DISTINCT e seu alias HLL. Este exemplo chama tanto COUNT(DISTINCT i) quanto APPROX_COUNT_DISTINCT(i) para enfatizar que essas duas funções nem sempre coincidem exatamente.

A saída exata da seguinte consulta pode variar porque APPROX_COUNT_DISTINCT retorna uma aproximação, não um valor exato.

SELECT COUNT(i), COUNT(DISTINCT i), APPROX_COUNT_DISTINCT(i), HLL(i)
  FROM sequence_demo;
Copy
+----------+-------------------+--------------------------+--------+
| COUNT(I) | COUNT(DISTINCT I) | APPROX_COUNT_DISTINCT(I) | HLL(I) |
|----------+-------------------+--------------------------+--------|
|     1024 |              1024 |                     1007 |   1007 |
+----------+-------------------+--------------------------+--------+