Konversi CSV ke Apache Parquet dengan Go-lang
CSV (comma separated values) adalah salah satu format penyimpanan data tabular yang populer digunakan, mudah digunakan dan diubah karena tidak membutuhkan protokol khusus untuk membuat dan membacanya. Di sisi lain ada Apache Parquet, sebuah format penyimpanan data yang berorientasi kolom yang memiliki beberapa keunggulan; misalkan kita dapat melakukan kalkulasi agregat terhadap kolom dengan sangat cepat karena data sebuah kolom disimpan dalam blok halaman (pages) yang berurutan dan juga rasio kompresi data yang bagus. Kali ini saya akan menunjukan contoh sederhana untuk melakukan konversi data dari format CSV ke Apache Parquet menggunakan bahasa pemrograman Go-lang.
Persiapan
Contoh data yang digunakan dalam tulisan kali ini adalah "Crypto Data Hourly Price since 2017 to 2023-10" yang dapat diakses di situs Kaggle. Data ini dipilih karena ukurannya relatif cukup besar untuk contoh sederhana yaitu sekitar 90 Megabyte.
Lalu kita akan menggunakan salah satu library open-source untuk menulis data dalam format Apache Parquet. Kurang lebih struktur struct data yang digunakan di Go-lang sebagai berikut:
type PriceHistory struct {
Date string `parquet:"name=date, type=BYTE_ARRAY, convertedtype=UTF8"`
Symbol string `parquet:"name=symbol, type=BYTE_ARRAY, convertedtype=UTF8"`
Open float64 `parquet:"name=open, type=DOUBLE"`
High float64 `parquet:"name=high, type=DOUBLE"`
Low float64 `parquet:"name=low, type=DOUBLE"`
Close float64 `parquet:"name=close, type=DOUBLE"`
VolumeUsdt int64 `parquet:"name=volume_usdt, type=INT64"`
TradeCount int64 `parquet:"name=trade_count, type=INT64"`
Token string `parquet:"name=token, type=BYTE_ARRAY, convertedtype=UTF8"`
Hour int `parquet:"name=hour, type=INT32"`
Day string `parquet:"name=day, type=BYTE_ARRAY, convertedtype=UTF8"`
}
Langkah-langkah
Pertama-tama silahkan unduh dataset CSV, lalu ekstrak file ZIP-nya. Kita akan menggunakan file bernama crypto_data.csv
.
Selanjutnya Anda dapat menyiapkan proyek Go-lang code, sebagai awalan dapat melakukan git clone
terhadap repositori GitHub yang sudah saya siapkan di andypmw/big-data-analytic.
Misalkan struktur direktori yang seperti ini:
/home/andy/code/go/src/github.com/andypmw/big-data-analytic
Anda dapat masuk ke folder berikut:
cd /home/andy/code/go/src/github.com/andypmw/big-data-analytic/convert-csv-to-parquet-using-golang/cmd/converter/
Bisa melakukan instalasi pustaka Go-lang yang diperlukan dengan perintah ini:
go mod tidy
Selanjutnya silahkan salin file CSV yang diperlukan ke dalam folder tadi. Kita perlu membuang baris pertama dari file CSV tersebut (yang berisi judul kolom) dengan perintah berikut (di Linux atau Mac):
tail -n +2 crypto_data.csv > crypto-price-history.csv
Selanjutnya kita bisa mencoba menjalankan source code Go-lang untuk melakukan konversi file CSV menjadi file Apache Parquet dengan perintah berikut:
go run main.go
Jika eksekusi Go-lang berhasil, Anda akan mendapatkan hasil akhir kurang lebih seperti ini: