1. 대량의 CSV 데이터 준비
Parquet 형식을 이용해 보기 위해서는 대량의 데이터가 필요하다. 이번에는 미국 citibike사의 운행 데이터를 사용할 예정인데, 1년간의 운행 데이터는 압축해도 1기가를 훌쩍 넘기 때문에 parquet 형식 테스트에 적합하고 누구나 사용할 수 있도록 공개되어 있다. 그 중에서 선택한 것은 2020년도 citibike-운행 데이터로 zip으로 압축한 용량이 751.2메가인 단일 파일이다. 얼핏 용량이 작아 보이지만 압축을 풀면 무려 총 합이 3.61기가인 27개의 거대한 CSV 파일군으로, zip의 압축률을 환산하면 약 21%의 압축률입니다. 이번 쓰기 데모에서는 Parquet 형식의 쓰기가 일반 텍스트 CSV에 비해 어느 정도의 압축 효율을 보이는지 살펴보겠습니다. 먼저, 서두에 소개한 링크에서 운행 데이터를 다운로드하고, 로컬에서 압축을 푼 후에 나온 csv 파일들을 아래 그림과 같이 S3나 FTP 서버에 저장한다. [
2. CSV 파일 불러오기
Xplenty의 패키지 편집 화면에서 FileStorage source를 넣고 아래와 같이 상세 설정을 한 후, 모든 필드를 선택하면 아래 그림과 같이 Data Preview에서 데이터 불러오기를 확인할 수 있습니다. 항목명 설정값 Connector S3 Bucket 해당 커넥터의 버킷 이름 Path/2022-citibike-tridata/*.csv
Record delimiter
New Line
Record type
Delimiter values(CSVファイルを意味)
Delimiter
,
String qualifier
"
Escape character
\
First row contains field names
체크
Source action
Process all files from source
[

3. 세 가지 수집 날짜 및 시간대 추가
기존 데이터에 추가적으로 세 개의 타임존(UTC, KST, JST)으로 된 데이터 수집 일시 필드들을 추가합니다. 먼저 패키지 편집 화면에서 Select 컴포넌트를 추가하고 Auto-fill 버튼으로 소스의 필드들을 모두 추가해 둡니다. 그 다음 가장 마지막 필드로 이동하여 오른쪽의+를 클릭하면 새로운 필드가 추가되므로 아래 표에 따라 Alias와 Expression을 그대로 입력합니다. 확인을 위해 아래 그림과 같이 Previewボタンでデータを確認します。
Expression
Alias
ToString(CurrentTime(), 'yyyy-MM-dd HH:mm:ss')
imported_at_utc
ToString(SwitchTimeZone(CurrentTime(), 'Asia/Seoul'), 'yyyy-MM-dd HH:mm:ss')
imported_at_kst
ToString(SwitchTimeZone(CurrentTime(), 'Asia/Tokyo'), 'yyyy-MM-dd HH:mm:ss')
imported_at_jst
[

4. Parquet 형식으로 쓰기
데이터 수집 일시 필드들을 추가한 후, 정렬 컴포넌트에서 started_at 필드의 오름차순으로 데이터를 정렬합니다. 마지막으로 FileStorage destination을 연결하고 아래와 같이 세부 설정을 하면 패키지는 완성됩니다. 항목명 설정값 Connector S3 Target bucket 해당 커넥터의 버킷 이름 Target directoryparquet-output
Destination format
parquet
Merge output to single file
체크
Merge output to single file
Custom pattern
File name prefix
2020-citibike-tripdata.
[

5. 패키지 실행 및 결과 확인
패키지를 실행하면 정렬을 한 경우에는 18분이 채 걸리지 않고, 정렬을 하지 않았을 경우 7분이 걸렸습니다. 아래 그림은 정렬을 한 경우의 결과를 보여주고 있습니다. [

