Modül 4 · Veri Ambarı · ⏱ 5 dk

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:

  1. Devasa boyut: 1 milyon satır × 10 sütun = ~100 MB civarı.
  2. Her sütun için tekrar tekrar okuma: Sen sadece “yaş” istesen bile dosyanın tamamı taranır.
  3. 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)

SenaryoCSVParquet
10 GB dosya, “şehir” sütunu oku10 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.

Sıradaki

Partition & Cluster: büyük defteri yıllara böl →