BIGQUERY
Gouvernance Multi-tenant
Mettez en place une gouvernance efficace pour contrôler et attribuer les coûts BigQuery par équipe, projet ou environnement.
Labels pour l'attribution des coûts
Les labels permettent d'attribuer les coûts par équipe, projet, environnement.
-- Labels sur une table
CREATE TABLE `project.dataset.events`
(...)
OPTIONS (
labels = [
("team", "analytics"),
("env", "prod"),
("cost_center", "marketing")
]
);
-- Labels sur un dataset
ALTER SCHEMA `project.analytics_dataset`
SET OPTIONS (
labels = [("team", "analytics"), ("env", "prod")]
);Erreur frequente
Mettre des labels apres coup est penible. Definissez une convention de nommage (team, env, cost_center) et forcez-la des la creation via Terraform ou des policies. Les labels manquants = couts non attribues = conflits entre equipes.
Requêter les coûts par label
-- Coûts par équipe (billing export)
SELECT
labels.value as team,
SUM(cost) as total_cost
FROM `project.billing_export.gcp_billing_export_v1_*`
CROSS JOIN UNNEST(labels) as labels
WHERE labels.key = 'team'
AND service.description = 'BigQuery'
GROUP BY team
ORDER BY total_cost DESC;Quotas et limites
Limitez les bytes scannés par requête pour éviter les mauvaises surprises.
-- Limite au niveau projet (1 TB max par requête)
ALTER PROJECT `my-project`
SET OPTIONS (
default_query_max_bytes_billed = 1099511627776 -- 1 TB en bytes
);
-- Limite par requête
SET @@query_max_bytes_billed = 10737418240; -- 10 GB
SELECT * FROM large_table;Astuce
Astuce : Si une requête dépasse la limite, elle échoue avant de scanner les données. Pas de coût.
Decision concrete
Definissez une limite par defaut au niveau projet (ex: 100 GB). Les utilisateurs avances peuvent la depasser explicitement dans leur requete, mais cela les force a reflechir avant de scanner 1 TB.
Réservations (Flat-rate)
Avec les éditions, vous pouvez allouer des slots à différentes équipes.
-- Créer une réservation
CREATE RESERVATION `project.region-us.analytics_reservation`
OPTIONS (
slot_capacity = 100
);
-- Créer un assignment pour un projet
CREATE ASSIGNMENT `project.region-us.analytics_reservation.analytics_project`
OPTIONS (
assignee = 'projects/analytics-project',
job_type = 'QUERY'
);Policies IAM pour le contrôle d'accès
Limitez qui peut faire quoi pour contrôler les coûts.
| Rôle | Peut faire | Impact coût |
|---|---|---|
| bigquery.dataViewer | Lire les données | Coût query |
| bigquery.dataEditor | + Modifier les données | + Coût storage |
| bigquery.admin | Tout | Risque élevé |
| bigquery.jobUser | Exécuter des jobs | Requis pour query |
A retenir
Donnez bigquery.dataViewer + bigquery.jobUser a la plupart des utilisateurs. Reservez dataEditor aux pipelines de donnees. bigquery.admin ne devrait etre attribue qu'aux administrateurs de la plateforme.