QUALIFY: pencere fonksiyonuna göre filtre
“Her müşterinin son siparişi” gibi sorularda normalde ROW_NUMBER'ı bir alt sorguda hesaplayıp dışarıda filtreleriz. BigQuery (ve Snowflake, Databricks) bunu QUALIFY ile tek adımda yapar: QUALIFY, pencere fonksiyonları için WHERE gibidir.
SELECT customer_id, order_id, order_date FROM orders WHERE customer_id <= 5 QUALIFY ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date DESC, order_id DESC) = 1 ORDER BY customer_id;
SELECT * EXCEPT ve REPLACE
Geniş tablolarda “birkaç sütun hariç hepsi” demek için:
SELECT * EXCEPT (email, birth_year) FROM customers WHERE customer_id <= 3;
SELECT * REPLACE (UPPER(city) AS city) ise bir sütunu dönüştürülmüş haliyle değiştirir.
SAFE_ fonksiyonlar: hata yerine NULL
Kirli veride tek bir hatalı değer tüm sorguyu durdurur. SAFE_ önekli fonksiyonlar hata yerine NULL döndürür:
SELECT signup_date,
COALESCE(SAFE.PARSE_DATE('%Y-%m-%d', signup_date),
SAFE.PARSE_DATE('%d.%m.%Y', signup_date)) AS tarih
FROM raw_signups
LIMIT 6;
| Fonksiyon | Hata durumunda |
|---|---|
SAFE_CAST('abc' AS INT64) | NULL |
SAFE_DIVIDE(10, 0) | NULL |
SAFE.PARSE_DATE('%d.%m.%Y', '31.02.2024') | NULL |
Diğer SQL türlerindeki karşılıklarıSQL Server'da TRY_CAST / TRY_CONVERT, PostgreSQL'de NULLIF ile bölme, Oracle'da
CAST(... DEFAULT NULL ON CONVERSION ERROR).