Sorgu iyileştirme stratejileri

BigQuery'ye Giriş

Matt Forrest

Field CTO

Üç temel kural

Üç temel iyileştirme kuralı vardır:

  1. İşlenmesi gereken veriyi azaltın
  2. Sorgu işlemlerini optimize edin
  3. Sorgunuzun çıktı boyutunu azaltın
1 https://cloud.google.com/bigquery/docs/best-practices-performance-compute#use-bi-engine
BigQuery'ye Giriş

Veri miktarını azaltma

  • SELECT * kullanmaktan kaçının; yalnızca gereken sütunları seçin
  • CTE'lerde veriyi erken ve sık filtreleyin
  • Veriyi WHERE ile erken ve sık filtreleyin
BigQuery'ye Giriş

Join'ları optimize etme

  • CTE'lerle ihtiyacımız olan veriyi küçültün.
  • INT64 veri türüyle join yapın.
WITH filter_my_data AS (SELECT 
-- Önce CTE içinde 
-- WHERE ile filtreleyin
)
SELECT 
-- Daha az veriyle sorgu 
-- daha hızlı çalışır
JOIN a USING (user_id)
BigQuery'ye Giriş

WHERE koşulunu optimize etme

  • BigQuery'de şunları kullanın

    • BOOL
    • INT
    • FLOAT
    • DATE
  • WHERE, STRING veya BYTE içeren veri türleri optimal değildir.

Optimal değil

SELECT user_id, date_ordered
FROM dataset.table
WHERE product = 'shoes'

Optimal

SELECT user_id, date_ordered
FROM dataset.table
WHERE product_id = 1234
BigQuery'ye Giriş

ORDER BY iyileştirmeleri

  • ORDER BY her zaman sorgunun en dışında (sonunda) olmalıdır
  • Tek istisna, pencere ifadesi içinde ORDER BY kullanmaktır
BigQuery'ye Giriş

İyileştirme olmadan ORDER BY

Optimal değil

WITH order_total AS (SELECT
user_id,           
sum(product_price) as order_sum
FROM orders
GROUP BY user_id   
-- Order by sorgunun sonunda değil
ORDER BY last_purchase_date
)
SELECT order_total.order_sum, 
users.user_name
FROM dataset.users users
JOIN order_total USING (user_id);
BigQuery'ye Giriş

İyileştirilmiş ORDER BY

Optimal

WITH order_total AS (SELECT
user_id,    
last_purchase_date
sum(product_price) as order_sum
GROUP BY user_id         
)
SELECT order_total.order_sum, 
users.user_name
FROM dataset.users users
JOIN a USING (user_id)
-- Order by her zaman sonda olmalı
ORDER BY orders_total.last_purchase_date;
BigQuery'ye Giriş

EXISTS ve COUNT kullanımı

  • Yalnızca bir kaydın tabloda olup olmadığını bilmemiz gerekiyorsa EXISTS kullanın
  • Bu durumda COUNT kullanmaktan kaçının
SELECT EXISTS (

  -- Ana sorguyu exists çağrısı içinde bir alt sorgu olarak yazın
  SELECT
    user_id
  FROM
    dataset.table
  WHERE
    product_category = 'home_goods'
    AND status = 'Closed Account'
);
BigQuery'ye Giriş

Diğer iyileştirme yöntemleri

  • APPROX_TOP_SUM veya APPROX_COUNT_DISTINCT gibi yaklaşık toplu fonksiyonları kullanın.
  • Birçok BigQuery tablosu tarihe göre bölümlemelidir; WHERE koşuluna tarih ekleyin.
BigQuery'ye Giriş

Hadi pratik yapalım!

BigQuery'ye Giriş

Preparing Video For Download...