오늘은 대용량 데이터를 다룰 때 효율적으로 저장하고 빠르게 쿼리할 수 있는 파일 포맷인 Apache Parquet에 대해 알아보겠습니다. Auth0의 사례를 통해 Parquet의 강력함을 확인해 보세요!
Parquet란 무엇인가요?
Apache Parquet은 데이터를 행(row)이 아닌 열(column) 단위로 저장하는 파일 포맷입니다. 이 포맷의 주요 특징은 파일 끝에 저장된 메타데이터를 통해 원하는 데이터만 선택적으로 읽을 수 있다는 점입니다. 즉, 데이터를 전부 읽지 않아도 필요한 부분만 읽을 수 있기 때문에 속도가 빠르고 비용 효율적입니다.
왜 Parquet를 선택해야 할까요?
Auth0의 사례를 보면, 매월 600억 건 이상의 요청 로그를 다루며 하루에 약 1TB의 데이터를 생성합니다. 기존에는 gzipped JSON 파일을 사용했지만, 쿼리 성능이 느리고 비용이 높다는 문제가 있었습니다. 이를 해결하기 위해 Parquet로 전환했으며, 다음과 같은 이점을 누릴 수 있었습니다:
- 빠른 데이터 읽기: 메타데이터를 활용해 필요한 열만 읽음으로써 속도를 개선.
- 저렴한 비용: Amazon Athena 같은 서비스에서 스캔된 데이터 용량에 따라 비용이 청구되는데, Parquet는 스캔 용량을 줄여줍니다.
- 효율적인 데이터 압축: 다양한 인코딩 기법을 통해 저장 공간을 줄이고 성능을 극대화.
Parquet의 주요 인코딩 기법
- 사전(Dictionary) 인코딩: 동일한 값이 반복될 경우, 해당 값을 사전에 저장하고 인덱스로 참조. 예를 들어 HTTP 상태 코드 같은 값에 적합.
- 런 렝스 인코딩(RLE): 연속적으로 반복되는 값을 압축. 예를 들어, 동일한 상태 코드가 반복되는 경우 활용.
- 델타(Delta) 인코딩: 연속된 값들 간의 차이(deltas)를 저장. 예를 들어, 요청 지속 시간이나 타임스탬프 데이터에 적합.
Parquet를 시작하는 방법
Parquet를 시작하는 데 복잡한 설정이나 대규모 인프라가 필요하지 않습니다. 예를 들어, DuckDB를 사용하면 간단히 JSON 데이터를 Parquet로 변환하고 쿼리할 수 있습니다. 다음은 DuckDB를 사용한 기본 명령어 예제입니다:
sql
COPY(
SELECT * FROM read_json('https://github.com/grounded042/airports-dataset/raw/226a54bb19535ea8c5e6175a591446e67c4ab44c/airports.json')
) TO 'airports.parquet' (FORMAT PARQUET, COMPRESSION ZSTD);
이후 Parquet 파일에서 상위 20개 국가별 공항 수를 쿼리할 수 있습니다:
sql
SELECT COUNT(*) as count, iso_country FROM 'airports.parquet' GROUP BY iso_country ORDER BY count DESC LIMIT 20;
Parquet로 전환해야 하는 이유
Parquet는 단순히 데이터를 열 단위로 저장하는 포맷 그 이상입니다. 데이터 타입을 효율적으로 저장하고, 반복되는 값을 효과적으로 처리하며, 대용량 데이터를 다루는 데 최적화되어 있습니다. Auth0는 Parquet로의 전환을 통해 성능과 비용 측면에서 큰 개선을 경험했으며, 여러분도 JSON 데이터를 Parquet로 변환해 그 이점을 체감할 수 있습니다.
지금 바로 DuckDB와 같은 도구를 활용해 작은 데이터셋으로 시작해 보세요. 데이터 분석과 저장의 새로운 가능성을 열어줄 것입니다!
참고 자료
- DuckDB를 활용한 Parquet 쿼리 예제: DuckDB 공식 블로그
'데이터관련' 카테고리의 다른 글
Facilo의 Ops 테크, 데이터, 그리고 사람의 힘으로 미래를 열다 (0) | 2025.06.05 |
---|---|
Cypress 테스트 결과를 시각화하는 나만의 대시보드 만들기 (1) | 2025.04.14 |