CTE's gebruiken met Redshift

Introductie tot Redshift

Jason Myers

Principal Architect

Common table expressions (CTE's)

  • Tijdelijke resultaatset
  • Maakt queries eenvoudiger
  • Alternatief voor subquery's
Introductie tot Redshift

Structuren: subquery vs. CTE

SELECT division_name,
       revenue_total
       -- Subquery voor top 10 divisies op omzet
  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 voor top 10 divisies op omzet
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)

-- Hoofdquery SELECT division_id, revenue_total -- VAN onze CTE FROM top_ten_divisions_by_rev WHERE revenue_total > 100000;
Introductie tot Redshift

Meerdere CTE's

-- CTE top 10 divisies op omzet
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),

-- CTE divisie-ID en -naam division_names AS( SELECT id AS division_id, name AS division_name FROM divisions)
-- Hoofdquery
SELECT division_name,
       revenue_total
       -- VAN Top 10-CTE
  FROM top_ten_divisions_by_rev
  -- Join zodat we de divisienaam kunnen gebruiken
  JOIN division_names USING (DIVISION_ID)
 WHERE revenue_total > 100000;
Introductie tot Redshift

Meerdere CTE's, CTE-joins

-- Selecteren van de divisienamen
WITH division_names AS(
  SELECT id AS division_id,
         name AS division_name
    FROM divisions),
-- Selecteren van de top tien divisies op omzet
top_ten_divisions_by_rev AS(
  SELECT division_name,
         SUM(revenue) AS revenue_total
    FROM orders
    -- Join met de division_names-CTE
    JOIN divisions USING (division_id)
   GROUP BY division_name
   ORDER BY revenue_total DESC
   LIMIT 10);

Wet van Kernighan

Iedereen weet dat debuggen twee keer zo moeilijk is als het schrijven van een programma. Dus als je bij het schrijven al zo slim mogelijk bent, hoe ga je het dan ooit debuggen?

Introductie tot Redshift

CTE-prestaties

  • Zelfde als subquery's
  • Beter dan subquery's bij hergebruik

SQL-code vs. uitvoeringsvolgorde

Introductie tot Redshift

Laten we oefenen!

Introductie tot Redshift

Preparing Video For Download...