Pular para o conteúdo principal

uniqCombined

Introduzido em: v1.1.0 Calcula o número aproximado de valores de argumento distintos. Fornece o resultado de forma determinística (não depende da ordem de processamento da consulta).
Como usa um hash de 32 bits para tipos diferentes de String, o resultado terá um erro muito alto para cardinalidades significativamente maiores que UINT_MAX (o erro aumentará rapidamente após algumas dezenas de bilhões de valores distintos). Se as cardinalidades forem maiores que UINT_MAX, use uniqCombined64.
Em comparação com a função uniq, a função uniqCombined:
  • Consome várias vezes menos memória
  • Calcula com precisão várias vezes maior
  • Em geral, tem desempenho ligeiramente inferior. Em alguns cenários, uniqCombined pode ter desempenho melhor que uniq, por exemplo, com consultas distribuídas que transmitem um grande número de estados de agregação pela rede
Esta função calcula um hash (hash de 64 bits para String e de 32 bits nos demais casos) para 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, é usado um array
  • Quando o tamanho do conjunto aumenta, é usada uma tabela hash
  • Para um número maior de elementos, é usado HyperLogLog, que ocupará uma quantidade fixa de memória
Sintaxe
uniqCombined(HLL_precision)(x[, ...])
uniqCombined(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 corresponde, 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 Uso básico
Query
SELECT uniqCombined(number) FROM numbers(1e6);
Response
┌─uniqCombined(number)─┐
│              1001148 │
└──────────────────────┘
Com precisão personalizada
Query
SELECT uniqCombined(15)(number) FROM numbers(1e5);
Response
┌─uniqCombined(15)(number)─┐
│                   100768 │
└──────────────────────────┘
Veja também
Última modificação em 10 de junho de 2026