Parquet 포맷

Parquet 포맷 (Parquet Format)

포맷: 직렬화 스키마 / 역직렬화 스키마. Apache Parquet 포맷은 Parquet 데이터를 읽고 쓸 수 있게 해줘요.

출처: 문서

본문

의존성 (Dependencies)

Parquet 포맷을 사용하려면 빌드 자동화 도구(Maven 또는 SBT)를 사용하는 프로젝트와 SQL JAR 번들이 있는 SQL Client 모두 다음 의존성이 필요해요.

<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-parquet</artifactId>
<version>2.3.0</version>
</dependency>

Parquet 포맷으로 테이블 만들기 (How to create a table with Parquet format)

Filesystem 커넥터와 Parquet 포맷을 사용해 테이블을 만드는 예제예요.

CREATE TABLE user_behavior (
user_id BIGINT,
item_id BIGINT,
category_id BIGINT,
behavior STRING,
ts TIMESTAMP(3),
dt STRING
) PARTITIONED BY (dt) WITH (
'connector' = 'filesystem',
'path' = '/tmp/user_behavior',
'format' = 'parquet'
)

포맷 옵션 (Format Options)

옵션 (Option) 필수 (Required) 기본값 (Default) 타입 (Type) 설명 (Description)
format required (none) String 사용할 포맷을 지정해요. 여기서는 'parquet'이어야 해요.
parquet.utc-timezone optional false Boolean epoch time과 LocalDateTime 간 변환에 UTC 시간대 또는 로컬 시간대를 사용해요. Hive 0.x/1.x/2.x는 로컬 시간대를 사용하고, Hive 3.x는 UTC 시간대를 사용해요.
timestamp.time.unit optional micros String parquet int64/LogicalTypes 타임스탬프를 이 시간 단위로 저장해요. 값은 nanos/micros/millis예요.
write.int64.timestamp optional false Boolean parquet 타임스탬프를 int96/OriginalTypes 대신 int64/LogicalTypes로 써요. 참고: 타임스탬프는 시간대와 무관해집니다(다른 시간대로 절대 변환되지 않아요).

Parquet 포맷은 ParquetOutputFormat의 구성도 지원해요. 예를 들어 parquet.compression=GZIP을 구성해 gzip 압축을 켤 수 있어요.

데이터 타입 매핑 (Data Type Mapping)

현재 Parquet 포맷 타입 매핑은 Apache Hive와 호환되지만 기본적으로 Apache Spark와는 호환되지 않아요:

  • Timestamp: 정밀도와 무관하게 타임스탬프 타입을 int96으로 매핑해요.
  • Spark 호환성은 write.int64.timestamp 구성 옵션을 통한 int64가 필요해요(위 참고).
  • Decimal: 소수점 정밀도에 따라 decimal 타입을 고정 길이 바이트 배열로 매핑해요.

다음 표는 Flink 타입에서 Parquet 타입으로의 매핑을 나열해요.

Flink 데이터 타입 Parquet 타입 Parquet 논리 타입 제약
CHAR / VARCHAR / STRING BINARY UTF8
BOOLEAN BOOLEAN
BINARY / VARBINARY BINARY
DECIMAL FIXED_LEN_BYTE_ARRAY DECIMAL
TINYINT INT32 INT_8
SMALLINT INT32 INT_16
INT INT32
BIGINT INT64
FLOAT FLOAT
DOUBLE DOUBLE
DATE INT32 DATE
TIME INT32 TIME_MILLIS
TIMESTAMP INT96 (또는 INT64)
ARRAY - LIST
MAP - MAP Parquet는 null map key를 지원하지 않음
MULTISET - MAP Parquet는 null map key를 지원하지 않음
ROW - STRUCT

더 알아보기 (Learn more)