AccueilBlogTest technique BigQuery avance : partitionnement, INFORMATION_SCHEMA, couts
Guide recrutement data

Test technique BigQuery avance : partitionnement, INFORMATION_SCHEMA, couts

BigQuery facture a la requete selon les octets lus. Un Data Engineer Senior s...

Data Builder·Juin 2025·7 min·Data Engineer · Analytics Engineer
Sommaire
  1. Partitionnement et clustering
  2. INFORMATION_SCHEMA
  3. Maitrise des couts
  4. BigQuery ML
  5. BigQuery Omni et Biglake
  6. Bonnes pratiques
  7. Grille

BigQuery facture a la requete selon les octets lus. Un Data Engineer Senior sait reduire les couts de 90% avec le bon partitionnement et les bonnes pratiques — c est ce qu on evalue en entretien.

1Partitionnement et clustering

Question discriminante

Quelle est la difference entre partitionnement et clustering dans BigQuery ? Comment choisissez-vous l un, l autre, ou les deux ?

-- Table partitionnee par date ET clusterisee CREATE TABLE `projet.dataset.events` PARTITION BY DATE(event_date) CLUSTER BY user_id, event_type OPTIONS (require_partition_filter = TRUE) -- force le filtre de partition AS SELECT * FROM source_table; -- Partition Expiration : supprimer auto les vieilles partitions ALTER TABLE events SET OPTIONS (partition_expiration_days = 365); -- Cost estimation avant execution EXPLAIN SELECT * FROM events WHERE event_date = '2025-01-01'; -- Voir les bytes processed estimes

2INFORMATION_SCHEMA : audit et monitoring

-- Top 10 requetes les plus couteuses du mois SELECT user_email, query, total_bytes_billed / POW(1024, 4) AS tb_billed, total_bytes_billed / POW(1024, 4) * 6.25 AS estimated_cost_usd, creation_time FROM `region-eu`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE DATE(creation_time) >= DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY) AND statement_type = 'SELECT' ORDER BY total_bytes_billed DESC LIMIT 10; -- Taille de chaque table dans un dataset SELECT table_id, row_count, ROUND(size_bytes / POW(1024, 3), 2) AS size_gb FROM `dataset`.__TABLES__ ORDER BY size_bytes DESC;

3Maitrise des couts

4BigQuery ML : ML directement en SQL

-- Creer un modele de regression logistique en SQL CREATE OR REPLACE MODEL `dataset.churn_model` OPTIONS(model_type='logistic_reg', input_label_cols=['churned']) AS SELECT age, nb_purchases, last_purchase_days, average_basket, churned FROM `dataset.customers_features`; -- Evaluer SELECT * FROM ML.EVALUATE(MODEL `dataset.churn_model`); -- Predire SELECT customer_id, predicted_churned, predicted_churned_probs FROM ML.PREDICT(MODEL `dataset.churn_model`, (SELECT * FROM `dataset.new_customers`));

5BigQuery Omni et Biglake

6Bonnes pratiques en production

7Grille par niveau

NiveauMaitriseSignal GONO-GO
ConfirmePartitionnement, clustering, INFORMATION_SCHEMAConfigure partitionnement + clustering, lit INFORMATION_SCHEMA pour les coutsFait des SELECT * sans WHERE sur les partitions
SeniorBigQuery ML, Omni/BigLake, optimisation avanceeA utilise BigQuery ML pour un modele simple, connait BigLake, a optimise les couts de 50%+Ne sait pas pourquoi le partitionnement reduit les couts

Vous recrutez un profil data ?

Premier entretien gratuit. Rapport GO/NO-GO sous 48h.