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ôlePeut faireImpact coût
bigquery.dataViewerLire les donnéesCoût query
bigquery.dataEditor+ Modifier les données+ Coût storage
bigquery.adminToutRisque élevé
bigquery.jobUserExécuter des jobsRequis 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.
Jonathan Kini

Jonathan Kini

J'aide les équipes data à réduire et maîtriser leurs coûts BigQuery et Snowflake, sans sacrifier la performance. 8 ans de terrain, de la startup aux environnements data à grande échelle.