Snowflake में कैशिंग कैसे काम करती है

Snowflake में डेटा पाइपलाइन ऑटोमेशन

Emily Melhuish

Technical Curriculum Developer, Snowflake

तीन कैशिंग लेयर

कैशिंग लेयर्स.png

Snowflake तीन स्तरों पर परिणाम कैश करता है — हर एक का अलग स्कोप और अवधि

  • Result cache — पूरी क्वेरी के परिणाम; वेयरहाउस चलाए बिना लौटता है
  • Warehouse/data cache — हाल ही में स्कैन हुए माइक्रो-पार्टिशन मेमोरी व SSD में
  • Metadata cache — हमेशा ऑन; क्वेरी प्लानिंग में टेबल आँकड़े
Snowflake में डेटा पाइपलाइन ऑटोमेशन

Result Cache कब उपयोग होता है (और कब नहीं)

Snowflake क्वेरी रिज़ल्ट कैश फ्लो डायग्राम: क्वेरी से त्वरित cached परिणाम उपयोगकर्ता को लौटता है

शर्त कब Cache Miss होता है…
क्वेरी टेक्स्ट बिल्कुल मेल खाए केस, whitespace, या aliases अलग हों
कोई non-reusable functions नहीं रन के बीच बदलने वाले functions: RANDOM
आधार तालिकाएँ अपरिवर्तित पिछली रन के बाद DML, reclustering, या consolidation
संग्रहीत परिणाम उपलब्ध 24-घंटे TTL बिना reuse, या 31 दिन
रोल के पास आवश्यक अधिकार SELECT: role के पास अधिकार नहीं SHOW: अलग role
Snowflake में डेटा पाइपलाइन ऑटोमेशन

Warehouse cache और Metadata cache

Snowflake डेटा कैश डायग्राम: वेयरहाउस कैश हिट बनाम कैश मिस परिदृश्य

Warehouse cache

  • हाल में स्कैन हुए माइक्रो-पार्टिशन वेयरहाउस SSD + मेमोरी में रखता है
  • वेयरहाउस suspend होने पर साफ होता है
  • कैश बचाने के लिए auto-suspend पर्याप्त लंबा रखें

Metadata cache

  • हमेशा ऑन; Cloud Services में रहता है
  • टेबल आँकड़े सहेजता है
  • कुछ क्वेरियाँ केवल metadata से उत्तरित
Snowflake में डेटा पाइपलाइन ऑटोमेशन

Partition Pruning रोकने वाले SQL पैटर्न

प्रूनिंग रोकता है:

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

प्रूनिंग संभव बनाता है:

SELECT *
FROM logistics.shipments
WHERE dispatch_date >= '2024-03-01'
  AND dispatch_date <  '2024-04-01';
Snowflake में डेटा पाइपलाइन ऑटोमेशन

और दो SQL पैटर्न जिनसे बचें

SELECT * से बचें

-- हर कॉलम पढ़ता है
SELECT * 
FROM logistics.shipments 
WHERE region = 'EMEA';

-- केवल ज़रूरी कॉलम
SELECT shipment_id
, delivery_days 
FROM logistics.shipments 
WHERE region = 'EMEA';

Implicit cross-join से बचें

-- जॉइन शर्त नहीं = Cartesian
SELECT s.shipment_id
, c.name 
FROM shipments s, carriers c;

-- ON शर्त के साथ स्पष्ट JOIN
SELECT s.shipment_id
, c.name 
FROM shipments s 
JOIN carriers c ON s.carrier_id = c.id;
Snowflake में डेटा पाइपलाइन ऑटोमेशन

Ayo berlatih!

Snowflake में डेटा पाइपलाइन ऑटोमेशन

Preparing Video For Download...