Snowflake'te Önbellekleme Nasıl Çalışır

Snowflake'te Veri Pipeline'larını Otomatikleştirme

Emily Melhuish

Technical Curriculum Developer, Snowflake

Üç Önbellekleme Katmanı

Önbellekleme katmanları.png

Snowflake sonuçları farklı kapsam ve süreyle üç düzeyde önbelleğe alır

  • Sonuç önbelleği — tam sorgu sonuçlarını saklar ve ambarı çalıştırmadan döndürür
  • Ambar veya veri önbelleği — yakın zamanda taranan mikro-bölümler bellek ve SSD'de
  • Meta veri önbelleği — her zaman açık; sorgu planlamada tablo istatistikleri
Snowflake'te Veri Pipeline'larını Otomatikleştirme

Sonuç Önbelleği ne zaman kullanılır (ve ne zaman kullanılmaz)

Snowflake Sorgu Sonuç Önbelleği akış diyagramı: kullanıcının anında önbellekten sonuç alması

Koşul Ne zaman önbellek kaçırılır…
Sorgu metni birebir aynı Büyük/küçük harf, boşluk veya takma adlar farklı
Yeniden kullanılamaz işlev yok Çalışmalar arasında değişen işlevler: RANDOM
Alttaki tablolar değişmedi Son çalışmadan beri DML, yeniden kümelendirme veya yakınsama
Kalıcı sonuç hâlâ mevcut 24 saatlik TTL yeniden kullanılmadan doldu veya 31 gün
Rolün gerekli ayrıcalıkları var SELECT: rolün ayrıcalığı yok SHOW: farklı rol
Snowflake'te Veri Pipeline'larını Otomatikleştirme

Ambar önbelleği ve Meta veri önbelleği

Snowflake veri önbelleği diyagramı: ambar önbelleği isabet/kaçırma senaryoları

Ambar önbelleği

  • Yakın zamanda taranan mikro-bölümleri ambar SSD'si + bellekte tutar
  • Ambar askıya alınınca temizlenir
  • Önbelleği korumak için otomatik askıyı yeterince uzun tutun

Meta veri önbelleği

  • Her zaman açık; Cloud Services içinde
  • Tablo istatistiklerini saklar
  • Bazı sorgular yalnızca meta veriden yanıtlanır
Snowflake'te Veri Pipeline'larını Otomatikleştirme

Bölüm Budamayı Engelleyen SQL Kalıpları

Budamayı engeller:

SELECT *
FROM logistics.shipments
WHERE MONTH(dispatch_date) = 3;

Budamaya izin verir:

SELECT *
FROM logistics.shipments
WHERE dispatch_date >= '2024-03-01'
  AND dispatch_date <  '2024-04-01';
Snowflake'te Veri Pipeline'larını Otomatikleştirme

Kaçınılacak iki SQL kalıbı daha

SELECT * kullanmaktan kaçının

-- Tüm sütunları okur
SELECT * 
FROM logistics.shipments 
WHERE region = 'EMEA';

-- Yalnızca gerekeni okur
SELECT shipment_id
, delivery_days 
FROM logistics.shipments 
WHERE region = 'EMEA';

Örtük çapraz birleştirmelerden kaçının

-- Birleştirme koşulu yok = Kartezyen
SELECT s.shipment_id
, c.name 
FROM shipments s, carriers c;

-- ON koşullu açık JOIN
SELECT s.shipment_id
, c.name 
FROM shipments s 
JOIN carriers c ON s.carrier_id = c.id;
Snowflake'te Veri Pipeline'larını Otomatikleştirme

Hadi pratik yapalım!

Snowflake'te Veri Pipeline'larını Otomatikleştirme

Preparing Video For Download...