Optimizarea interogărilor în Snowflake

Introducere în Snowflake SQL

George Boorman

Senior Curriculum Manager, DataCamp

De ce să optimizăm interogările în Snowflake?

  • Rezultate mai rapide
  • Eficiență a costurilor
    • Interogările mai scurte consumă mai puține resurse (CPU și memorie).

Imagine reprezentând utilizare ridicată a CPU și memoriei, conducând la costuri

Introducere în Snowflake SQL

Probleme frecvente ale interogărilor

  • JOIN-uri explozive: Fiți precauți!

Incorect

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

Detalii rezultate interogare fără condiție ON

Introducere în Snowflake SQL

Probleme frecvente ale interogărilor

  • JOIN-uri explozive: Fiți precauți!

Corect

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

Detalii rezultate interogare cu condiție ON

Introducere în Snowflake SQL

Probleme frecvente ale interogărilor

  • UNION sau UNION ALL: cunoașteți diferența
    • UNION elimină duplicatele și încetinește interogarea
    • UNION ALL este mai rapid dacă nu există duplicate
  • Gestionarea datelor de mari dimensiuni
    • Utilizați filtre pentru a reduce datele
    • Aplicați limite pentru rezultate mai rapide
Introducere în Snowflake SQL

Cum se optimizează interogările?

SELECT * ⌛

SELECT
    *
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS

Detalii interogare, timp și rânduri

SELECT LIMIT 10* ⚡

SELECT *
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS
LIMIT 10

Detalii interogare, timp și rânduri folosind LIMIT 10

Introducere în Snowflake SQL

Cum se optimizează interogările?

Utilizarea SELECT *

SELECT 
    *
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS

Detalii interogare, timp și rânduri

Evitați SELECT *

SELECT o_orderdate, 
    o_orderstatus 
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS

Detalii interogare, timp și rânduri folosind nume de coloane

Introducere în Snowflake SQL

Cum se optimizează interogările?

Filtrați devreme

  • Utilizați clauza WHERE cât mai devreme
  • Aplicați filtrele înainte de JOIN-uri
    • JOIN va procesa mai puține rânduri
Introducere în Snowflake SQL

Fără filtrare timpurie

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
Introducere în Snowflake SQL

Cu filtrare timpurie

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;
Introducere în Snowflake SQL

Istoricul interogărilor

  • Istoricul interogărilor
    • snowflake.account_usage.query_history
    • Istoricul interogărilor oferă diverse metrici, precum timpul de execuție
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: potrivire de șiruri fără distincție între majuscule/minuscule
Introducere în Snowflake SQL

Istoricul interogărilor

  • Identificați interogările lente sau frecvente
SELECT query_text, 
    start_time, 
    end_time, 
    execution_time 
FROM
   snowflake.account_usage.query_history
WHERE
   execution_time > 1000

Rezultate filtrate după timp de execuție mai mare de 1000ms

Introducere în Snowflake SQL

Să exersăm!

Introducere în Snowflake SQL

Preparing Video For Download...