AccueilBlogTest technique BigQuery
Guide recrutement data

Test technique BigQuery : ce qu'on évalue vraiment en entretien

BigQuery paraît simple : du SQL sur des Po de données. Mais l'écart est immense entre lancer un SELECT * qui coûte une fortune et concevoir un entrepôt partitionné, clustéré et optimisé au coût. Voici ce qu'on évalue.

Data Builder·Juillet 2025·10 min de lecture·Data Engineer / Analytics Engineer

La particularité de BigQuery, c'est le modèle de coût : on paie les octets scannés, pas le temps. Un profil solide raisonne en volume lu avant d'écrire une requête. Cinq dimensions.

1Modèle de coût

Question discriminante

Qu'est-ce qui détermine le coût d'une requête BigQuery, et comment le réduire ?

  • On paie les octets scannés, pas la durée : réduire la donnée lue est la clé.
  • Sélectionner les colonnes utiles (jamais SELECT * sur une large table).
  • Filtrer sur la colonne de partition pour ne lire que les partitions nécessaires.
  • On-demand (par To scanné) vs slots réservés (capacité fixe).

Signal d'alerte : un SELECT * sur une table de plusieurs To sans filtre de partition est une erreur qui se voit directement sur la facture.

2Partitionnement et clustering

Question discriminante

Comment optimisez-vous une table de faits volumineuse et souvent filtrée ?

  • Partitionner par date (ingestion ou colonne) pour le partition pruning.
  • Clustering sur les colonnes de filtre/jointure fréquentes.
  • Expiration de partition pour maîtriser le stockage.
  • Vérifier l'estimation d'octets scannés avant de lancer une requête lourde.

3ARRAY, STRUCT et UNNEST

Question discriminante

Comment interrogez-vous des données imbriquées ou répétées (tableaux, structs) ?

SELECT tag, COUNT(*) AS n FROM articles, UNNEST(SPLIT(tags, '|')) AS tag GROUP BY tag
  • ARRAY et STRUCT — le modèle imbriqué natif de BigQuery.
  • UNNEST pour aplatir un tableau en lignes.
  • SPLIT + UNNEST pour éclater une chaîne délimitée.
  • Comprendre le coût d'un déplilement mal maîtrisé (explosion des lignes).

4Fonctions fenêtre et QUALIFY

Question discriminante

Comment gardez-vous la dernière ligne par entité, sans sous-requête ?

SELECT * FROM events QUALIFY ROW_NUMBER() OVER ( PARTITION BY user_id ORDER BY ts DESC) = 1
  • QUALIFY natif — filtrer sur une fonction fenêtre directement.
  • Classements, cumuls, LAG/LEAD comme en SQL standard.
  • Fonctions APPROX_* (quantiles, count distinct) à grande échelle.
  • DATE_TRUNC/TIMESTAMP_TRUNC pour les séries temporelles, avec fuseau.

5Optimisation et bonnes pratiques

Question discriminante

Une requête est lente ou chère. Par quoi commencez-vous ?

  • Lire le plan d'exécution et l'estimation d'octets.
  • Vues matérialisées pour des agrégats récurrents.
  • BI Engine / cache de résultats pour les requêtes répétées.
  • Éviter les jointures explosives et les CROSS JOIN non maîtrisés.

6Grille par niveau

NiveauMaîtrise attendueSignal GONO-GO
JuniorSQL sur BigQuery, colonnes utiles, filtresÉvite SELECT *, comprend le coût par octets scannésLance un SELECT * sur une grosse table sans filtre
ConfirméPartitionnement, clustering, UNNEST, QUALIFYPartitionne/clustérise, interroge des données imbriquéesNe sait pas ce qu'est le partition pruning
SeniorOptimisation coût, vues matérialisées, slotsDiagnostique une requête chère, arbitre on-demand/slotsNe peut pas expliquer d'où vient une facture élevée
LeadArchitecture d'entrepôt, gouvernance des coûtsDéfinit les standards de partitionnement et de coûtsNe met aucune garde-fou de coût à l'échelle

Vous recrutez un profil data ?

Data Builder mène l'entretien technique et vous livre un rapport clair et détaillé sous 24h. Premier entretien offert.

Tester gratuitementRéserver un appel