Modifier des schémas de table
Ce document décrit comment modifier les définitions de schéma pour les tables BigQuery existantes.
Vous pouvez effectuer la plupart des modifications de schéma décrites dans ce document à l'aide d'instructions LDD (langage de définition de données) SQL. Ces instructions n'entraînent aucuns frais.
Vous pouvez modifier le schéma d'une table de toutes les manières décrites sur cette page :exportation de vos données de table dans Cloud Storage, puis chargement des données dans une nouvelle table avec la définition de schéma modifiée Les jobs de chargement et d'extraction BigQuery sont sans frais, mais des frais s'appliquent pour le stockage des données exportées dans Cloud Storage. Les sections suivantes décrivent d'autres façons d'effectuer différents types de modifications de schéma.
Les mises à jour de schémas dans BigQuery n'entraînent pas de perte de données.
Ajouter une colonne
Vous pouvez ajouter des colonnes à la définition de schéma d'une table existante à l'aide de l'une des options suivantes :
- Ajoutez une colonne vide.
- Écrasez une table avec une tâche de chargement ou de requête.
- Ajoutez des données à une table avec une tâche de chargement ou de requête.
Toute colonne que vous ajoutez doit respecter les règles de BigQuery pour les noms de colonnes. Pour en savoir plus sur la création de composants de schéma, consultez l'article Spécifier un schéma.
Il n'est pas possible d'ajouter des colonnes au milieu d'un schéma de table. Les nouvelles colonnes et les nouveaux champs imbriqués sont toujours ajoutés à la fin du tableau ou du champ. La seule façon de créer une colonne au milieu d'un schéma de table est de créer une table avec le schéma choisi et de copier les données de la table d'origine.
Ajouter une colonne vide
Si vous ajoutez des colonnes à un schéma de table existant, celles-ci doivent être définies comme NULLABLE ou REPEATED. Vous ne pouvez pas ajouter une colonne REQUIRED à un schéma de table existant. L'ajout d'une colonne REQUIRED à un schéma de table existant dans l'API ou l'outil de ligne de commande bq génère une erreur. Toutefois, vous pouvez créer une colonne REQUIRED imbriquée dans un nouveau champ RECORD.
Vous ne pouvez ajouter des colonnes définies comme REQUIRED que lorsque vous créez une table lors du chargement des données ou lorsque vous créez une table vide avec une définition de schéma.
Pour ajouter des colonnes vides à la définition de schéma d'une table, procédez comme suit.
Console
Dans la console Google Cloud , accédez à la page "BigQuery".
Dans le volet de gauche, cliquez sur Explorateur :

Si le volet de gauche ne s'affiche pas, cliquez sur Développer le volet de gauche pour l'ouvrir.
Dans le volet Explorateur, développez votre projet, cliquez sur Ensembles de données, puis sélectionnez un ensemble de données.
Cliquez sur Présentation > Tables, puis sélectionnez la table.
Dans le volet des détails, cliquez sur l'onglet Schéma.
Cliquez sur Modifier le schéma. Vous devrez peut-être faire défiler la page pour voir ce bouton.
Sur la page Current schema (Schéma actuel), sous New fields (Nouveaux champs), cliquez sur Add field (Ajouter un champ).
Lorsque vous avez terminé d'ajouter des colonnes, cliquez sur Enregistrer.
SQL
Utilisez l'instruction LDD ALTER TABLE ADD COLUMN :
Dans la console Google Cloud , accédez à la page BigQuery.
Dans l'éditeur de requête, saisissez l'instruction suivante :
ALTER TABLE mydataset.mytable ADD COLUMN new_column STRING;
Cliquez sur Exécuter.
Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.
bq
Exécutez la commande bq update et fournissez un fichier de schéma JSON. Si la table que vous mettez à jour se trouve dans un projet qui n'est pas celui par défaut, ajoutez l'ID du projet au nom de l'ensemble de données en utilisant le format suivant : PROJECT_ID:DATASET.
bq update PROJECT_ID:DATASET.TABLE SCHEMA
Remplacez les éléments suivants :
PROJECT_ID: ID de votre projet.DATASET: nom de l'ensemble de données contenant la table que vous mettez à jour.TABLE: nom de la table que vous mettez à jour.SCHEMA: chemin d'accès au fichier de schéma JSON sur votre ordinateur local.
Lorsque vous spécifiez un schéma intégré, vous ne pouvez pas spécifier la description, le mode, ni le type RECORD (STRUCT) de la colonne. Tous les modes de colonne sont définis par défaut sur NULLABLE. Par conséquent, si vous ajoutez une nouvelle colonne imbriquée à un type RECORD, vous devez fournir un fichier de schéma JSON.
Si vous essayez d'ajouter des colonnes à l'aide d'une définition de schéma intégrée, vous devez fournir l'intégralité de la définition de schéma, y compris les nouvelles colonnes. Étant donné que vous ne pouvez pas indiquer de mode de colonne à l'aide d'une définition de schéma intégrée, le processus de mise à jour modifie les colonnes REPEATED existantes en NULLABLE, ce qui génère l'erreur suivante : BigQuery error in update
operation: Provided Schema does not match Table
PROJECT_ID:dataset.table. Field field has changed mode
from REPEATED to NULLABLE.
Pour ajouter des colonnes à une table existante à l'aide de l'outil de ligne de commande bq, il est préférable de fournir un fichier de schéma JSON.
Pour ajouter des colonnes vides au schéma d'une table à l'aide d'un fichier de schéma JSON :
Tout d'abord, exécutez la commande
bq showavec l'option--schemaet écrivez le schéma de table existant dans un fichier. Si la table que vous mettez à jour se trouve dans un projet qui n'est pas celui par défaut, ajoutez l'ID du projet au nom de l'ensemble de données en utilisant le format suivant :PROJECT_ID:DATASET.bq show \ --schema \ --format=prettyjson \ PROJECT_ID:DATASET.TABLE > SCHEMA
Remplacez les éléments suivants :
PROJECT_ID: ID de votre projet.DATASET: nom de l'ensemble de données contenant la table que vous mettez à jour.TABLE: nom de la table que vous mettez à jour.SCHEMA: fichier de définition de schéma écrit sur votre ordinateur local.
Par exemple, pour écrire la définition de schéma de
mydataset.mytabledans un fichier, entrez la commande suivante.mydataset.mytablese trouve dans votre projet par défaut.bq show \ --schema \ --format=prettyjson \ mydataset.mytable > /tmp/myschema.jsonOuvrez le fichier de schéma dans un éditeur de texte. Le fichier doit se présenter comme suit :
[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" } ]Ajoutez les colonnes à la fin de la définition de schéma. Si vous tentez d'ajouter des colonnes ailleurs dans le tableau, l'erreur suivante est renvoyée :
BigQuery error in update operation: Precondition Failed. La modification de l'ordre du schéma après la création de la table n'a aucun effet sur l'ordre des colonnes ou des champs imbriqués.Avec un fichier JSON, vous pouvez spécifier des descriptions, des modes
NULLABLEouREPEATED, et des typesRECORDpour les nouvelles colonnes. Par exemple, en utilisant la définition de schéma de l'étape précédente, votre nouveau tableau JSON devrait se présenter comme suit. Dans cet exemple, une colonneNULLABLEnomméecolumn4est ajoutée. Cette colonnecolumn4comprend une description.[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" }, { "description": "my new column", "mode": "NULLABLE", "name": "column4", "type": "STRING" } ]Pour en savoir plus sur l'utilisation des fichiers de schéma JSON, consultez l'article Spécifier un fichier de schéma JSON.
Après avoir mis à jour votre fichier de schéma, exécutez la commande suivante pour mettre à jour le schéma de la table. Si la table que vous mettez à jour se trouve dans un projet qui n'est pas celui par défaut, ajoutez l'ID du projet au nom de l'ensemble de données en utilisant le format suivant :
PROJECT_ID:DATASET.bq update PROJECT_ID:DATASET.TABLE SCHEMA
Remplacez les éléments suivants :
PROJECT_ID: ID de votre projet.DATASET: nom de l'ensemble de données contenant la table que vous mettez à jour.TABLE: nom de la table que vous mettez à jour.SCHEMA: fichier de définition de schéma écrit sur votre ordinateur local.
Par exemple, saisissez la commande suivante pour mettre à jour la définition de schéma de
mydataset.mytabledans votre projet par défaut./tmp/myschema.jsonest le chemin d'accès du fichier de schéma sur votre ordinateur local.bq update mydataset.mytable /tmp/myschema.json
API
Appelez la méthode tables.patch, puis utilisez la propriété schema pour ajouter des colonnes vides à votre définition de schéma. Étant donné que la méthode tables.update remplace l'intégralité de la ressource de table, la méthode tables.patch est préférable.
Go
Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Go.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.