time_bucket : 데이터를 시간 버킷(Ex: 5분, 1시간, 3일 등)으로 집계할 수 있습니다.
시간을 bucket으로 나누는 행위는 시계열 데이터 작업에서는 필수적입니다.
Time Bucket
시간을 bucketing 한다는 것은 데이터를 시간 간격으로 그룹화하는 것입니다.
간격은 마이크로초, 밀리초, 초, 분, 시간, 일. 주, 월, 년 또는 세기가 될 수 있습니다.
일반적으로 time_bucket 기능은 group by와 함께 사용하여 데이터를 집계합니다.
월 또는 연도를 포함하지 않는 간격 경우 기본 원점은 2000년 1월 3일입니다.
월, 연도, 세기 간격의 경우 기본 원점은 2000년 1월 1일입니다.
정수 시간 값의 경우 기본 원점은 0입니다.
시간 버킷별로 그룹화하고 요약 값을 계산합니다.
// 테이블 생성
CREATE TABLE conditions (
time TIMESTAMPTZ NOT NULL,
location TEXT NOT NULL,
device TEXT NOT NULL,
temperature DOUBLE PRECISION NULL,
humidity DOUBLE PRECISION NULL
);
// time_bucket 생성
SELECT time_bucket(시간 단위, time) AS bucket, avg(temperature)
FROM database_table
GROUP BY bucket
ORDER BY bucket ASC;
시간 버킷별로 데이터를 그룹화하고 버킷의 시간 범위를 변경합니다.
SELECT time_bucket(시간 단위, time, '시간 단위' :: INTERVAL )' AS bucket, avg(temperature)
FROM database_table
GROUP BY bucket
ORDER BY bucket ASC;
버킷의 시간 범위를 변경하려면 INTERVAL 인수를 사용하는 offset 매개변수를 사용합니다.
양의 offset은 버킷의 시작 및 종료시간을 나중으로 이동합니다.
음의 offset은 버킷의 시작 및 종료시간을 이전으로 이동합니다.
Issue
ERROR: cannot create continuous aggregate with incompatible bucket width
DETAIL: Time bucket width of "<BUCKET>" [1 year] should be multiple of the time bucket width of "<BUCKET>" [1 day].
호환되지 않는 버킷 너비로 인하여 계층적 연속 집계가 실패한 경우 발생하는 에러 입니다.
고정된 시간이 있는 열이거나 시간이 아닌 열로 타임 버킷을 생성할 수 없습니다.
'DB' 카테고리의 다른 글
TimescaleDB - Continuous Aggregates (1) | 2023.11.28 |
---|---|
[DB] TimescaleDB volume 설정이 안될 경우 (0) | 2023.11.06 |
[DB] TimescaleDB에 대해 알아보고 간단하게 사용해보자 (0) | 2023.09.26 |