Optimisation des requêtes Snowflake

Introduction à Snowflake SQL

George Boorman

Senior Curriculum Manager, DataCamp

Pourquoi optimiser les requêtes dans Snowflake ?

  • Obtenir des résultats plus rapides
  • Réduire les coûts
    • Des requêtes plus courtes utilisent moins de ressources comme le processeur et la mémoire.

Image montrant une forte utilisation du processeur et de la mémoire entraînant des coûts

Introduction à Snowflake SQL

Problèmes courants de requêtes

  • Jointures explosives : soyez prudent(e)(s) !

Incorrect

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

Résultat de requête et durée sans condition ON

Introduction à Snowflake SQL

Problèmes courants de requêtes

  • Jointures explosives : soyez prudent(e)(s) !

Correct

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

Résultat de requête et durée avec condition ON

Introduction à Snowflake SQL

Problèmes courants de requêtes

  • UNION ou UNION ALL : connaître la différence
    • UNION supprime les doublons et ralentit la requête
    • UNION ALL est plus rapide s'il n'y a pas de doublons
  • Gérer de gros volumes de données
    • Utilisez des filtres pour restreindre les données
    • Appliquez des limites pour des résultats plus rapides
Introduction à Snowflake SQL

Comment optimiser les requêtes ?

SELECT * ⌛

SELECT
    *
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS

Détails de la requête : durée et nombre de lignes

SELECT LIMIT 10* ⚡

SELECT *
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS
LIMIT 10

Détails de la requête avec LIMIT 10 : durée et lignes

Introduction à Snowflake SQL

Comment optimiser les requêtes ?

Utiliser SELECT *

SELECT 
    *
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS

Détails de la requête : durée et nombre de lignes

Éviter SELECT *

SELECT o_orderdate, 
    o_orderstatus 
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS

Détails de la requête en choisissant les colonnes : durée et lignes

Introduction à Snowflake SQL

Comment optimiser les requêtes ?

Filtrer tôt

  • Utilisez la clause WHERE dès le départ
  • Appliquez les filtres avant les JOIN
    • Les JOIN traiteront moins de lignes
Introduction à Snowflake SQL

Sans filtrage anticipé

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
Introduction à Snowflake SQL

Avec filtrage anticipé

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;
Introduction à Snowflake SQL

Historique des requêtes

  • Historique des requêtes
    • snowflake.account_usage.query_history
    • L'historique des requêtes donne des mesures comme le temps d'exécution
SELECT query_text, start_time, end_time, execution_time 
FROM
   snowflake.account_usage.query_history
WHERE query_text ILIKE '%order_details%'

Capture d'écran 2023-09-01 à 14.32.29.png

  • ILIKE : recherche de chaînes insensible à la casse
Introduction à Snowflake SQL

Historique des requêtes

  • Repérer les requêtes lentes ou très fréquentes
SELECT query_text, 
    start_time, 
    end_time, 
    execution_time 
FROM
   snowflake.account_usage.query_history
WHERE
   execution_time > 1000

Filtrage des résultats où le temps d'exécution dépasse 1000 ms

Introduction à Snowflake SQL

Passons à la pratique !

Introduction à Snowflake SQL

Preparing Video For Download...