Impala 는 Materialized View 를 만들거나 지우는 SQL 을 지원하지 않는다. CREATE MATERIALIZED VIEW, DROP MATERIALIZED VIEW, REFRESH MATERIALIZED VIEW 는 Impala 문법이 아니다. Impala 4.1 이후 Hive 가 만든 MV 를 일반 테이블처럼 조회하고 통계를 계산할 수 있게 됐을 뿐이다.
MV 생성과 갱신은 Hive 쪽 기능이며, Impala 는 그 결과물을 읽는 소비자 위치에 있다. 자동 재작성(query rewrite)도 Hive 의 옵티마이저가 하는 일이라 Impala 쿼리에는 적용되지 않는다.
집계 결과를 미리 만들어 두고 싶다면 요약 테이블을 직접 관리한다. 동작이 명시적이고 예측 가능하다.
CREATE TABLE mv_events_daily STORED AS PARQUET AS
SELECT
CAST(event_time AS DATE) AS event_date,
event_type,
COUNT(*) AS cnt,
AVG(value) AS avg_value
FROM kudu_events
GROUP BY 1, 2;
COMPUTE STATS mv_events_daily;
갱신은 파티션 단위로 덮어쓴다.
INSERT OVERWRITE TABLE mv_events_daily PARTITION (event_date='2026-09-20')
SELECT ...
FROM kudu_events
WHERE CAST(event_time AS DATE) = '2026-09-20'
GROUP BY ...;
Hive 의 MV 가 꼭 필요하다면 Hive 로 만들고 Impala 에서는 읽기만 한다.
INVALIDATE METADATA mydb.mv_name;
SELECT * FROM mydb.mv_name;
MV 는 쿼리 성능을 위한 장치다. 변경 이력(INSERT · UPDATE · DELETE)을 남기지 않으므로 CDC 나 이력 보관 용도로 쓸 수 없다. 이력이 필요하면 원본 테이블에 변경 시각 컬럼을 두고 그 기준으로 증분 추출하거나, Iceberg 처럼 스냅샷을 가진 형식을 쓴다.
Kudu 테이블에는 자체 변경 로그 API 가 외부로 공개돼 있지 않다. 변경분을 뽑아야 한다면 테이블 설계 단계에서 updated_at 같은 컬럼을 두고 그 값으로 증분 조회하는 방식이 현실적이다.