quantileGK
導入バージョン: v23.4.0
Greenwald-Khanna アルゴリズムを使用して、数値データ列の quantile を計算します。
Greenwald-Khanna アルゴリズムは、データストリームに対する分位点を非常に効率よく計算するためのアルゴリズムです。 このアルゴリズムは、2001 年に Michael Greenwald と Sanjeev Khanna によって提案されました。 大規模なデータストリームに対して正確な分位点をリアルタイムで計算する必要があるデータベースやビッグデータシステムで広く利用されています。 このアルゴリズムは非常に効率的で、各項目あたり O(log n) の空間と O(log log n) の時間しか必要としません (ここで、n は入力サイズです) 。 また、精度も非常に高く、高い確率で近似的な分位点の値を返します。
quantileGK は ClickHouse の他の quantile 関数とは異なり、近似分位点の精度をユーザーが制御できます。
構文
quantileGK(accuracy, level)(expr)別名: medianGK
パラメータ
accuracy— 分位点の精度を指定します。正の定数整数です。accuracyの値が大きいほど、誤差は小さくなります。たとえば、accuracy引数を 100 に設定すると、高い確率で、計算される分位点の誤差は 1% 以下になります。計算される分位点の精度と、アルゴリズムの計算の複雑さにはトレードオフがあります。accuracyを大きくすると、分位点を正確に計算するために、より多くのメモリとコンピュートリソースが必要になります。一方、accuracy引数を小さくすると、精度はわずかに低下するものの、より高速でメモリ効率の高い計算が可能です。UInt*level— 任意。分位点のレベルです。0 から 1 までの定数浮動小数点数。デフォルト値: 0.5。level=0.5の場合、この関数は中央値を計算します。Float*
引数
expr— カラム値に対する式で、数値データ型、Date、DateTime、またはDateTime64になります。(U)Int*またはInt128またはUInt128またはInt256またはUInt256またはFloat*またはDecimal*またはDateまたはDateTimeまたはDateTime64
戻り値
指定したレベルと精度の分位点を返します。数値データ型の場合、出力フォーマットは入力フォーマットと一致します。(U)Int* または Int128 または UInt128 または Int256 または UInt256 または Float* または Decimal* または Date または DateTime または DateTime64
例
異なる精度レベルで分位点を計算する
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 │
└────────────────────────────────────────┘関連項目