ORDER BY WITH FILL — 데이터가 없는 시점도 빈틈없이 채워 반환하기
ClickHouse GROUP BY WITH ROLLUP/CUBE/TOTALS 및 ORDER BY WITH FILL 공식 문서 종합 (웹 리서치, 2026) — ClickHouse 공식 문서(sql-reference/statements/select/group-by, sql-reference/statements/select/order-by) ClickHouse 공식 문서 ORDER BY clause — WITH FILL modifier
이 모듈을 다 읽으면
- WITH FILL이 실제 데이터가 없는 구간에 어떻게 합성 행을 채워 넣는지 설명할 수 있다
- FROM/TO/STEP 파라미터와 다른 컬럼의 기본값 채움 방식을 설명할 수 있다
센서 데이터나 시계열처럼 특정 시점에 값이 아예 없을 수 있는 데이터를, 조회 결과에서 그 빈 시점까지 일정 간격으로 채워 넣어 끊김 없는 결과를 만들어주는 ORDER BY ... WITH FILL을 정리한다.
빈 구간을 합성 행으로 채운다
ORDER BY expr WITH FILL을 쓰면, expr 컬럼 기준으로 실제 데이터가 없는 값들도 일정 간격(STEP)으로 순차적으로 채워 넣은 합성 행이 결과에 추가된다 — FROM/TO로 채울 범위의 시작·끝을 지정할 수 있고, 생략하면 실제 컬럼의 최솟값·최댓값을 그대로 쓴다. STEP의 기본값은 숫자형이면 1.0, 날짜형이면 1일, datetime이면 1초다. 채워진 합성 행에서 expr 이외의 다른 컬럼들은 텍스트는 빈 문자열, 숫자는 0 같은 기본값으로 채워진다.
핵심 포인트
- ORDER BY expr WITH FILL은 expr 기준 빈 값을 STEP 간격으로 순차 채운 합성 행을 결과에 추가
- FROM/TO 생략 시 실제 컬럼의 최솟값/최댓값 사용, STEP 기본값은 숫자 1.0/날짜 1일/datetime 1초, 나머지 컬럼은 기본값(빈 문자열/0)으로 채워짐
STALENESS와 INTERPOLATE — 채움을 더 정교하게 제어
STALENESS는 간격이 지정한 임계값보다 벌어지면 그 이상은 채우지 않고 멈추게 하는 옵션이고, INTERPOLATE는 채워진 행의 다른 컬럼을 단순 기본값이 아니라 지정한 표현식으로 계산해 채울 수 있게 해준다 — 예를 들어 직전 실제 값을 그대로 이어받게(forward-fill) 하는 식의 로직을 적용할 수 있다. 여러 컬럼에 WITH FILL을 각각 붙일 수도 있어, 예를 들어 sensor_id별로 그룹을 유지하면서 timestamp만 채우는 식의 조합도 가능하다.
핵심 포인트
- STALENESS: 간격이 임계값을 넘으면 그 이상은 채우지 않고 멈춤
- INTERPOLATE: 채워진 행의 다른 컬럼을 기본값 대신 지정 표현식(예: 직전 값 이어받기)으로 계산 — 여러 컬럼에 WITH FILL을 조합해 sensor_id별 그룹 유지+timestamp만 채우는 식도 가능
전형적 용도 — 끊김 없는 시계열 차트
시계열 시각화에서 특정 시점에 데이터가 아예 없으면 차트에 빈 구간(끊김)이 생긴다 — WITH FILL은 그 빈 시점에 일정 간격으로 자리표시용(placeholder) 행을 만들어줘, 실제로는 값이 없어도 시각적으로는 끊김 없이 연속된 것처럼 보이는 결과를 손쉽게 만들 수 있게 해준다. 공식 문서 예제도 sensor_id별로 그룹을 유지하면서 누락된 timestamp만 독립적으로 채우는 패턴을 보여준다.
핵심 포인트
- 데이터가 없는 시점에 채움 행을 만들어 시계열 차트의 끊김을 없애는 게 전형적 용도
- sensor_id별 그룹을 유지하면서 누락된 timestamp만 독립적으로 채우는 패턴이 공식 예제로 제시됨