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

quantileTiming

quantileTiming

導入バージョン: v1.1

指定された精度で数値データシーケンスの分位数を計算します。

結果は決定的であり(クエリの処理順序には依存しません)、Web ページの読み込み時間やバックエンドのレスポンス時間のような分布を表すシーケンスでの利用に最適化されています。

1 つのクエリ内で複数の quantile* 関数を異なるレベルで使用する場合、内部状態は結合されません(つまり、そのクエリは本来可能なほど効率的には動作しません)。 このような場合は、quantiles 関数を使用してください。

精度

次の場合、計算結果は正確です:

  • 値の総数が 5670 を超えない場合。
  • 値の総数が 5670 を超えるが、ページ読み込み時間が 1024ms 未満の場合。

それ以外の場合、計算結果は 16ms の倍数のうち最も近い値に丸められます。

注記

ページ読み込み時間の分位数を計算する場合、この関数は quantile よりも効率的かつ正確です。

注記

関数に値が 1 つも渡されない場合(quantileTimingIf を使用する場合)、NaN が返されます。これは、このケースを結果が 0 となるケースと区別するためです。NaN 値のソートに関する注意点については、ORDER BY 句 を参照してください。

構文

quantileTiming(level)(expr)

エイリアス: medianTiming

パラメータ

  • level — 省略可能。分位数のレベル。0 から 1 までの定数浮動小数点数。level の値としては [0.01, 0.99] の範囲の使用を推奨します。デフォルト値: 0.5。level=0.5 の場合、この関数は中央値を計算します。Float*

引数

  • expr — カラム値に対する式で、Float* 型の数値を返します。負の値が関数に渡された場合、その動作は未定義です。値が 30,000(ページ読み込み時間が 30 秒を超える場合)より大きい場合、30,000 とみなされます。Float*

戻り値

指定されたレベルの分位数。関数に値が 1 つも渡されない場合(quantileTimingIf を使用しているとき)、NaN が返されます。これは、結果がゼロになるケースと区別することを目的としています。Float32

タイミング分位数の計算

CREATE TABLE t (response_time UInt32) ENGINE = Memory;
INSERT INTO t VALUES (72), (112), (126), (145), (104), (242), (313), (168), (108);

SELECT quantileTiming(response_time) FROM t;
┌─quantileTiming(response_time)─┐
│                           126 │
└───────────────────────────────┘

関連項目