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 rapidement
  • Rentabilité
    • Des temps de requête plus courts consomment moins de ressources telles que le processeur et la mémoire.

Image illustrant une utilisation élevée du processeur et de la mémoire entraînant des coûts financiers

Introduction à Snowflake SQL

Problèmes courants liés aux requêtes

  • Explosion des Join : Soyez prudent !

Incorrect

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

Résultats de la requête : lignes et détails temporels sans condition ON

Introduction à Snowflake SQL

Problèmes courants liés aux requêtes

  • Explosion des Join : Soyez prudent !

Correct

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

Résultats de la requête : lignes et détails temporels avec la condition ON

Introduction à Snowflake SQL

Problèmes courants liés aux requêtes

  • UNION ou UNION ALL : Comprenez la différence
    • UNION supprime les doublons, ralentit la requête
    • UNION ALL est plus rapide s'il n'y a pas de doublons
  • Traitement des Big Data
    • Utiliser les filtres pour affiner les données
    • Appliquer des limites pour obtenir 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, détails relatifs au temps et aux lignes

SELECT LIMIT 10* ⚡

SELECT *
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS
LIMIT 10

Détails de la requête, détails relatifs au temps et aux lignes à l'aide de LIMIT 10

Introduction à Snowflake SQL

Comment optimiser les requêtes ?

Utilisation de SELECT *

SELECT 
    *
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS

Détails de la requête, détails relatifs au temps et aux lignes

Éviter SELECT *

SELECT o_orderdate, 
    o_orderstatus 
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS

Détails de la requête, détails relatifs au temps et aux lignes à l'aide des noms de colonnes sélectionnés

Introduction à Snowflake SQL

Comment optimiser les requêtes ?

Filtrer tôt

  • Utiliser la clause WHERE dès le début
  • Appliquer des filtres avant les JOIN
    • JOIN traitera moins de lignes
Introduction à Snowflake SQL

Sans filtrage précoce

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 un filtrage précoce

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 fournit différentes mesures telles que 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%'

Screenshot 2023-09-01 at 14.32.29.png

  • ILIKE : Correspondance de chaînes sans distinction de casse
Introduction à Snowflake SQL

Historique des requêtes

  • Identifier les requêtes lentes ou 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 en fonction d'un temps d'exécution supérieur à 1 000 ms

Introduction à Snowflake SQL

Passons à la pratique !

Introduction à Snowflake SQL

Preparing Video For Download...