Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

quantileGK

quantileGK

Introduzido em: v23.4.0

Calcula o quantile de uma sequência de dados numéricos usando o algoritmo Greenwald-Khanna.

O algoritmo Greenwald-Khanna é usado para calcular quantis em um fluxo de dados de forma altamente eficiente. Ele foi apresentado por Michael Greenwald e Sanjeev Khanna em 2001. É amplamente usado em bancos de dados e sistemas de big data nos quais é necessário calcular quantis precisos em tempo real em grandes fluxos de dados. O algoritmo é muito eficiente, exigindo apenas espaço O(log n) e tempo O(log log n) por item (em que n é o tamanho da entrada). Ele também é bastante preciso, fornecendo um valor de quantil aproximado com alta probabilidade.

quantileGK é diferente de outras funções de quantil no ClickHouse porque permite ao usuário controlar a precisão do resultado aproximado.

Sintaxe

quantileGK(accuracy, level)(expr)

Aliases: medianGK

Parâmetros

  • accuracy — Precisão do quantil. Inteiro positivo constante. Um valor maior de precisão significa menos erro. Por exemplo, se o argumento accuracy for definido como 100, o quantil calculado terá erro não superior a 1%, com alta probabilidade. Há um compromisso entre a precisão dos quantis calculados e a complexidade computacional do algoritmo. Uma precisão maior requer mais memória e recursos computacionais para calcular o quantil com exatidão, enquanto um valor menor de accuracy permite um cálculo mais rápido e mais eficiente em termos de memória, mas com precisão ligeiramente menor. UInt*
  • level — Opcional. Nível do quantil. Número de ponto flutuante constante de 0 a 1. Valor padrão: 0.5. Em level=0.5, a função calcula a mediana. Float*

Argumentos

Valor retornado

Retorna o quantil com o nível e a precisão especificados. Para tipos de dados numéricos, o formato de saída corresponde ao formato de entrada. (U)Int* ou Int128 ou UInt128 ou Int256 ou UInt256 ou Float* ou Decimal* ou Date ou DateTime ou DateTime64

Exemplos

Calculando o quantil com diferentes níveis de precisão

SELECT quantileGK(1, 0.25)(number + 1) FROM numbers(1000);
┌─quantileGK(1, 0.25)(plus(number, 1))─┐
│                                    1 │
└──────────────────────────────────────┘

Quantil com maior precisão

SELECT quantileGK(100, 0.25)(number + 1) FROM numbers(1000);
┌─quantileGK(100, 0.25)(plus(number, 1))─┐
│                                    251 │
└────────────────────────────────────────┘

Veja também

Navigation