Iceberg (hidden partitioning)

Q·2025년 3월 29일

Iceberg

목록 보기
3/14

Hive partitioning

INSERT INTO logs PARTITION (event_date)
  SELECT level, message, event_time, format_time(event_time, 'YYYY-MM-dd')
  FROM unstructured_log_source
SELECT level, count(1) as count FROM logs
WHERE event_time BETWEEN '2018-12-01 10:00:00' AND '2018-12-01 12:00:00'
  AND event_date = '2018-12-01'
  • hive 테이블은 쿼리 속도를 향상시키기 위해 파티셔닝을 사용
  • "event_date"와 같은 파티션 컬럼이 추가되며 Insert할 때도 변환이 필요해 불필요한 작업이 늘어난다.
  • 파티션 컬럼을 적어야만 Full Scan을 하지않고 데이터를 가져온다.
  • 쿼리는 파티션에 의존적이고 성능에 영향을 많이받는다.

Iceberg partitioning

1. CREATE TABLE

create table hidden_logs (
    ID BIGINT,
    LEVEL STRING,
    MESSAGE STRING,
    EVENT_TIME TIMESTAMP
) USING ICEBERG
    LOCATION 's3a://martinispark/hiddenpartition'
    PARTITIONED BY (day(EVENT_TIME))

2. INSERT INTO Data

INSERT INTO hidden_logs VALUES
(1,'DEBUG','saveItems',TIMESTAMP '2024-01-17 10:00:00'),
(2,'DEBUG','getItems', TIMESTAMP '2024-01-17 10:00:10'),
(3,'DEBUG','updateItems',TIMESTAMP '2024-01-18 10:00:00')

  • 별도의 Table Column 추가 없이 일별 파티션이 나누어지는 것을 볼 수 있다.

3. ALTER PARTITION

ALTER TABLE hidden_logs REPLACE PARTITION FIELD day(EVENT_TIME) WITH month(EVENT_TIME)
  • 파티션 기준을 월별로 변경

4. INSERT INTO Data

INSERT INTO hidden_logs VALUES
(4,'DEBUG','saveItems',TIMESTAMP '2025-01-17 10:00:00'),
(5,'DEBUG','getItems', TIMESTAMP '2025-01-18 10:00:10'),
(6,'DEBUG','updateItems',TIMESTAMP '2025-02-18 10:00:00'),
(7,'DEBUG','saveItems',TIMESTAMP '2025-02-19 10:00:00'),
(8,'DEBUG','getItems', TIMESTAMP '2025-03-17 10:00:10'),
(9,'DEBUG','updateItems',TIMESTAMP '2025-03-18 10:00:00')

  • 월별로 변경되는 것 확인

5. SELECT TABLE

SELECT * FROM hidden_logs
WHERE EVENT_TIME BETWEEN '2024-12-01 10:00:00' AND '2025-12-01 12:00:00'

참고

profile
Data Engineer

0개의 댓글