Перейти к основному содержимому

percentile_approx_weight

Возвращает приближение p-го процентиля с весом. percentile_approx_weight является взвешенной версией PERCENTILE_APPROX и позволяет пользователям указывать вес (константное значение или числовой столбец) для каждого входного значения.

Эта функция использует память фиксированного размера, поэтому для столбцов с высокой кардинальностью может использоваться меньше памяти. Она также может использоваться для вычисления статистик, таких как tp99.

Синтаксис

DOUBLE PERCENTILE_APPROX_WEIGHT(expr, BIGINT weight, DOUBLE p[, DOUBLE compression])
  • expr: Столбец, для которого вычисляется процентиль.
  • pth : Значение процентиля. Диапазон: [0, 1]. Например, 0.99 означает 99-й процентиль.
  • weight : Столбец веса. Должен быть положительным константным числом или столбцом.
  • compression : (Необязательно) Коэффициент сжатия. Диапазон: [2048, 10000]. Чем больше значение, тем выше точность, больше потребление памяти и дольше время вычисления. Если этот параметр не указан или значение выходит за пределы диапазона [2048, 10000], используется значение по умолчанию 10000.

Примеры

CREATE TABLE t1 (
c1 int,
c2 double,
c3 tinyint,
c4 int,
c5 bigint,
c6 largeint,
c7 string,
c8 double,
c9 date,
c10 datetime,
c11 array<int>,
c12 map<double, double>,
c13 struct<a bigint, b double>
)
DUPLICATE KEY(c1)
DISTRIBUTED BY HASH(c1)
BUCKETS 1
PROPERTIES ("replication_num" = "1");
insert into t1
select generate_series, generate_series, 11, 111, 1111, 11111, "111111", 1.1, "2024-09-01", "2024-09-01 18:00:00", [1, 2, 3], map(1, 5.5), row(100, 100)
from table(generate_series(1, 50000, 3));
-- использование константного значения в качестве веса
mysql> select percentile_approx_weighted(c1, 1, 0.9) from t1;
+----------------------------------------+
| percentile_approx_weighted(c1, 1, 0.9) |
+----------------------------------------+
| 45000.39453125 |
+----------------------------------------+
1 row in set (0.07 sec)
-- использование числового столбца в качестве веса
mysql> select percentile_approx_weighted(c2, c1, 0.5) from t1;
+-----------------------------------------+
| percentile_approx_weighted(c2, c1, 0.5) |
+-----------------------------------------+
| 35355.9375 |
+-----------------------------------------+
1 row in set (0.07 sec)
-- использование веса и сжатия для вычисления процентиля
mysql> select percentile_approx_weighted(c2, c1, 0.5, 10000) from t1;
+------------------------------------------------+
| percentile_approx_weighted(c2, c1, 0.5, 10000) |
+------------------------------------------------+
| 35355.9375 |
+------------------------------------------------+
1 row in set (0.09 sec)

Ключевые слова

PERCENTILE_APPROX_WEIGHT,PERCENTILE_APPROX,PERCENTILE,APPROX