Expressions de table communes

Introduction à BigQuery

Matthew Forrest

Field CTO

Qu'est-ce qu'une CTE ?

-- Les mots-clés WITH amorcent la CTE
WITH our_cte AS (
  SELECT column1, column2
  FROM table
)


/* La CTE est entre parenthèses et peut servir de table dans la requête principale ci-dessous */ SELECT * FROM our_cte
Introduction à BigQuery

Sous-requêtes vs CTE

Sous-requête

SELECT *
FROM (
  SELECT order_id, status
  FROM ecommerce.ecomm_order_status
) AS subquery

CTE

WITH cte_name AS (
  SELECT order_id, status
  FROM ecommerce.ecomm_order_status
)
SELECT *
FROM cte_name
Introduction à BigQuery

Rédiger des CTE

-- Toutes les CTE commencent par le mot-clé WITH
WITH cte_name AS


-- La CTE est entre parenthèses (SELECT col_1, col_2 FROM tablename WHERE col_1 > 10 )
-- La nouvelle CTE « cte_name » est accessible seulement dans la portée de cette requête SELECT * FROM cte_name LIMIT 10
Introduction à BigQuery

Utiliser plusieurs CTE

WITH orders AS (
  SELECT order_id, status
  FROM ecommerce.ecomm_order_status
),

-- Les CTE supplémentaires ne réutilisent pas WITH et sont séparées par des virgules order_details AS ( SELECT orders.*, details.order_items FROM ecommerce.ecomm_orders details ```
Introduction à BigQuery

Utiliser des CTE pour filtrer les données

WITH filtered_data AS (
  SELECT *
  FROM ecommerce.ecomm_orders
  -- Ici, on filtre les données dans notre CTE
  WHERE order_status = 'delivered'
)
SELECT order_id, order_status
FROM filtered_data
| order_id | order_status |
|----------|--------------|
| 1        | delivered    |
| 2        | delivered    |
Introduction à BigQuery

Utiliser des CTE pour optimiser les requêtes

WITH precomputed_data AS (
  SELECT order_id, SUM(payment_value) AS total
  FROM ecommerce.ecomm_payments
  GROUP BY order_id
)
SELECT *
FROM precomputed_data
WHERE total > 1000
| order_id | total   |
|----------|---------|
| 1        | 50000   |
| 2        | 8000    |
Introduction à BigQuery

Utiliser des CTE pour joindre des données

WITH cte1 AS (
  SELECT order_id, status
  FROM ecommerce.ecomm_order_status
),
cte2 AS (
  SELECT order_id, order_items
  FROM ecommerce.ecomm_orders
)
SELECT *
FROM cte1
JOIN cte2 USING (order_id)
Introduction à BigQuery

Passons à la pratique !

Introduction à BigQuery

Preparing Video For Download...