Introduction à BigQuery
Matt Forrest
Field CTO
Trois règles d'optimisation principales :
SELECT * ; ne sélectionnez que les colonnes nécessairesWHEREINT64.WITH filter_my_data AS (SELECT
-- Filtrer d'abord
-- avec WHERE dans la CTE
)
SELECT
-- La requête s'exécute
-- plus vite avec moins de données
JOIN a USING (user_id)
Dans BigQuery, privilégiez
BOOLINTFLOATDATE Les types avec WHERE, STRING ou BYTE ne sont pas optimaux.
Pas optimal
SELECT user_id, date_ordered
FROM dataset.table
WHERE product = 'shoes'
Optimal
SELECT user_id, date_ordered
FROM dataset.table
WHERE product_id = 1234
ORDER BY devrait toujours se trouver tout à la fin de la requêteORDER BY dans une fenêtre (window clause)Non optimal
WITH order_total AS (SELECT
user_id,
sum(product_price) as order_sum
FROM orders
GROUP BY user_id
-- ORDER BY n'est pas à la fin de la requête
ORDER BY last_purchase_date
)
SELECT order_total.order_sum,
users.user_name
FROM dataset.users users
JOIN order_total USING (user_id);
Optimal
WITH order_total AS (SELECT
user_id,
last_purchase_date
sum(product_price) as order_sum
GROUP BY user_id
)
SELECT order_total.order_sum,
users.user_name
FROM dataset.users users
JOIN a USING (user_id)
-- ORDER BY devrait toujours être à la fin
ORDER BY orders_total.last_purchase_date;
EXISTSCOUNT pour ce cas d'usageSELECT EXISTS (
-- Écrire la requête principale comme sous-requête dans EXISTS
SELECT
user_id
FROM
dataset.table
WHERE
product_category = 'home_goods'
AND status = 'Closed Account'
);
APPROX_TOP_SUM ou APPROX_COUNT_DISTINCT.WHERE.Introduction à BigQuery