아마도 CSV 스토리지에 대한 최상의 대안: Parquet Data
Apache Parquet은 데이터를 저장하고 검색하는 데 있어 CSV와 같은 기존 방식과 비교했을 때 여러 가지 장점을 제공합니다.
Parquet 포맷은 복잡한 데이터 유형의 처리 속도를 향상시키기 위해 설계되었습니다. 이 글에서는 Parquet 포맷이 오늘날 급증하는 데이터 요구사항을 어떻게 충족하는지 설명합니다.
Parquet 포맷에 대해 자세히 알아보기 전에, CSV 데이터가 무엇이며 데이터 저장과 관련된 문제점을 이해해야 합니다.
CSV 저장 방식이란 무엇인가?
CSV(쉼표로 구분된 값)는 데이터를 구성하고 포맷하는 데 가장 널리 사용되는 방식 중 하나입니다. CSV 데이터 저장소는 행 기반으로 구성됩니다. CSV 파일은 .csv 확장자로 저장되며, Excel, Google 스프레드시트 또는 일반 텍스트 편집기를 사용하여 열고 저장할 수 있습니다. 파일 내용을 열어보면 데이터를 쉽게 확인할 수 있습니다.
하지만, 이 방식은 데이터베이스 포맷으로는 적합하지 않습니다.
또한, 데이터 양이 증가할수록 쿼리, 관리 및 검색이 더욱 어려워집니다.
다음은 .CSV 파일에 저장된 데이터의 예시입니다.
EmpId,First name,Last name, Division 2012011,Sam,Butcher,IT 2013031,Mike,Johnson,Human Resource 2010052,Bill,Matthew,Architect 2010079,Jose,Brian,IT 2012120,Adam,James,Solutions
Excel에서 보면 아래와 같은 행-열 구조로 나타납니다.
CSV 저장 방식의 문제점
CSV와 같은 행 기반 저장 방식은 데이터를 생성, 업데이트 및 삭제하는 작업에 적합합니다.
그렇다면 CRUD 작업 중 읽기 작업은 어떨까요?
위의 .csv 파일에 백만 개의 행이 있다고 가정해 봅시다. 파일에서 원하는 데이터를 검색하려면 상당한 시간이 소요됩니다. 또한 AWS와 같은 클라우드 서비스 제공업체들은 스캔하거나 저장한 데이터의 양에 따라 비용을 부과합니다. CSV 파일은 많은 저장 공간을 차지합니다.
CSV 저장 방식은 메타데이터를 저장하는 기능이 없어 데이터 스캔을 더욱 어렵게 만듭니다.
그렇다면 모든 CRUD 작업을 위한 비용 효율적이고 최적화된 솔루션은 무엇일까요? 좀 더 자세히 알아보겠습니다.
Parquet 데이터 저장 방식이란 무엇인가?
Parquet은 데이터를 저장하는 오픈 소스 포맷입니다. Hadoop 및 Spark 생태계에서 널리 사용되며, .parquet 확장자로 저장됩니다.
Parquet은 고도로 구조화된 포맷입니다. 또한 데이터 레이크에 대량으로 존재하는 복잡한 원시 데이터를 최적화하는 데에도 사용될 수 있습니다. 이를 통해 쿼리 시간을 크게 단축할 수 있습니다.
Parquet은 행과 열 기반(하이브리드) 저장 방식을 혼합하여 데이터를 효율적으로 저장하고 더 빠르게 검색할 수 있도록 합니다. 이 포맷에서는 데이터가 가로 및 세로로 분할됩니다. 또한 Parquet 포맷은 구문 분석 오버헤드를 상당 부분 줄여줍니다.
이 포맷은 전체 I/O 작업 횟수를 제한하여 궁극적으로 비용을 절감합니다.
Parquet은 데이터 스키마, 값의 수, 열 위치, 최소값, 행 그룹의 최대값 수, 인코딩 유형 등과 같은 데이터 관련 정보를 저장하는 메타데이터를 저장합니다. 메타데이터는 파일의 다양한 수준에 저장되어 데이터 접근 속도를 향상시킵니다.
CSV와 같은 행 기반 접근 방식에서는 쿼리가 각 행을 순회하여 특정 열 값을 가져와야 하므로 데이터 검색에 시간이 오래 걸립니다. 하지만 Parquet 저장 방식은 필요한 모든 열에 한 번에 접근할 수 있게 해줍니다.
요약하자면:
- Parquet은 데이터를 저장하기 위한 컬럼 구조를 기반으로 합니다.
- 저장 시스템에 복잡한 데이터를 대량으로 저장하는 데 최적화된 데이터 포맷입니다.
- Parquet 포맷에는 데이터 압축 및 인코딩을 위한 다양한 방식이 포함되어 있습니다.
- CSV와 같은 다른 저장 방식과 비교했을 때 데이터 스캔 및 쿼리 시간을 크게 줄이고 디스크 공간을 덜 차지합니다.
- I/O 작업 수를 최소화하여 저장 및 쿼리 실행 비용을 절감합니다.
- 데이터를 더 쉽게 찾을 수 있도록 메타데이터를 포함합니다.
- 오픈 소스 지원을 제공합니다.
Parquet 데이터 포맷 구조
예시를 시작하기 전에 데이터가 Parquet 포맷으로 저장되는 방식을 좀 더 자세히 살펴보겠습니다.
하나의 파일은 행 그룹이라는 여러 개의 수평 파티션을 가질 수 있습니다. 각 행 그룹 내에서 수직 분할이 적용됩니다. 열은 여러 개의 컬럼 청크로 분할됩니다. 데이터는 컬럼 청크 내부에 페이지로 저장됩니다. 각 페이지에는 인코딩된 데이터 값과 메타데이터가 포함됩니다. 앞서 언급했듯이, 전체 파일에 대한 메타데이터는 행 그룹 수준의 파일 바닥글에도 저장됩니다.

데이터가 컬럼 청크로 분할되어 있기 때문에 새로운 값을 새로운 청크와 파일에 인코딩하여 새로운 데이터를 추가하는 것도 쉽습니다. 그런 다음 영향을 받는 파일 및 행 그룹에 대한 메타데이터가 업데이트됩니다. 따라서 Parquet은 유연한 포맷이라고 할 수 있습니다.
Parquet은 기본적으로 페이지 압축 및 사전 인코딩 기술을 사용하여 데이터 압축을 지원합니다. 사전 압축의 간단한 예를 살펴보겠습니다.

위의 예시에서는 IT 부서가 4번 나타납니다. 사전에 저장할 때 반복 횟수와 함께 저장하기 쉬운 값(0, 1, 2…)으로 데이터를 인코딩하여 더 적은 공간으로 저장할 수 있습니다. 압축된 데이터를 쿼리하는 데 시간이 덜 걸립니다.
일대일 비교
이제 CSV와 Parquet 포맷이 어떻게 생겼는지에 대한 대략적인 이해를 얻었으므로, 몇 가지 통계를 통해 두 포맷을 비교해 볼 시간입니다.
| CSV | Parquet |
| 행 기반 저장 방식입니다. | 행 기반 및 컬럼 기반 저장 방식의 하이브리드입니다. |
| 기본 압축 옵션을 사용할 수 없으므로 많은 공간을 소비합니다. 예를 들어, 1TB 파일은 Amazon S3나 다른 클라우드에 저장할 때 동일한 공간을 차지합니다. | 저장하는 동안 데이터를 압축하여 공간을 덜 차지합니다. Parquet 포맷으로 저장된 1TB 파일은 130GB의 공간만 차지합니다. |
| 행 기반 검색 때문에 쿼리 실행 시간이 느립니다. 각 열에 대해 모든 데이터 행을 검색해야 합니다. | 컬럼 기반 저장 방식과 메타데이터의 존재로 인해 쿼리 시간이 약 34배 더 빠릅니다. |
| 쿼리당 더 많은 데이터를 스캔해야 합니다. | 쿼리 실행을 위해 스캔되는 데이터가 약 99% 적어 성능이 최적화됩니다. |
| 대부분의 저장 장치는 저장 공간에 따라 비용을 청구하므로 CSV 포맷은 저장 비용이 많이 듭니다. | 데이터가 압축 및 인코딩된 형식으로 저장되므로 저장 비용이 줄어듭니다. |
| 파일 스키마는 유추하거나 제공해야 합니다. | 파일 스키마는 메타데이터에 저장됩니다. |
| 단순 데이터 유형에 적합합니다. | Parquet은 중첩 스키마, 배열, 사전과 같은 복잡한 유형에도 적합합니다. |
결론 👩💻
비용, 유연성 및 성능 측면에서 Parquet이 CSV보다 더 효율적이라는 것을 예시를 통해 확인했습니다. 특히 전 세계가 클라우드 스토리지 및 공간 최적화로 이동하는 상황에서 데이터를 저장하고 검색하는 데 매우 효과적인 방법입니다. Azure, AWS 및 BigQuery와 같은 주요 플랫폼들은 Parquet 포맷을 지원합니다.