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

LINEAR_HISTOGRAM

Описание​

Функция LINEAR_HISTOGRAM используется для описания распределения данных. Она группирует данные в интервалы равной ширины в зависимости от величины значений.

Синтаксис​

LINEAR_HISTOGRAM(<expr>, <interval> [, <offset>])

Параметры​

ПараметрОписание
<expr>Выражение для обобщения данных. Поддерживаются типы BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, LARGEINT, FLOAT, DOUBLE и DECIMAL. В линейке Doris 4.1 входные значения BOOLEAN поддерживаются начиная с версии 4.1.5; FALSE и TRUE учитываются как 0 и 1.
<interval>Ширина интервала типа DOUBLE. Должна быть больше 0.
<offset>Необязательное смещение типа DOUBLE. По умолчанию равно 0 и должно находиться в диапазоне [0, interval).

Возвращаемое значение​

Возвращает значение VARCHAR, содержащее текст JSON с границами интервалов, числом элементов и накопленным числом элементов. Входные значения NULL игнорируются. Если все входные значения равны NULL или входных строк нет, возвращает {"num_buckets":0,"buckets":[]}.

Пример​

-- setup
create table histogram_test(
a int
) distributed by hash(a) buckets 1
properties ("replication_num"="1");
insert into histogram_test values
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (null);
select linear_histogram(a, 2) from histogram_test;
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| linear_histogram(a, 2) |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| {"num_buckets":6,"buckets":[{"lower":0.0,"upper":2.0,"count":2,"acc_count":2},{"lower":2.0,"upper":4.0,"count":2,"acc_count":4},{"lower":4.0,"upper":6.0,"count":2,"acc_count":6},{"lower":6.0,"upper":8.0,"count":2,"acc_count":8},{"lower":8.0,"upper":10.0,"count":2,"acc_count":10},{"lower":10.0,"upper":12.0,"count":2,"acc_count":12}]} |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
select linear_histogram(a, 2, 1) from histogram_test;
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| linear_histogram(a, 2, 1) |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| {"num_buckets":7,"buckets":[{"lower":-1.0,"upper":1.0,"count":1,"acc_count":1},{"lower":1.0,"upper":3.0,"count":2,"acc_count":3},{"lower":3.0,"upper":5.0,"count":2,"acc_count":5},{"lower":5.0,"upper":7.0,"count":2,"acc_count":7},{"lower":7.0,"upper":9.0,"count":2,"acc_count":9},{"lower":9.0,"upper":11.0,"count":2,"acc_count":11},{"lower":11.0,"upper":13.0,"count":1,"acc_count":12}]} |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
select linear_histogram(a, 2, 1) from histogram_test where a is null;
+--------------------------------+
| linear_histogram(a, 2, 1) |
+--------------------------------+
| {"num_buckets":0,"buckets":[]} |

Описание полей:

  • num_buckets: Число интервалов.
  • buckets: Интервалы гистограммы.
    • lower: Нижняя граница (включительно).
    • upper: Верхняя граница (не включается).
    • count: Число элементов в интервале.
    • acc_count: Накопленное число элементов до этого интервала включительно.

Для входных значений BOOLEAN используются интервалы для 0 и 1; NULL не учитывается при подсчёте:

SELECT LINEAR_HISTOGRAM(b, 1.0)
FROM (SELECT TRUE AS b UNION ALL SELECT FALSE UNION ALL SELECT TRUE UNION ALL SELECT NULL) t;
{"num_buckets":2,"buckets":[{"lower":0.0,"upper":1.0,"count":1,"acc_count":1},{"lower":1.0,"upper":2.0,"count":2,"acc_count":3}]}