참고한 것들
Raw Data Encoding
- Parquet 에서는 다양한 type 의 데이터를 physical 하게는 한정된 방식으로 바꿔서 표현한다.
- 가령 UTC time 같은 경우에는 byte array 로 표현하는 등
- 총 8개가 있는데, 하나씩 살펴보자.
BOOLEAN
- Boolean 값은 0 과 1 이기 때문에 1bit 로 BP 된다.
- 다만 LSB 부터 시작한다는 점. 그래서 예를 들어보면 아래와 같은 boolean 배열은
label: A B C D E F G H
val: TRUE FALSE FALSE FALSE TRUE TRUE FALSE FALSE
- 이렇게 encoding 된다는 것.
encoding: 00110001 (0x31)
label: HGFEDCBA
INT32
, INT64
, INT96
- 얘는 별 Little endian 으로 4byte 혹은 8byte Integer 로 저장된다.
- 물론
INT96
은 12byte 로 저장된다. 근데 얘는 deprecated 되었으므로 신경쓰지 말자.
- 물론
FLOAT
, DOUBLE
- 얘도 별 특이사항 없이 그냥 IEEE 754 로 저장된다.
BYTE_ARRAY
, FIXED_LEN_BYTE_ARRAY
- 얘는 4byte little endian int32 로 byte array 의 길이를 저장한뒤, 그 다음에 해당 길이 만큼의 byte 들을 저장하는 식이다.
BYTE_ARRAY
의 경우에는 모든 value 에 대해 이렇게 저장하고,FIXED_LEN_BYTE_ARRAY
는 맨 앞에다가 길이는 하나만 저장하고, 다음에는 모두 고정크기의 byte array 가 나온다.- 예를 들어, 다음과 같은 애들을 저장하려고 한다면,
"AB" "CDE" "FGHI"
BYTE_ARRAY
는 이렇게 저장하고,
|---- length -----| |0| |---- length -----| |-1-| |---- length -----| |--2--|
0x02 0x00 0x00 0x00 A B 0x03 0x00 0x00 0x00 C D E 0x04 0x00 0x00 0x00 F G H I
FIXED_LEN_BYTE_ARRAY
는 이렇게 저장한다는 것.
|---- length -----| |-----0-----| |---1----| |--2--|
0x04 0x00 0x00 0x00 0x00 0x00 A B 0x00 C D E F G H I