Ana içeriğe geç
Kesit SQL
İleri · BigQuery ve Bulut Veri Ambarları

BigQuery'de bölümleme, kümeleme ve maliyet optimizasyonu

PARTITION BY, CLUSTER BY, materialized view ve sorgu maliyetini izlemek.

Uygulamada aç, 7 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

İndeks yerine bölümleme ve kümeleme

BigQuery'de klasik indeks yoktur. Büyük tablolarda okunan veriyi azaltmanın iki aracı vardır:

CREATE TABLE siparis_bolumlu
PARTITION BY order_date
CLUSTER BY channel, status
AS SELECT * FROM orders;

SELECT channel, COUNT(*) AS siparis
FROM siparis_bolumlu
WHERE order_date >= '2024-12-01' AND status = 'delivered'
GROUP BY channel;
Bu uygulamadaPARTITION BY ve CLUSTER BY sözdizimi kabul edilir ama tarayıcıdaki motor fiziksel bölümleme yapmaz; sonuçlar aynıdır.

Maliyet kontrol listesi

  1. SELECT * kullanma; sütunları adıyla seç.
  2. Bölüm filtresini daima yaz; tarih sütununu fonksiyona sokma (DATE(order_date) = ... yerine aralık).
  3. Sık çalışan özet sorgular için materialized view kullan; BigQuery değişen kısmı artımlı günceller.
  4. Aynı sorgu 24 saat içinde tekrar çalışırsa önbellekten ücretsiz döner (tablo değişmediyse).
  5. Kesin olması gerekmeyen sayımlarda APPROX_COUNT_DISTINCT çok daha ucuzdur.
  6. Geliştirirken “maximum bytes billed” sınırı koy.
-- Son 7 günde en çok veri tarayan sorgular
SELECT user_email,
       ROUND(total_bytes_billed / POW(1024, 4), 3) AS tb,
       LEFT(query, 120) AS sorgu
FROM `region-eu`.INFORMATION_SCHEMA.JOBS
WHERE creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
  AND job_type = 'QUERY'
ORDER BY total_bytes_billed DESC
LIMIT 10;

Fiyatlandırma modelleri

İsteğe bağlı modelde taranan bayt başına, kapasite (Editions) modelinde ayrılan işlem gücü (slot) başına ödenir. Güncel fiyatlar bölgeye göre değişir; Google Cloud'un fiyat sayfasından kontrol et.

Alıştırmalara geç (7)