groupArrayResample — 구간별 대표 값을 뽑은 배열 만들기
groupArrayResample — 구간별 대표 값을 뽑은 배열 만들기
groupArrayResample은 groupArray 집계 함수에 Resample 결합자를 적용해서 지정 키 컬럼의 범위를 고정된 구간(N)으로 나누고, 각 구간에 속한 데이터에서 최소 키에 해당하는 대표 값을 하나 골라 배열을 만드는 방법을 보여드릴게요.
출처: 문서
본문
groupArray 집계 함수에 Resample 결합자를 적용하면 지정 키 컬럼의 범위를 고정된 개수의 구간(N)으로 나누고, 각 구간에 속한 데이터 포인트 중 최소 키에 해당하는 대표 값을 하나 골라 결과 배열을 만들어요. 모든 값을 모으는 대신 데이터를 다운샘플링한 뷰를 만드는 거예요.
예제를 살펴볼게요. 직원의 name, age, wage를 담는 테이블을 만들고 데이터를 삽입해요:
CREATE TABLE employee_data
(
name String,
age UInt8,
wage Float32
) ENGINE = MergeTree()
ORDER BY tuple()
INSERT INTO employee_data (name, age, wage) VALUES
('John', 16, 10.0),
('Alice', 30, 15.0),
('Mary', 35, 8.0),
('Evelyn', 48, 11.5),
('David', 62, 9.9),
('Brian', 60, 16.0);
age가 [30,60)과 [60,75) 구간에 속하는 사람들의 이름을 가져와볼게요. age를 정수로 표현하므로 실제로는 [30, 59]와 [60,74] 구간이 돼요. 이름을 배열로 집계하기 위해 groupArray 집계 함수를 사용해요. 이 함수는 인자를 하나 받는데, 이 경우엔 name 컬럼이에요. groupArrayResample 함수는 age 컬럼을 사용해서 이름을 나이별로 집계해야 해요. 필요한 구간을 정의하려면 groupArrayResample 함수에 30, 75, 30을 인자로 전달해요:
SELECT groupArrayResample(30, 75, 30)(name, age) FROM employee_data
┌─groupArrayResample(30, 75, 30)(name, age)─────┐
│ [['Alice','Mary','Evelyn'],['David','Brian']] │
└───────────────────────────────────────────────┘