Les implémentations MCP BigQuery actuelles — aussi bien le serveur distant de Google que le Toolbox — se concentrent presque exclusivement sur les requêtes et l’exploration de schémas. L’outil en ligne de commande bq couvre la totalité de la surface API BigQuery. Pour les travaux d’ingénierie de données allant au-delà des instructions SELECT, le CLI n’est pas une alternative au MCP. C’est une nécessité.
L’Écart de Fonctionnalités
| Fonctionnalité | CLI bq | Serveurs MCP |
|---|---|---|
| Exécuter des requêtes | Support SQL complet | execute_sql |
| Lister datasets/tables | bq ls | list_dataset_ids, list_table_ids |
| Afficher le schéma | bq show --schema | get_table_info |
| Charger des données depuis GCS ou fichiers locaux | bq load | Non disponible |
| Exporter vers GCS | bq extract | Non disponible |
| Copier des tables | bq cp | Non disponible |
| Supprimer tables/datasets | bq rm | Non disponible |
| Annuler des jobs en cours | bq cancel | Limité |
| Dry run (estimation de coût) | Flag --dry_run | Seulement le serveur communautaire caron14 |
| Partitionnement/clustering | Contrôle complet | Non disponible |
| Vues autorisées | bq update --view | Non disponible |
| Gestion des réservations | bq mk --reservation | Non disponible |
| Création de dataset/table avec options | bq mk avec flags complets | Non disponible |
| Requêtes avec remontée dans le temps | FOR SYSTEM_TIME AS OF via SQL | Via execute_sql uniquement |
Les serveurs MCP couvrent bien le cas d’usage analytique : découvrir les données, comprendre les schémas, exécuter des requêtes. Mais l’ingénierie de données en production implique de déplacer des données dans et hors de BigQuery, gérer le cycle de vie des tables, contrôler les coûts et configurer le stockage — rien de tout cela n’est couvert par le MCP.
Chargement de Données : L’Écart le Plus Courant
Le chargement de données dans BigQuery est l’une des opérations d’ingénierie de données les plus fréquentes, et elle n’a pas d’équivalent MCP. Claude Code utilisant le CLI le gère naturellement :
# Charger un CSV depuis Cloud Storage avec détection automatique du schémabq load \ --source_format=CSV \ --autodetect \ --replace \ raw_data.daily_sales \ 'gs://my-bucket/sales/2025-01-*.csv'
# Charger du JSON délimité par des nouvelles lignes avec schéma explicitebq load \ --source_format=NEWLINE_DELIMITED_JSON \ --schema 'event_id:STRING,event_name:STRING,timestamp:TIMESTAMP,properties:JSON' \ raw_data.events \ 'gs://my-bucket/events/2025-01-15/*.jsonl'
# Charger du Parquet (schéma inféré depuis le fichier)bq load \ --source_format=PARQUET \ --replace \ raw_data.user_profiles \ 'gs://my-bucket/profiles/latest/*.parquet'Ce sont des patterns que Claude génère avec confiance parce que la commande bq load est documentée et utilisée depuis 2011. Le modèle a vu des milliers d’exemples pour différents formats source, configurations de schéma et patterns de chemin GCS.
Export de Données : L’Autre Direction
L’export de résultats de requêtes ou de tables vers Cloud Storage est également absent du MCP :
# Exporter une table en CSVbq extract \ --destination_format=CSV \ --compression=GZIP \ analytics.sales_summary \ 'gs://my-bucket/exports/sales_summary_*.csv.gz'
# Exporter en Parquet pour le traitement en avalbq extract \ --destination_format=PARQUET \ analytics.customer_features \ 'gs://my-bucket/ml-features/customers_*.parquet'
# Exporter en JSON pour la consommation par APIbq extract \ --destination_format=NEWLINE_DELIMITED_JSON \ analytics.product_catalog \ 'gs://my-bucket/api-data/catalog_*.jsonl'Pour les pipelines ML, le partage de données avec des partenaires externes ou l’alimentation de systèmes en aval, bq extract est indispensable. Aucun serveur MCP ne fournit cela.
Un Workflow ETL Complet
L’écart est le plus visible dans les workflows de bout en bout. Considérons l’ingestion de fichiers depuis Cloud Storage, leur transformation avec SQL et l’export des résultats :
# Étape 1 : Charger les données brutes depuis GCSbq load \ --source_format=CSV \ --autodetect \ --replace \ raw_data.daily_sales \ 'gs://my-bucket/sales/2025-01-*.csv'
# Étape 2 : Transformer et matérialiserbq query \ --destination_table=analytics.sales_summary \ --replace \ --nouse_legacy_sql \ ' SELECT DATE_TRUNC(sale_date, MONTH) as month, region, SUM(amount) as total_sales, COUNT(DISTINCT customer_id) as unique_customers FROM raw_data.daily_sales GROUP BY 1, 2 '
# Étape 3 : Exporter pour la consommation externebq extract \ --destination_format=CSV \ --compression=GZIP \ analytics.sales_summary \ 'gs://my-bucket/exports/sales_summary_*.csv.gz'Le Toolbox MCP gère bien l’étape 2 (la requête). Les étapes 1 et 3 nécessitent le CLI. Si vous construisez des pipelines avec Claude Code, vous avez besoin de bq que vous utilisiez également le MCP ou non.
Gestion des Tables
Créer des tables avec des configurations spécifiques — partitionnement, clustering, expiration, labels — nécessite le CLI ou du DDL SQL. Les serveurs MCP ne fournissent aucun outil de gestion :
# Créer une table partitionnée et clusteriséebq mk \ --table \ --time_partitioning_field=event_date \ --time_partitioning_type=DAY \ --clustering_fields=user_id,event_name \ --expiration 7776000 \ --description "User events partitioned by date, clustered by user and event" \ analytics.user_events
# Copier une table entre datasetsbq cp \ staging.validated_orders \ production.orders
# Supprimer une tablebq rm -t analytics.deprecated_report
# Créer un dataset avec localisation et expiration par défautbq mk \ --dataset \ --location=EU \ --default_table_expiration 2592000 \ my_project:temp_analyticsCes opérations sont courantes en ingénierie de données. Copies de tables pour les déploiements blue-green, création de datasets pour de nouveaux environnements, nettoyage de tables obsolètes — toutes CLI uniquement.
Estimation des Coûts
Le flag --dry_run est l’une des fonctionnalités les plus utiles pour les travaux sensibles aux coûts BigQuery, et il est absent de la plupart des implémentations MCP :
# Estimer le coût d'une requête avant de l'exécuterbq query \ --dry_run \ --nouse_legacy_sql \ ' SELECT * FROM `my_project.raw_data.events` WHERE event_date BETWEEN "2025-01-01" AND "2025-01-31" '# Sortie : This query will process 45.2 GB when run.À 6,25 $ par TiB, savoir qu’une requête scannera 45 Go (0,28 $) versus 4,5 To (28,13 $) avant de l’exécuter est précieux. Seul un serveur MCP communautaire (caron14) inclut le support des dry runs. Le CLI le propose depuis le début.
Claude Code peut utiliser les dry runs naturellement dans son workflow : estimer le coût, décider de continuer ou non, ajuster la requête si l’estimation est trop élevée. Ce pattern de conscience des coûts est plus difficile à implémenter via le MCP où le modèle ne peut pas facilement inspecter les métadonnées intermédiaires sur une requête avant de l’exécuter.
Gestion des Jobs
Les requêtes longues nécessitent parfois une intervention :
# Lister les jobs récentsbq ls -j --max_results=10
# Afficher les détails d'un job spécifiquebq show -j job_id_here
# Annuler un job en coursbq cancel job_id_hereLes serveurs MCP offrent une gestion de jobs limitée ou inexistante. Pour déboguer des requêtes bloquées, investiguer des chargements en échec ou gérer des workloads concurrents, le CLI est le seul chemin.
Quand Cet Écart Se Comblera
L’infrastructure MCP de Google évolue. Le serveur distant géré a été lancé en décembre 2025, et le Toolbox ajoute de nouveaux outils à chaque version. Il est raisonnable d’anticiper que le chargement de données, l’export et la gestion des tables arriveront éventuellement comme outils MCP.
L’écart existe début 2026. Configurez les deux : utilisez le MCP quand ses réponses structurées et fonctionnalités de sécurité apportent de la valeur ; utilisez le CLI pour le chargement, l’export et la gestion des tables.