Utiliser les CTE avec Redshift

Introduction à Redshift

Jason Myers

Principal Architect

Expressions de table communes (CTE)

  • Ensemble de résultats temporaire
  • Simplifient les requêtes
  • Variante des sous-requêtes
Introduction à Redshift

Structures : sous-requête et CTE

SELECT division_name,
       revenue_total
       -- Subquery for top 10 divions by revenue
  FROM (SELECT division_id,
               SUM(revenue) AS revenue_total
          FROM orders
         GROUP BY division_id
         ORDER BY revenue_total DESC
         LIMIT 10) top_ten_divisions_by_rev
 WHERE revenue_total > 100000; 
-- CTE for top 10 divions by revenue
WITH top_ten_divisions_by_rev AS (
  SELECT division_id,
         SUM(revenue) AS revenue_total
    FROM orders
   GROUP BY division_id
   ORDER BY revenue_total DESC
   LIMIT 10)

-- Main query SELECT division_id, revenue_total -- FROM our CTE FROM top_ten_divisions_by_rev WHERE revenue_total > 100000;
Introduction à Redshift

CTE multiples

-- Top 10 divisions by revenue CTE
WITH top_ten_divisions_by_rev AS(
  SELECT division_id,
         SUM(revenue) AS revenue_total
    FROM orders
   GROUP BY division_id
   ORDER BY revenue_total DESC
   LIMIT 10),

-- Division ID and Name CTE division_names AS( SELECT id AS division_id, name AS division_name FROM divisions)
-- Main query
SELECT division_name,
       revenue_total
       -- FROM Top 10 CTE
  FROM top_ten_divisions_by_rev
  -- Joining so we can use the division name
  JOIN division_names USING (DIVISION_ID)
 WHERE revenue_total > 100000;
Introduction à Redshift

CTE multiples, jointures entre CTE

```sql
-- Selecting the division names
WITH division_names AS(
  SELECT id AS division_id,
         name AS division_name
    FROM divisions),
-- Selecting the top ten divisions by revenue
top_ten_divisions_by_rev AS(
  SELECT division_name,
         SUM(revenue) AS revenue_total
    FROM orders
    -- Joining in the division_names CTE
    JOIN divisions USING (division_id)
   GROUP BY division_name
   ORDER BY revenue_total DESC
   LIMIT 10);

Loi de Kernighan

Tout le monde sait que le débogage est deux fois plus difficile que d'écrire un programme au départ. Donc, si vous faites preuve du maximum d'ingéniosité en l'écrivant, comment pourrez-vous jamais le déboguer ?

Introduction à Redshift

Performance des CTE

  • Comme les sous-requêtes
  • Mieux que les sous-requêtes si réutilisées

Code SQL vs ordre d'exécution

Introduction à Redshift

Passons à la pratique !

Introduction à Redshift

Preparing Video For Download...