FONDAMENTAUX
Mesurer le coût d'une requête
Techniques pour mesurer et attribuer le coût de chaque requête sur BigQuery et Snowflake.
Pourquoi mesurer avant d'optimiser
Dans la majorité des plateformes data, les dérives de coûts ne proviennent pas de l'infrastructure, mais de décisions peu visibles : requêtes exécutées trop souvent, dashboards mal conçus, warehouses utilisés sans cadre clair.
Sans mesure fine, toute optimisation devient approximative. On coupe des coûts au hasard, on surcorrige certains usages, ou l'on dégrade la performance sans bénéfice réel.
Le FinOps Data commence toujours par la même étape : rendre chaque requête mesurable, attribuable et comparable.
À retenir
Mesurer le coût d'une requête BigQuery
BigQuery facture les données scannées, et non les données retournées. Cette distinction est essentielle pour comprendre l'origine de nombreux écarts de facturation.
Coût = (Bytes scannés / 1 TB) x $5
-- Requête scannant 500 GB
SELECT customer_id, SUM(amount)
FROM `project.dataset.transactions`
WHERE date BETWEEN '2024-01-01' AND '2024-12-31'
GROUP BY customer_id;
-- Coût ≈ 0.5 TB x $5 = $2.50Point clé
Identifier les requêtes BigQuery les plus coûteuses
La visibilité FinOps commence par l'identification des requêtes qui consomment réellement le budget. INFORMATION_SCHEMA constitue le point d'entrée principal.
SELECT
user_email,
query,
total_bytes_billed,
ROUND(total_bytes_billed / POW(1024, 4) * 5, 2) AS cost_usd,
creation_time
FROM `region-us`.INFORMATION_SCHEMA.JOBS
WHERE job_type = 'QUERY'
AND state = 'DONE'
ORDER BY total_bytes_billed DESC
LIMIT 20;Cette vue permet de prioriser les actions : on n'optimise pas tout, on optimise ce qui a un impact réel sur la facture.
Erreur fréquente
Mesurer le coût d'une requête Snowflake
Snowflake adopte une approche différente. Le coût dépend du temps d'exécution et de la taille du warehouse utilisé.
Coût = (Durée / 3600) x Crédits par heure x Prix par crédit
-- Requête de 30 secondes
-- Warehouse Medium (4 crédits/heure)
-- Edition Enterprise ($3/crédit)
Coût ≈ (30 / 3600) x 4 x 3 = $0.10Identifier les requêtes Snowflake les plus coûteuses
Dans Snowflake, le coût dépend fortement du contexte : taille du warehouse, concurrence, stratégie d'auto-suspend.
SELECT
user_name,
warehouse_name,
warehouse_size,
execution_time / 1000 AS seconds,
credits_used,
ROUND(credits_used * 3, 2) AS cost_usd
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
WHERE start_time > DATEADD(day, -1, CURRENT_TIMESTAMP())
ORDER BY credits_used DESC
LIMIT 20;Bonnes pratiques FinOps Data
- Mesurer avant d'optimiser : la donnée guide la décision
- Attribuer les coûts : utilisateur, équipe, produit
- Comparer dans le temps : avant et après optimisation
- Automatiser la visibilité : dashboards et alertes
- Relier coût et valeur : une requête chère n'est pas nécessairement inutile
Décision concrète