Snowflake Query Optimization

Snowflake SQL परिचय

George Boorman

Senior Curriculum Manager, DataCamp

Snowflake में क्वेरियाँ क्यों ऑप्टिमाइज़ करें?

  • तेज़ परिणाम पाएँ
  • लागत-कुशलता
    • कम क्वेरी समय से CPU और मेमोरी जैसी संसाधनों की खपत घटती है.

CPU और मेमोरी के अधिक उपयोग से पैसे खर्च होते दिखाते चित्र

Snowflake SQL परिचय

आम क्वेरी समस्याएँ

  • Exploding Joins: सावधान रहें!

❌ Incorrect ❌

SELECT *
FROM order_details AS od
JOIN pizzas AS p -- Missing ON condition leading to exploding joins

ON कंडीशन न होने पर क्वेरी परिणामों की rows और समय विवरण

Snowflake SQL परिचय

आम क्वेरी समस्याएँ

  • Exploding Joins: सावधान रहें!

✅ Correct ✅

SELECT *
FROM order_details AS od
JOIN pizzas AS p
ON od.pizza_id = p.pizza_id

ON कंडीशन के साथ क्वेरी परिणामों की rows और समय विवरण

Snowflake SQL परिचय

आम क्वेरी समस्याएँ

  • UNION या UNION ALL: फर्क समझें
    • UNION डुप्लिकेट हटाता है, क्वेरी धीमी कर सकता है
    • UNION ALL तेज़ है यदि डुप्लिकेट नहीं हैं
  • बड़े डेटा का हैंडलिंग
    • डेटा सीमित करने के लिए फ़िल्टर लगाएँ
    • तेज़ नतीजों के लिए लिमिट लगाएँ
Snowflake SQL परिचय

क्वेरियों को कैसे ऑप्टिमाइज़ करें?

SELECT * ⌛

SELECT
    *
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS

क्वेरी विवरण, समय और rows का विवरण

SELECT LIMIT 10* ⚡

SELECT *
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS
LIMIT 10

LIMIT 10 के साथ क्वेरी विवरण, समय और rows का विवरण

Snowflake SQL परिचय

क्वेरियों को कैसे ऑप्टिमाइज़ करें?

SELECT * का उपयोग ⌛

SELECT 
    *
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS

क्वेरी विवरण, समय और rows का विवरण

SELECT * से बचें ⚡

SELECT o_orderdate, 
    o_orderstatus 
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS

कॉलम नाम चुनकर क्वेरी विवरण, समय और rows का विवरण

Snowflake SQL परिचय

क्वेरियों को कैसे ऑप्टिमाइज़ करें?

जल्दी फ़िल्टर करें

  • WHERE क्लॉज़ शुरुआत में लगाएँ
  • JOIN से पहले फ़िल्टर लगाएँ
    • JOIN कम rows प्रोसेस करेगा
Snowflake SQL परिचय

Early filtering के बिना

SELECT orders.order_id, 
       orders.order_date, 
       pizza_type.name, 
       pizzas.pizza_size
FROM orders
JOIN order_details 
ON orders.order_id = order_details.order_id
JOIN pizzas 
ON order_details.pizza_id = pizzas.pizza_id
JOIN pizza_type 
ON pizzas.pizza_type_id = pizza_type.pizza_type_id
WHERE orders.order_date = '2015-01-01';  -- Filtering after JOIN
Snowflake SQL परिचय

Early filtering के साथ

WITH filtered_orders AS (
  SELECT *
  FROM orders
  WHERE order_date = '2015-01-01'  -- Filtering in CTE before JOIN
)
SELECT filtered_orders.order_id, 
       filtered_orders.order_date, 
       pizza_type.name, 
       pizzas.pizza_size
FROM filtered_orders -- Joining with CTE
JOIN order_details
ON filtered_orders.order_id = order_details.order_id
JOIN pizzas
ON order_details.pizza_id = pizzas.pizza_id
JOIN pizza_type
ON pizzas.pizza_type_id = pizza_type.pizza_type_id;
Snowflake SQL परिचय

Query history

  • Query History
    • snowflake.account_usage.query_history
    • Query History में execution time जैसे विभिन्न मेट्रिक्स मिलते हैं
SELECT query_text, start_time, end_time, execution_time 
FROM
   snowflake.account_usage.query_history
WHERE query_text ILIKE '%order_details%'

Screenshot 2023-09-01 at 14.32.29.png

  • ILIKE: केस-इन्सेंसिटिव स्ट्रिंग-मैचिंग
Snowflake SQL परिचय

Query history

  • धीमी या बार-बार चलने वाली क्वेरियों को पहचानें
SELECT query_text, 
    start_time, 
    end_time, 
    execution_time 
FROM
   snowflake.account_usage.query_history
WHERE
   execution_time > 1000

1000ms से बड़े execution time पर आधारित फ़िल्टरिंग परिणाम

Snowflake SQL परिचय

अभ्यास करते हैं!

Snowflake SQL परिचय

Preparing Video For Download...