본문으로 건너뛰기
최종 수정: 에

LINEAR_HISTOGRAM

설명​

LINEAR_HISTOGRAM 함수는 데이터 분포를 나타내는 데 사용됩니다. "동일 너비" 버킷 분할 전략을 사용하여 값의 크기에 따라 데이터를 버킷으로 나눕니다.

구문​

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

매개변수​

매개변수설명
<expr>요약할 표현식입니다. BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, LARGEINT, FLOAT, DOUBLE, DECIMAL을 지원합니다. Doris 4.1 시리즈에서는 4.1.5부터 BOOLEAN 입력을 지원하며, FALSE와 TRUE는 각각 0과 1로 집계됩니다.
<interval>DOUBLE 타입의 버킷 너비입니다. 0보다 커야 합니다.
<offset>선택 사항인 DOUBLE 타입의 오프셋입니다. 기본값은 0이며, [0, interval) 범위에 있어야 합니다.

반환 값​

버킷 경계, 개수 및 누적 개수를 나타내는 JSON 텍스트를 VARCHAR로 반환합니다. 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}]}