Query-optimalisatie

Introductie tot datamodellering in Snowflake

Nuno Rocha

Director of Engineering

Uitvoervolgorde van een query

Uitvoervolgorde van query, volledige query

Introductie tot datamodellering in Snowflake

Uitvoervolgorde van een query (1)

Uitvoervolgorde van query; FROM

Introductie tot datamodellering in Snowflake

Uitvoervolgorde van een query (2)

Uitvoervolgorde van query; JOIN

Introductie tot datamodellering in Snowflake

Uitvoervolgorde van een query (3)

Uitvoervolgorde van query; WHERE

Introductie tot datamodellering in Snowflake

Uitvoervolgorde van een query (4)

Uitvoervolgorde van query; AGGREGATIONS

Introductie tot datamodellering in Snowflake

Uitvoervolgorde van een query (5)

Uitvoervolgorde van query; HAVING

Introductie tot datamodellering in Snowflake

Uitvoervolgorde van een query (6)

Uitvoervolgorde van query; SORT

Introductie tot datamodellering in Snowflake

Uitvoervolgorde van een query (7)

Uitvoervolgorde van query; LIMIT

Introductie tot datamodellering in Snowflake

Uitvoervolgorde van een query (8)

Definitieve uitvoervolgorde van query

  • BEST PRACTICES:
    • Vermijd SELECT *; specificeer alleen noodzakelijke kolommen
    • Gebruik LIMIT om het datavolume te verkleinen
    • Zet WHERE vroeg in om rijen te filteren en geheugen te besparen
    • Pas GROUP BY met aggregaties toe op verkleinde datasets voor snellere verwerking
Introductie tot datamodellering in Snowflake

Subquery's

Weergave van subquery

Introductie tot datamodellering in Snowflake

Subquery's

Gegevensmodel loyaliteitsprogramma hotelketen

Introductie tot datamodellering in Snowflake

Subquery's

  • Selecteer alle gasten met meer dan 1000 loyaliteitspunten
SELECT *
FROM guests
WHERE id IN (SELECT guest_id 
                  FROM loyalty_program 
                  WHERE loyalty_points > 1000);
Introductie tot datamodellering in Snowflake

Common table expressions

CTE

Introductie tot datamodellering in Snowflake

Common table expressions

  • Haal de details van de laatste boeking op
WITH latest_booking AS (
    SELECT guest_id, 
           MAX(checkout_date) AS latest_checkout
    FROM booking_details
    GROUP BY guest_id
)
SELECT bd.*, 
       bd.checkout_date AS latest_booking_date
FROM booking_details bd
    JOIN latest_booking lb 
        ON bd.guest_id = lb.guest_id 
        AND bd.checkout_date = lb.latest_checkout;
Introductie tot datamodellering in Snowflake

CTE's en subquery's

CTE's

  • Pluspunten

    • Verbetert de leesbaarheid bij complexe queries
    • Hergebruik binnen dezelfde query
    • Beter overzicht van SQL-queries
  • Minpunten

    • Kan prestatienadeel geven
    • Beperkt tot de scope van één query

Subquery's

  • Pluspunten

    • Eenvoudig en direct voor eenmalig gebruik
    • Flexibel op diverse plekken in een SQL-statement
  • Minpunten

    • Minder leesbaar naarmate het complexer wordt
    • Mogelijke prestatieproblemen bij geneste varianten
Introductie tot datamodellering in Snowflake

Query-uitvoeringstijden visualiseren

Queryprofielpagina

Introductie tot datamodellering in Snowflake

Overzicht terminologie en functies

  • Query-optimalisatie: Queries fine-tunen voor maximale efficiëntie en prestaties
  • Subquery: Een kleinere query binnen een hoofdquery om je te richten op specifieke data
  • Common Table Expressions (CTE's): Tijdelijke virtuele tabel tijdens een query
  • WITH .. AS: SQL-opdracht om een CTE te definiëren
  • LIMIT: SQL-clausule die het aantal rijen in het resultaat beperkt
  • HAVING: SQL-clausule om geaggregeerde data te filteren met functies zoals SUM, MAX, etc.
  • WHERE: SQL-clausule die rijen filtert vóór groepering, voor efficiëntere queries
Introductie tot datamodellering in Snowflake

Voorbeeldsjabloon voor CTE en subquery

  • Subquery
SELECT *
FROM table_name
WHERE column_name IN (SELECT column_name 
                  FROM table_name
                  WHERE column_name condition value);
  • CTE
WITH latest_booking_dates AS (
    SELECT column_name
    FROM table_name)
SELECT *
FROM table_name a
    JOIN other_table_name b 
    ON a.key_column = b.key_column;
Introductie tot datamodellering in Snowflake

Laten we oefenen!

Introductie tot datamodellering in Snowflake

Preparing Video For Download...