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

WIDTH_BUCKET

설명​

히스토그램 범위를 동일한 크기의 구간으로 나누어 등간격 히스토그램을 생성하고, 계산 후 표현식의 값이 속하는 버킷 번호를 반환합니다. 특수한 경우는 다음과 같습니다:

  • 함수는 정수 값 또는 NULL을 반환합니다(입력 중 하나라도 NULL이면 NULL을 반환합니다).

구문​

WIDTH_BUCKET(<expr>, <min_value>, <max_value>, <num_buckets>)

매개변수​

매개변수설명
<expr>히스토그램을 생성하는 데 사용할 표현식입니다. 이 표현식의 평가 결과는 숫자 값이거나 숫자 값으로 암시적으로 변환할 수 있는 값이어야 합니다. 값의 범위는 -(2^53 - 1)부터 2^53 - 1까지여야 합니다(양 끝값 포함).
<min_value>표현식에 허용되는 범위의 최솟값입니다. 이 매개변수는 숫자여야 하며 <max_value>와 같아서는 안 됩니다. 범위는 -(2^53 - 1)부터 2^53 - 1까지여야 합니다(양 끝값 포함). 또한 최댓값과 최솟값의 차이는 2^53보다 작아야 합니다(예: abs(max_value - min_value) < 2^53)
<max_value>표현식에 허용되는 범위의 최댓값입니다. 이 매개변수는 숫자여야 하며 <min_value>와 같아서는 안 됩니다. 범위는 -(2^53 - 1)부터 2^53 - 1까지여야 합니다(양 끝값 포함). 또한 최댓값과 최솟값의 차이는 2^53보다 작아야 합니다(예: abs(max_value - min_value) < 2^53)
<num_buckets>버킷 수입니다. 양의 정수여야 합니다. 함수는 표현식의 값을 각 버킷에 할당하고 해당 버킷 번호를 반환합니다.

반환값​

표현식의 값이 속하는 버킷 번호를 반환합니다. 표현식의 값이 범위를 벗어나면 다음 규칙에 따라 반환합니다:

  • 표현식의 값이 min_value보다 작으면 0을 반환합니다.
  • 표현식의 값이 max_value보다 크거나 같으면 num_buckets + 1을 반환합니다.
  • 매개변수 중 하나라도 null이면 null을 반환합니다.

예제​

DROP TABLE IF EXISTS width_bucket_test;

CREATE TABLE IF NOT EXISTS width_bucket_test (
`k1` int NULL COMMENT "",
`v1` date NULL COMMENT "",
`v2` double NULL COMMENT "",
`v3` bigint NULL COMMENT ""
) ENGINE=OLAP
DUPLICATE KEY(`k1`)
DISTRIBUTED BY HASH(`k1`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"storage_format" = "V2"
);

INSERT INTO width_bucket_test VALUES
(1, "2022-11-18", 290000.00, 290000),
(2, "2023-11-18", 320000.00, 320000),
(3, "2024-11-18", 399999.99, 399999),
(4, "2025-11-18", 400000.00, 400000),
(5, "2026-11-18", 470000.00, 470000),
(6, "2027-11-18", 510000.00, 510000),
(7, "2028-11-18", 610000.00, 610000),
(8, null, null, null);
SELECT * FROM width_bucket_test ORDER BY k1;                                      
+------+------------+-----------+--------+
| k1 | v1 | v2 | v3 |
+------+------------+-----------+--------+
| 1 | 2022-11-18 | 290000 | 290000 |
| 2 | 2023-11-18 | 320000 | 320000 |
| 3 | 2024-11-18 | 399999.99 | 399999 |
| 4 | 2025-11-18 | 400000 | 400000 |
| 5 | 2026-11-18 | 470000 | 470000 |
| 6 | 2027-11-18 | 510000 | 510000 |
| 7 | 2028-11-18 | 610000 | 610000 |
| 8 | NULL | NULL | NULL |
+------+------------+-----------+--------+
SELECT k1, v1, v2, v3, width_bucket(v1, date('2023-11-18'), date('2027-11-18'), 4) AS w FROM width_bucket_test ORDER BY k1;
+------+------------+-----------+--------+------+
| k1 | v1 | v2 | v3 | w |
+------+------------+-----------+--------+------+
| 1 | 2022-11-18 | 290000 | 290000 | 0 |
| 2 | 2023-11-18 | 320000 | 320000 | 1 |
| 3 | 2024-11-18 | 399999.99 | 399999 | 2 |
| 4 | 2025-11-18 | 400000 | 400000 | 3 |
| 5 | 2026-11-18 | 470000 | 470000 | 4 |
| 6 | 2027-11-18 | 510000 | 510000 | 5 |
| 7 | 2028-11-18 | 610000 | 610000 | 5 |
| 8 | NULL | NULL | NULL | NULL |
+------+------------+-----------+--------+------+
SELECT k1, v1, v2, v3, width_bucket(v2, 200000, 600000, 4) AS w FROM width_bucket_test ORDER BY k1;
+------+------------+-----------+--------+------+
| k1 | v1 | v2 | v3 | w |
+------+------------+-----------+--------+------+
| 1 | 2022-11-18 | 290000 | 290000 | 1 |
| 2 | 2023-11-18 | 320000 | 320000 | 2 |
| 3 | 2024-11-18 | 399999.99 | 399999 | 2 |
| 4 | 2025-11-18 | 400000 | 400000 | 3 |
| 5 | 2026-11-18 | 470000 | 470000 | 3 |
| 6 | 2027-11-18 | 510000 | 510000 | 4 |
| 7 | 2028-11-18 | 610000 | 610000 | 5 |
| 8 | NULL | NULL | NULL | NULL |
+------+------------+-----------+--------+------+
SELECT k1, v1, v2, v3, width_bucket(v3, 200000, 600000, 4) AS w FROM width_bucket_test ORDER BY k1;
+------+------------+-----------+--------+------+
| k1 | v1 | v2 | v3 | w |
+------+------------+-----------+--------+------+
| 1 | 2022-11-18 | 290000 | 290000 | 1 |
| 2 | 2023-11-18 | 320000 | 320000 | 2 |
| 3 | 2024-11-18 | 399999.99 | 399999 | 2 |
| 4 | 2025-11-18 | 400000 | 400000 | 3 |
| 5 | 2026-11-18 | 470000 | 470000 | 3 |
| 6 | 2027-11-18 | 510000 | 510000 | 4 |
| 7 | 2028-11-18 | 610000 | 610000 | 5 |
| 8 | NULL | NULL | NULL | NULL |
+------+------------+-----------+--------+------+