Pular para o conteúdo principal

uniqCombined64

Introduzido em: v20.1.0 Calcula o número aproximado de valores de argumento distintos. É o mesmo que uniqCombined, mas usa um hash de 64 bits para todos os tipos de dados, em vez de apenas para o tipo de dado String. Esta função fornece o resultado de forma determinística (não depende da ordem de processamento da consulta).
Como usa hash de 64 bits para todos os tipos, o resultado não apresenta erro muito alto para cardinalidades significativamente maiores que UINT_MAX, como acontece com uniqCombined, que usa um hash de 32 bits para tipos que não são String.
Em comparação com a função uniq, a função uniqCombined64:
  • Consome várias vezes menos memória
  • Calcula com precisão várias vezes maior
Esta função calcula um hash de 64 bits para todos os tipos de dados de todos os parâmetros da agregação e, em seguida, o usa nos cálculos. Ela usa uma combinação de três algoritmos: array, tabela hash e HyperLogLog com uma tabela de correção de erros:
  • Para um pequeno número de elementos distintos, usa-se um array
  • Quando o tamanho do conjunto é maior, usa-se uma tabela hash
  • Para um número maior de elementos, usa-se HyperLogLog, que ocupará uma quantidade fixa de memória
Sintaxe
uniqCombined64(HLL_precision)(x[, ...])
uniqCombined64(x[, ...])
Parâmetros
  • HLL_precision — Opcional. O logaritmo de base 2 do número de células no HyperLogLog. O valor padrão é 17, o que equivale, na prática, a 96 KiB de espaço (2^17 células, 6 bits cada). Intervalo: [12, 20]. UInt8
Argumentos Valor retornado Retorna um número do tipo UInt64 que representa o número aproximado de valores de argumento distintos. UInt64 Exemplos Exemplo com grande volume de dados
Query
SELECT uniqCombined64(number) FROM numbers(1e10);
Response
┌─uniqCombined64(number)─┐
│             9998568925 │
└────────────────────────┘
Comparação com uniqCombined
Query
-- uniqCombined64 com conjunto de dados grande
SELECT uniqCombined64(number) FROM numbers(1e10);

-- uniqCombined com o mesmo conjunto de dados apresenta aproximação ruim
SELECT uniqCombined(number) FROM numbers(1e10);
Response
┌─uniqCombined64(number)─┐
│             9998568925 │ -- 10,00 bilhões
└────────────────────────┘
┌─uniqCombined(number)─┐
│           5545308725 │ -- 5,55 bilhões
└──────────────────────┘
Veja também
Última modificação em 10 de junho de 2026