Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

uniqCombined64

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).

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
Detalhes de implementação

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

SELECT uniqCombined64(number) FROM numbers(1e10);
┌─uniqCombined64(number)─┐
│             9998568925 │
└────────────────────────┘

Comparação com uniqCombined

-- uniqCombined64 with large dataset
SELECT uniqCombined64(number) FROM numbers(1e10);

-- uniqCombined with same dataset shows poor approximation
SELECT uniqCombined(number) FROM numbers(1e10);
┌─uniqCombined64(number)─┐
│             9998568925 │
└────────────────────────┘
┌─uniqCombined(number)─┐
│           5545308725 │
└──────────────────────┘

Veja também

Navigation