콘텐츠로 이동

“등높이” 버킷 전략을 사용하여 데이터 분포 히스토그램을 생성합니다.

func.histogram(<expr>)

자세한 내용은 SQL 예제를 참조하십시오.

HISTOGRAM(<expr>)
-- The following two forms are equivalent:
HISTOGRAM(<max_num_buckets>)(<expr>)
HISTOGRAM(<expr> [, <max_num_buckets>])
매개변수 설명
expr expr의 데이터 형식은 정렬할 수 있어야 합니다.
max_num_buckets 최대 버킷 수를 지정하는 선택적 양의 정수입니다. 기본값은 128입니다.

빈 문자열 또는 다음 구조의 JSON 객체를 반환합니다.

  • buckets: 상세 정보가 포함된 버킷 목록입니다.
    • lower: 버킷의 하한입니다.
    • upper: 버킷의 상한입니다.
    • count: 버킷에 있는 요소의 개수입니다.
    • pre_sum: 현재 버킷까지의 요소 누적 개수입니다.
    • ndv: 버킷에 있는 고유 값의 개수입니다.

이 예제는 HISTOGRAM 함수가 histagg 테이블에 있는 c_int 값의 분포를 분석하여 버킷 경계, 고유 값 개수, 요소 개수, 누적 개수를 반환하는 방식을 보여 줍니다.

CREATE TABLE histagg (
c_id INT,
c_tinyint TINYINT,
c_smallint SMALLINT,
c_int INT
);
INSERT INTO histagg VALUES
(1, 10, 20, 30),
(1, 11, 21, 33),
(1, 11, 12, 13),
(2, 21, 22, 23),
(2, 31, 32, 33),
(2, 10, 20, 30);
SELECT HISTOGRAM(c_int) FROM histagg;
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ histogram(c_int) │
├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ [{"lower":"13","upper":"13","ndv":1,"count":1,"pre_sum":0},{"lower":"23","upper":"23","ndv":1,"count":1,"pre_sum":1},{"lower":"30","upper":"30","ndv":1,"count":2,"pre_sum":2},{"lower":"33","upper":"33","ndv":1,"count":2,"pre_sum":4}] │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

결과는 JSON 배열로 반환됩니다.

[
{
"lower": "13",
"upper": "13",
"ndv": 1,
"count": 1,
"pre_sum": 0
},
{
"lower": "23",
"upper": "23",
"ndv": 1,
"count": 1,
"pre_sum": 1
},
{
"lower": "30",
"upper": "30",
"ndv": 1,
"count": 2,
"pre_sum": 2
},
{
"lower": "33",
"upper": "33",
"ndv": 1,
"count": 2,
"pre_sum": 4
}
]

이 예제는 HISTOGRAM(2)가 c_int 값을 두 개의 버킷으로 그룹화하는 방식을 보여 줍니다.

SELECT HISTOGRAM(2)(c_int) FROM histagg;
-- Or
SELECT HISTOGRAM(c_int, 2) FROM histagg;
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ histogram(2)(c_int) │
├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ [{"lower":"13","upper":"30","ndv":3,"count":4,"pre_sum":0},{"lower":"33","upper":"33","ndv":1,"count":2,"pre_sum":4}] │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

결과는 JSON 배열로 반환됩니다.

[
{
"lower": "13",
"upper": "30",
"ndv": 3,
"count": 4,
"pre_sum": 0
},
{
"lower": "33",
"upper": "33",
"ndv": 1,
"count": 2,
"pre_sum": 4
}
]