メインコンテンツへスキップ
メインコンテンツへスキップ

quantileGK

quantileGK

導入バージョン: v23.4

数値データ系列のquantileを、Greenwald-Khanna アルゴリズムを用いて計算します。

Greenwald-Khanna アルゴリズムは、データストリームに対する分位数を高効率に計算するためのアルゴリズムです。 2001 年に Michael Greenwald と Sanjeev Khanna によって提案されました。 大量のデータストリームに対してリアルタイムに正確な分位数を計算する必要があるデータベースやビッグデータシステムで広く利用されています。 このアルゴリズムは非常に効率的で、必要な空間計算量は O(log n)、1 要素あたりの時間計算量は O(log log n) です(ここで n は入力のサイズ)。 また、精度も非常に高く、高い確率で分位数の近似値を提供します。

quantileGK は、近似分位数結果の精度をユーザーが制御できる点で、ClickHouse の他の分位数関数とは異なります。

構文

quantileGK(accuracy, level)(expr)

別名: medianGK

パラメータ

  • accuracy — 分位数の精度を表します。正の整数の定数です。値が大きいほど誤差は小さくなります。例えば、accuracy 引数を 100 に設定した場合、計算される分位数の誤差は高い確率で 1% 以下になります。計算される分位数の精度とアルゴリズムの計算量との間にはトレードオフがあります。accuracy を大きくすると分位数を正確に計算するためにより多くのメモリと計算リソースが必要になりますが、accuracy を小さくすると計算はより高速かつメモリ効率が良くなる一方で、精度はやや低くなります。UInt*
  • level — 省略可能。分位数のレベル。0 から 1 の範囲の浮動小数点数の定数です。デフォルト値: 0.5。level=0.5 の場合、この関数は median を計算します。Float*

引数

  • expr — 列の値に対する式であり、その結果は数値データ型、Date または DateTime になります。(U)Int* または Float* または Decimal* または Date または DateTime

戻り値

指定されたレベルと精度の分位数を返します。Float64 または Date または DateTime

異なる精度レベルでの分位数の計算

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

高精度な分位数

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

関連項目