- 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:
Sintaxe¶
Função de agregação
APPROX_COUNT_DISTINCT( [ DISTINCT ] <expr1> [ , ... ] )
APPROX_COUNT_DISTINCT(*)
Função de janela
APPROX_COUNT_DISTINCT( [ DISTINCT ] <expr1> [ , ... ] ) OVER ( [ PARTITION BY <expr2> ] )
APPROX_COUNT_DISTINCT(*) OVER ( [ PARTITION BY <expr2> ] )
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.*)
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%')
EXCLUDE filtra nomes de coluna que não correspondem à coluna ou colunas especificadas. Por exemplo:
(* EXCLUDE col1) (* EXCLUDE (col1, col2))
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 tabelamytable
:(mytable.* ILIKE 'col1%')
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;
+----------+-------------------+--------------------------+--------+
| COUNT(I) | COUNT(DISTINCT I) | APPROX_COUNT_DISTINCT(I) | HLL(I) |
|----------+-------------------+--------------------------+--------|
| 1024 | 1024 | 1007 | 1007 |
+----------+-------------------+--------------------------+--------+