Parquet (파케이)
데이터를 저장하는 방식 중 하나로 하둡생태계에서 많이 사용되는 파일 포맷이다.
빅데이터를 처리할 때는 많은 시간과 비용이 들어가기 때문에
빠르게 읽고, 압축률이 좋아야 한다. 이러한 특징을 가진 파일 포맷으로는 Parquet(파케이), ORC, Avro(에이브로)가 있다.
📝 파케이가 압축률이 좋은 이유: 컬럼기반 저장포맷이기 때문
먼저, 컬럼기반이 무엇인지 알아보자.
데이터베이스를 예시로 들면, 행 기반으로 저장하는 방식(대표적으로 MySQL)과 열 기반(대표적으로 BigQuery)으로 저장하는 방식이 있다.
다음과 같은 데이터베이스가 있다고 할 때
행 기반으로 저장되는 건 다음과 같이 저장되고,
열 기반으로 저장되는 건 아래와 같이 저장된다.
열 기반으로 저장되는 것이 압축률이 더 좋은 이유는 다음과 같이 설명할 수 있다.
같은 컬럼에는 종종 유사한 데이터가 나열된다. 특히 같은 문자열의 반복은 매우 작게 압축할 수 있다. 데이터의 종류에 따라 다르지만, 열 지향 데이터베이스는 압축되지 않은 행 지향 데이터 베이스와 비교하면 1/10 이하로 압축 가능하다.
데이터 분석에서는 종종 일부 칼럼만이 집계 대상이기 때문에, 이렇게 열 기반으로 압축하면 필요한 칼럼만을 빠르게 읽고 집계할 수 있다.
🤔 그렇다면 열 기반으로만 저장하는게 좋은 거 아닌가?
위와 같은 궁금증이 들 수 있는데 MySQL 의 경우 대표적인 행 기반 저장 방식의 데이터베이스이다.
행 기반 데이터베이스는 매일 발생하는 대량의 트랜잭션을 지연 없이 처리하기 위해 데이터 추가를 효율적으로 할 수 있도록 하는 것이 행 지향 데이터베이스의 특징이다.
새로운 레코드를 추가할 경우 끝부분에 추가되기 때문에 고속으로 쓰기가 가능하다.
🤩 파케이의 장점을 알아보자!
- 위에서 설명한대로 칼럼단위로 압축하기 압축률이 좋다.
- 이렇게 되면 파일의 크기도 작아지기 때문에 용량을 덜 차지하게 된다.
- 디스크 IO 가 적다. 데이터를 미리 칼럼 단위로 정리해 둠으로써 필요한 칼럼만을 로드하기 때문
📚 Parquet 는 내부적으로 어떻게 생겼을까
Parquet File Structure로 검색했을 때 대표적으로 나오는 사진이다.
많이 보긴 했는데 하나하나 분석해보는 건 이번이 처음이다..
파케이 파일은 헤더, 하나 이상의 블록, 꼬리말 순으로 구성된다.
헤더는 파케이 포맷의 파일임을 알려주는 4바이트 매직 숫자인 PAR1 만 포함하고 있다.
파일의 모든 메타데이터는 꼬리말(Footer) 에 저장된다.
파케이 파일의 각 블록은 행 그룹을 저장한다. 행 그룹은 행에 대한 칼럼 데이터를 포함한 칼럼 청크로 되어 있다.
각 컬럼 청크의 데이터는 페이지에 기록된다.
각 페이지는 동일한 칼럼의 값만 포함하고 있다. 따라서 페이지에 있는 값은 비슷한 경향이 있기 때문에 페이지를 압축할 때 매우 유리하다.
데이터의 가장 최소 단위인 페이지에는 동일 칼럼의 데이터만 존재한다.
그래서 인코딩/ 압축을 할 때, 페이지 단위로 수행하면 된다.
항상 Parquet 파일을 써왔지만 내부적으로 어떻게 구성되어 있고 어떻게 압축되는지는 이번에 처음이었다.
다음 포스팅에는 Parquet 파일로 어떻게 변환하고 저장하며 어떤 데이터 타입을 저장할 수 있는지 정리해야겠다!
📚 참고
https://pearlluck.tistory.com/561
https://devidea.tistory.com/92
'Data' 카테고리의 다른 글
[Udemy] ChatGPT 와 파이썬을 활용한 데이터 사이언스 및 데이터 분석 수강 후기 | LIM (0) | 2024.03.31 |
---|---|
[File Format For Big Data] Parquer vs ORC vs Avro | LIM (0) | 2023.03.12 |
Parquet 파일 읽고 써보기 | LIM (0) | 2023.02.04 |
Apache Arrow | LIM (0) | 2023.01.29 |
댓글