BIGQUERY
Cache et Matérialisation
Exploitez le cache automatique et les tables matérialisées pour réduire drastiquement vos coûts de requêtes répétitives.
Cache automatique (24h)
BigQuery met automatiquement en cache les résultats des requêtes pendant 24h. Les cache hits sont gratuits.
Succes
Cache hit = 0 bytes facturés = $0
-- Première exécution : 500 GB scannés = $2.50
SELECT country, COUNT(*) as users
FROM `project.dataset.users`
GROUP BY country;
-- Deuxième exécution (même requête) : cache hit = $0
SELECT country, COUNT(*) as users
FROM `project.dataset.users`
GROUP BY country;Conditions du cache
Le cache est utilisé uniquement si :
| Condition | Cache utilisé ? |
|---|---|
| Même requête (caractère pour caractère) | Oui |
| Tables non modifiées depuis la dernière exécution | Oui |
| Fonctions non-déterministes (CURRENT_TIMESTAMP, RAND) | Non |
| Streaming buffer actif | Non |
| Destination table spécifiée | Non |
-- Pas de cache : fonction non-déterministe
SELECT * FROM events WHERE created_at > CURRENT_TIMESTAMP();
-- Cache possible : valeur fixe
SELECT * FROM events WHERE created_at > '2025-01-15';Erreur frequente
Utiliser CURRENT_DATE() ou CURRENT_TIMESTAMP() dans des requetes de dashboard. Remplacez par une date fixe calculee cote application pour beneficier du cache. Economie potentielle : 100% sur les requetes repetees.
Tables matérialisées
Les materialized views pré-calculent et stockent les résultats. BigQuery les maintient automatiquement à jour.
-- Création d'une vue matérialisée
CREATE MATERIALIZED VIEW `project.dataset.daily_stats`
OPTIONS (
enable_refresh = TRUE,
refresh_interval_minutes = 60 -- Rafraîchissement toutes les heures
)
AS
SELECT
DATE(event_timestamp) as event_date,
country,
event_type,
COUNT(*) as event_count,
COUNT(DISTINCT user_id) as unique_users
FROM `project.dataset.events`
GROUP BY 1, 2, 3;Avantages des materialized views
- Requêtes instantanées sur des agrégations pré-calculées
- Smart tuning : BigQuery réécrit automatiquement les requêtes pour utiliser la MV
- Maintenance automatique : rafraîchissement incrémental
- Coût de stockage mais économie massive sur le compute
A retenir
Une materialized view sur une table de 10 TB agrege peut ne faire que quelques GB. Vous payez $0.02/GB/mois de storage mais economisez potentiellement des centaines de dollars en compute par jour.
Quand matérialiser ?
| Situation | Recommandation |
|---|---|
| Agrégations fréquentes sur grosses tables | Matérialiser |
| Dashboards avec mêmes métriques | Matérialiser |
| Requêtes ad-hoc variées | Pas de MV |
| Données très volatiles | Attention au coût de refresh |
Decision concrete
Identifiez vos 5 requetes les plus executees (via INFORMATION_SCHEMA.JOBS). Si elles font des agregations sur les memes tables, creez une materialized view. ROI souvent atteint en quelques jours.