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 argumentoaccuracyfor 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 deaccuracypermite 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. Emlevel=0.5, a função calcula a mediana.Float*
Argumentos
expr— Expressão sobre os valores da coluna que resulta em tipos de dados numéricos,Date,DateTimeouDateTime64.(U)Int*ouInt128ouUInt128ouInt256ouUInt256ouFloat*ouDecimal*ouDateouDateTimeouDateTime64
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