quantilesGK
Introduzido em: v23.4.0
Calcula múltiplos quantis de uma sequência de dados numéricos em diferentes níveis simultaneamente usando o algoritmo Greenwald-Khanna.
Esta função funciona de forma semelhante a quantileGK, mas permite calcular vários níveis de quantil em uma única passagem, o que é mais eficiente do que chamar funções de quantil individualmente.
O algoritmo Greenwald-Khanna é usado para calcular quantis em um fluxo de dados de forma altamente eficiente. Ele foi introduzido por Michael Greenwald e Sanjeev Khanna em 2001. O algoritmo é altamente eficiente, usando apenas espaço O(log n) e tempo O(log log n) por item (em que n é o tamanho da entrada). Ele também é altamente preciso, fornecendo valores de quantil aproximados com precisão ajustável.
Sintaxe
quantilesGK(accuracy, level1, level2, ...)(expr)Parâmetros
accuracy— Precisão dos quantis. Inteiro positivo constante. Quanto maior o valor de precisão, menor o erro. Por exemplo, se o argumentoaccuracyfor definido como 100, os quantis calculados terão erro não superior a 1% com alta probabilidade. Há um equilíbrio entre a precisão dos quantis calculados e a complexidade computacional do algoritmo.UInt*level— Níveis dos quantis. Um ou mais números de ponto flutuante constantes entre 0 e 1.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
Array de quantis dos níveis especificados, na mesma ordem em que os níveis foram especificados. Para tipos de dados numéricos, o formato de saída corresponde ao formato de entrada. Array((U)Int*) ou Array(Int128) ou Array(UInt128) ou Array(Int256) ou Array(UInt256) ou Array(Float*) ou Array(Decimal*) ou Array(Date) ou Array(DateTime) ou Array(DateTime64)
Exemplos
Cálculo de múltiplos quantis com o algoritmo GK
SELECT quantilesGK(1, 0.25, 0.5, 0.75)(number + 1) FROM numbers(1000);┌─quantilesGK(1, 0.25, 0.5, 0.75)(plus(number, 1))─┐
│ [1,1,1] │
└──────────────────────────────────────────────────┘Quantis mais precisos
SELECT quantilesGK(100, 0.25, 0.5, 0.75)(number + 1) FROM numbers(1000);┌─quantilesGK(100, 0.25, 0.5, 0.75)(plus(number, 1))─┐
│ [251,498,741] │
└────────────────────────────────────────────────────┘