Parquet vs CSV: valiz vs açık bavul
Parquet vs CSV
Bu derste neler öğreneceksin
- Parquet ın columnar yapısını açıklar
- Depolama maliyeti karşılaştırması yapar
- Gerçek dosya boyutlarını ölçer
İki Bavul: Biri Valiz, Biri Açık Bavul
Geçen derste BigQuery’nin nasıl çalıştığını gördük: columnar storage (sütun sütun depolama), slot’larla paralel sorgu. Şimdi soru şu: BigQuery’ye veri gönderirken hangi formatta göndermeliyiz? İki popüler seçenek var: CSV ve Parquet.
Düşün: tatile çıkıyorsun. Eşyalarını bir valize koyarsan — her şey düzenli, kapaklı, sıkı. Bavul açık olursa — kıyafetler dışarı taşar, üstüne basarsın ezilir, yağmur yağarsa ıslanır. Veri dosyaları da aynı:
- CSV = açık bavul. Her şey düz metin, virgüllerle ayrılmış, okumak kolay ama büyük ve yavaş.
- Parquet = sıkı valiz. Binary format, sütun sütun sıkıştırılmış, küçük ve hızlı.
CSV: Açık Bavul
CSV, virgülle ayrılmış düz metin. İnsan gözüyle açıp okuyabilirsin, Excel’de açılır, herkes bilir. Ama dezavantajları çok:
- Devasa boyut: 1 milyon satır × 10 sütun = ~100 MB civarı.
- Her sütun için tekrar tekrar okuma: Sen sadece “yaş” istesen bile dosyanın tamamı taranır.
- Sıkıştırma yok: ASCII metin çok yer kaplar. “istanbul” yazmak için 7 byte gider; Parquet’te bu neredeyse 1 byte olabilir.
Parquet: Sıkı Valiz
Parquet, columnar binary formattır. Yani:
- Veriler sütun sütun yazılır.
- Her sütun sıkıştırılır (ör. “istanbul” 50 kez geçiyorsa, sadece 1 kere yazılır + 50 tekrar sayısı).
- Sonuç: aynı veri %70-90 daha küçük dosyada saklanır.
- BigQuery, sorgu için sadece ihtiyacı olan sütunu okur — o yüzden ışık hızıyla döner.
Boyutları Kendin Ölç
Bu derse bir terminal aç. Python ile bir CSV yaz, aynısını Parquet’e çevir, boyutları karşılaştır:
# pip install pandas pyarrow
import pandas as pd
# 1 milyon satırlık örnek veri
df = pd.DataFrame({
"isim": ["Ali"] * 1_000_000,
"sehir": ["İstanbul"] * 1_000_000,
"puan": [95] * 1_000_000,
})
# CSV: açık bavul
df.to_csv("veri.csv", index=False)
# Parquet: sıkı valiz
df.to_parquet("veri.parquet", index=False)
Sonra terminalde:
ls -lh veri.*
# veri.csv ~24M
# veri.parquet ~4.4M
Aynı veri, 5-6 kat küçük dosyada. 1 GB’lık CSV’yi Parquet’e çevirirsen, 150-200 MB’a düşer. Cloud’da depolama ücrete tabi — bu fark, aylık faturanın 5-6 kat küçülmesi demek.
Maliyet Karşılaştırması (Gerçek Sayılar)
| Senaryo | CSV | Parquet |
|---|---|---|
| 10 GB dosya, “şehir” sütunu oku | 10 GB tarar | ~400 MB tarar |
| BigQuery maliyeti (on-demand) | ~$0.06 | ~$0.0025 |
| Cloud Storage depolama (aylık) | $0.20 | $0.04 |
Parquet kullanmak sadece hız değil, para da kazandırıyor. Bu yüzden büyük veri dünyasında CSV sadece “insanların bakması” için kullanılır; makine-makine iletişiminde Parquet standarttır.
Ne Öğrendik?
- CSV basit ama büyük ve yavaş (açık bavul).
- Parquet binary + columnar + compressed (sıkı valiz).
- Aynı veri Parquet’te %70-90 küçük saklanır.
- BigQuery, Parquet’teki sadece ihtiyacı olan sütunları okur → hızlı + ucuz.