ℹ Bu derste BigQuery e sorgu gönderilir. Ebeveyn eşliğinde.
Modül 4 · Veri Ambarı · ⏱ 7 dk

BigQuery'e ilk sorgu: 1 milyon satır + BigQuery internals

First BigQuery query + internals

Bu derste neler öğreneceksin

  • BigQuery columnar storage mantığını açıklar
  • 1M satır üzerinde SELECT çalıştırır
  • Slot-based query engine i kavrar

Production Veri Ambarı: BigQuery

Postgres ve DuckDB öğrendin. Bunlar tek makinede çalışan, lokal işler için harika veritabanları. Ama bir gün:

  • Şirketin her gün 10 milyar satır event üretiyor.
  • Analitik ekibi anlık sorgu istiyor (gecikme < 5 sn).
  • Veri bilimci 3 aylık veriyi scan etmek zorunda kalmak istemiyor.
  • Finans ekibi kullanım başına ödemek istiyor (capex değil opex).

Bu noktada cloud data warehouse çağrısı yapılır. Piyasada üç büyük oyuncu var: BigQuery (Google), Snowflake, Redshift (AWS). Bu kursta BigQuery’ye odaklanıyoruz çünkü GCP ile entegre, slot modeli şeffaf, ve bigquery-public-data ile 300+ GB ücretsiz örnek veri sağlıyor.

BigQuery’nin temel mimari kararları: serverless (sunucu yönetmiyorsun), columnar storage (Capacitor adlı kendi formatı), slot-based execution (Dremel motoru). Bunları sırayla açalım.

Columnar Storage: Capacitor

Postgres gibi row-based sistemlerde bir satırün tüm sütunları yan yana saklanır. Analitik sorgular genelde tablonun %5-10 sütununa dokunur — ama row-based depolama seni tüm satırı okumaya zorlar. Bu yüzden analitik için yavaştır.

BigQuery Capacitor adlı sütun bazlı binary format kullanır. Aynı sütunun tüm değerleri bir blokta saklanır, blok başına istatistik tutulur (min, max, null count). Sorgu planlayıcısı (optimizer) bu istatistiklerle block pruning yapar: sadece ihtiyacı olan blokları okur. 10 milyar satırlık tabloda WHERE country = 'TR' demek, Türkiye bloklarını bulup sadece onları yüklemek demek.

Üstelik Capacitor otomatik sıkıştırma yapar. Yüksek tekrarlı sütunlarda (ülke kodu, status) sıkıştırma oranı 10-50x olabilir. Storage maliyeti düşer, okuma I/O’su düşer, sorgu hızlanır. Üçü bir arada.

Dremel + Slot-Based Execution

BigQuery’nin sorgu motoru Dremel’dir. 2010’dan beri Google’ın iç sistemlerinde kullanılan, onlarca yıllık mühendislik birikimi olan bir MPP (massively parallel processing) motoru.

Bir sorgu geldiğinde:

  1. Parse & Plan: SQL → logical plan → physical plan (slot dağılımı dahil).
  2. Mixer/Shuffle: Veri partition’ları arasında gerekli shuffle (ör. JOIN için) yapılır.
  3. Execute: Binlerce slot paralel çalışır, her slot bir iş parçacığı.
  4. Aggregate: Sonuçlar tree’de yukarı toplanır, kullanıcıya döner.

İki mod var:

  • On-demand: Google her sorgu için otomatik slot ayırır. Faturalandırma: taradığın byte ($6.25 / TB). Küçük firmalar için ideal.
  • Reservations (slots): Aylık/yıllık belirli sayıda slot satın alırsın, her zaman senin için hazır bekler. Faturalandırma: slot saati. Öngörülebilir maliyet isteyen büyük firmalar için.

1M Satır Sorgu: Hands-on

Public dataset üzerinde gerçek bir sorgu. New York taksi verisi 1.4 milyar satır, ~85 GB sıkıştırılmış. Bunu kendi makinende 1.4 milyar satırla sorgulamayı deneseydin, Postgres muhtemelen 1 saatte bitirirdi. BigQuery’de saniyeler sürer.

-- 2024 yılı taksi yolculukları: pickup saati, yolcu, mesafe, tutar
SELECT
  EXTRACT(HOUR FROM pickup_datetime) AS saat,
  COUNT(*) AS yolculuk_sayisi,
  AVG(trip_distance) AS ortalama_mesafe,
  SUM(total_amount) AS toplam_gelir
FROM `bigquery-public-data.new_york_taxi.taxi_trips`
WHERE pickup_datetime BETWEEN '2024-01-01' AND '2024-12-31'
  AND passenger_count > 0
  AND trip_distance > 0
GROUP BY saat
ORDER BY saat;

Sorgu bittiğinde Query information panelinde şunları görürsün:

  • Bytes processed: ~6 GB (sadece gerekli sütunlar, 85 GB’ın 1/14’ü).
  • Bytes billed: 6 GB → $0.04.
  • Slot ms: toplam slot-saniye (paralelliğin bir ölçüsü).
  • Execution time: ~3 sn.

Aynı sonucu 1.4 milyar satırın tamamını tarasaydın 85 GB işlerdin → $0.55 + 45 sn. Sorgu yazarken SELECT * yazmamak tek başına büyük kazanç.

Slot Maliyetini Anlama

“Slot ms” kavramı önemli. Google slot-saniye başına fiyatlandırma yapar (reservations için). Sorgunun ne kadar paralel çalıştığına bağlı:

  • 100 slot × 1000 ms = 100.000 slot-ms = 100 slot-saniye.
  • 1000 slot × 100 ms = 100.000 slot-ms = 100 slot-saniye. (Aynı iş, 10x fazla paralellik, aynı maliyet).

Bu yüzden partitioning ve clustering (sonraki ders) sadece hız değil, slot-ms de düşürür — daha az slot daha az süre çalışır, fatura düşer.

On-demand vs Reservation

KriterOn-demandReservation
Maliyet modeliTaradığın byte ($6.25/TB)Slot saati ($0.04/slot-saat)
ÖngörülebilirlikDüşük (kötü sorgu = yüksek fatura)Yüksek (sabit aylık)
KullanımAd-hoc, küçük ekipler7/24 production workload
Auto-scalingSınırsız slot (Google ayarlar)Satın aldığın kadar

Junior bir veri mühendisi olarak on-demand ile başla, maliyet çılgınlaşırsa reservation’a geç.

Slot Stratejisi: BI Engine

Sık çalışan dashboard sorguların (Dashboard için 5 sn’nin altında cevap) için BI Engine kullanabilirsin. In-memory vectorized engine, sık sorgulanan veri setlerini RAM’de tutar. Aylık $0.06 / GB / saat karşılığında 100x hızlanma mümkün.

Ne Öğrendik?

  • BigQuery = serverless columnar data warehouse, Dremel motoru.
  • Capacitor sütun bazlı + otomatik sıkıştırma → hızlı + ucuz.
  • Slot-based execution: binlerce slot paralel çalışır, sorgu saniyeler içinde biter.
  • Faturalandırma = bytes processed (on-demand) ya da slot-saat (reservation).
  • SELECT * yazma, sadece ihtiyacın olan sütunları çek.

Sıradaki

Parquet vs CSV: storage formatlarının maliyet etkisi →