728x90

갑자기 회사에서 외계어가 나타나기 시작했습니다.

협력사: "csv로 전달드리면 될까요?"

사수님: "아무래도 데이터 양이 너무 많아서 파케이로 전달해주시는게 좋을 것 같아요. 코린이님, 저희 s3에서 csv로 저장되어 있는게 있나요? 이게 athena에서 바로 읽어 올 수 있었나요?"

코린이: "...? 확인을 좀,,,"

 

저 같은 분이 많을꺼라고 생각듭니다.

대부분 회사에서 업무를 처리할 때, 기존의 전체적인 구조는 어느정도 유지한 채 업무를 진행하게 될텐데 가끔 문제가 발생하는 부분이 세부적으로 데이터 저장형식과 같은 세부적인 부분들이라고 생각듭니다.

 

이참에 알아가보시죠!

 


무엇인가?

파일 형식중 하나입니다.

출처: 메가존(https://www.megazone.com/criblstream_230313/)

파일 형식은 크게 행기반 저장방식, 열(컬럼)기반 저장방식으로 나누어져 있습니다.

 

행기반 파일 형식의 경우, 데이터를 행 단위로 저장하는 방식입니다.

대부분의 사람들에게 익숙한 저장방식으로 대표적으로 CSV와 같은 텍스트 파일 형식이 행 기반 파일 형식의 대표적인 예시 입니다.

 

열기반 파일 형식의 경우, 데이터를 열 단위로 저장하는 방식입니다.

지금 알아 보는 Parquet가 가장 대표적인 열 단위 파일 형식의 예시입니다.

Parquet은 대용량 데이터 처리 시스템에서 널리 사용되며, Hadoop, Spark, Presto 등의 다양한 분산 컴퓨팅 프레임워크에서 지원됩니다. 이러한 장점들로 인해 Parquet은 데이터 과학 및 데이터 엔지니어링 분야에서 매우 인기 있는 파일 형식 중 하나로 자리매김하고 있습니다.

Parquet 내부 구조

Parquet 파일은 여러개의 행 그룹(Row Group)으로 구성되어 있습니다. 각 행 그룹은 여러 행을 포함하며, 이러한 행 그룹은 열 단위로 압축되어 저장됩니다. 이러한 구조는 Parquet 파일이 열 기반 형식이기 때문에 가능합니다. 각 행 그룹은 아래와 같은 요소로 구성되어 있습니다.

  1. Row Group Header: 각 행 그룹은 헤더를 가지고 있습니다. 헤더에는 행 그룹의 메타데이터가 포함되어 있습니다. 메타데이터에는 행 그룹에 포함된 행의 수, 각 열의 통계 정보 등이 있습니다.
  2. Column Chunks: 열 기반으로 데이터가 저장되기 때문에, 각 열은 자체적으로 압축되어 저장됩니다. 이러한 압축된 열 데이터를 Chunk라고 합니다. 각 열은 하나 이상의 Chunk로 나뉘어질 수 있습니다.
  3. Page Header: Chunk 안에는 Page가 포함되어 있습니다. Page는 실제 데이터를 포함하고 있습니다. Page Header에는 해당 Page의 메타데이터가 포함되어 있습니다. 이 메타데이터에는 Page의 유형 (Data Page, Dictionary Page 등)과 압축된 데이터의 크기 등이 있습니다.
  4. Data Pages: 데이터가 실제로 저장되는 부분입니다. 데이터 페이지에는 실제 데이터 값이 압축되어 저장됩니다.

Parquet 파일은 이러한 구조를 반복하여 여러 개의 행 그룹을 포함할 수 있습니다. 각 행 그룹은 독립적으로 저장되므로, 쿼리 시 필요한 행 그룹만 읽어와 처리할 수 있습니다. 이는 Parquet 파일이 대용량 데이터셋을 효율적으로 처리하는 데 도움이 됩니다.

 

왜 사용 하는가?

수많은 소프트웨어 도구가 구분되어 있고 파일 형식또한 구분되어 있는데는 이유가 있습니다.

 

따라서, 분야또한 데이터 분석에 대한 니즈가 없는 일반적인 기업의 경우, 열 지향 파일 형식을 몰라도 당장의 문제가 없습니다.

다만, 수많은 데이터 속 분석을 통해 가치를 찾아 내기 위한 니즈가 있는 기업이라면 열 지향 파일 형식의 필요성에 대해 알아볼 필요가 있습니다.

 

Parquet의 장점은 다음과 같습니다:

  1. 압축 효율성: Parquet은 열 지향 형식을 사용하므로 같은 값이 많은 열은 압축이 잘되어 더 작은 파일 크기를 갖게 됩니다. 이는 디스크 공간을 절약하고 데이터 전송 속도를 향상시킵니다.
  2. 쿼리 성능: Parquet 파일은 파일 내의 메타데이터를 사용하여 쿼리를 빠르게 처리할 수 있습니다. 또한, 열 지향 형식이므로 필요한 열만 읽어들이므로 전체 데이터셋을 읽어야 하는 비용이 줄어듭니다.
  3. 스키마 호환성: Parquet 파일은 스키마를 내장하고 있어, 스키마 변경이 필요한 경우에도 쉽게 처리할 수 있습니다.
  4. 분할 및 병렬 처리: Parquet 파일은 여러 개의 블록으로 나뉘어져 있어, 여러 컴퓨터에서 동시에 처리할 수 있습니다. 이는 대규모 데이터셋을 효율적으로 처리하는 데 도움이 됩니다.

반면, Parquet의 단점은 다음과 같습니다:

  1. 쓰기 속도: Parquet 파일은 압축과 메타데이터 작업으로 인해 쓰기 속도가 느릴 수 있습니다. 따라서 데이터를 빠르게 기록해야 하는 경우에는 다른 형식을 고려해야 할 수 있습니다.
  2. 최적화된 쿼리를 위한 사전 계획 필요: Parquet 파일을 효율적으로 쿼리하려면 데이터를 저장할 때 쿼리 패턴을 고려하여 저장해야 합니다. 이를 위해 데이터의 구조와 쿼리 패턴을 미리 파악해야 하는데, 이는 추가적인 작업이 필요할 수 있습니다.

 

상황에 맞게 사용 해봅시다!

너무 뻔한 내용이였나요?

고려하기 너무 어렵다면 아래의 몇가지 상황에 따라서 파일 형식을 고려해 사용합시다!

 

열기반 (Parquet)

- 대용량 데이터 분석

- 데이터 웨어하우스 운영

- 머신러닝 모델 훈련

- 데이터 레이크 구축

- 클라우드 기반 분석

 

행기반 (Json, CSV)

- 스트리밍 데이터 처리

- 간단한 데이터 공유 및 협업

- 데이터의 추가가 빈번한 로그데이터

- 작은 파일 다수 처리

 


후기

parquet 파일 형식에 대해서 그냥 대용량 처리에서는 기존에 자주사용하던 저장방식보다는 자주 사용되는구나 정도까지만 알고 넘어갔습니다. 실무를 진행하며 이런 디테일 한점을 알고 모르냐에 따라 결국 문제를 해결하는 방식이 달라지고 이방식은 결국 자원의 선택과 비용절감에 크나큰 영향을 끼친다고 생각합니다.

 

학부생 때, 파일 처리에 대해 중요성을 강조하시던 교수님을 뒤로 하고 그저 술만 마시던 저를 탓하던 하루였습니다...

728x90

+ Recent posts