メインコンテンツまでスキップ
メインコンテンツまでスキップ

quantileGK

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

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

構文

quantileGK(accuracy, level)(expr)

エイリアス: medianGK.

引数

  • accuracy — 分位数の精度。定数正の整数。精度値が大きいほど誤差が少なくなります。たとえば、accuracy引数が100に設定されている場合、計算された分位数の誤差は高い確率で1%を超えることはありません。計算される分位数の精度とアルゴリズムの計算の複雑さの間にはトレードオフがあります。精度を高くするには、分位数を正確に計算するためにさらに多くのメモリと計算リソースが必要になり、精度引数を小さくすると、計算はより高速でメモリ効率も向上しますが、精度はやや低下します。

  • level — 分位数のレベル。オプションのパラメータ。0から1の範囲の定数浮動小数点数。デフォルト値: 0.5。level=0.5のとき、この関数は中央値を計算します。

  • expr — 数値のデータ型またはDateまたはDateTimeの値となる列の値に対する式。

返される値

  • 指定したレベルと精度の分位数。

タイプ:

  • 数値データタイプの入力の場合はFloat64
  • 入力値がDate型の場合はDate
  • 入力値がDateTime型の場合はDateTime

SELECT quantileGK(1, 0.25)(number + 1)
FROM numbers(1000)

┌─quantileGK(1, 0.25)(plus(number, 1))─┐
│                                    1 │
└──────────────────────────────────────┘

SELECT quantileGK(10, 0.25)(number + 1)
FROM numbers(1000)

┌─quantileGK(10, 0.25)(plus(number, 1))─┐
│                                   156 │
└───────────────────────────────────────┘

SELECT quantileGK(100, 0.25)(number + 1)
FROM numbers(1000)

┌─quantileGK(100, 0.25)(plus(number, 1))─┐
│                                    251 │
└────────────────────────────────────────┘

SELECT quantileGK(1000, 0.25)(number + 1)
FROM numbers(1000)

┌─quantileGK(1000, 0.25)(plus(number, 1))─┐
│                                     249 │
└─────────────────────────────────────────┘

関連情報