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

  1. Dans la console Google Cloud , accédez à la page "BigQuery".

    Accéder à BigQuery

  2. Dans le volet de gauche, cliquez sur Explorateur :

    Bouton du volet Explorateur mis en évidence.

    Si le volet de gauche ne s'affiche pas, cliquez sur Développer le volet de gauche pour l'ouvrir.

  3. Dans le volet Explorateur, développez votre projet, cliquez sur Ensembles de données, puis sélectionnez un ensemble de données.

  4. Cliquez sur Présentation > Tables, puis sélectionnez la table.

  5. Dans le volet des détails, cliquez sur l'onglet Schéma.

  6. Cliquez sur Modifier le schéma. Vous devrez peut-être faire défiler la page pour voir ce bouton.

  7. Sur la page Current schema (Schéma actuel), sous New fields (Nouveaux champs), cliquez sur Add field (Ajouter un champ).

    • Saisissez le nom de la colonne dans le champ Name (Nom).
    • Choisissez le type de données dans le champ Type.
    • Dans le champ Mode, choisissez NULLABLE ou REPEATED.
  8. Lorsque vous avez terminé d'ajouter des colonnes, cliquez sur Enregistrer.

SQL

Utilisez l'instruction LDD ALTER TABLE ADD COLUMN :

  1. Dans la console Google Cloud , accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, saisissez l'instruction suivante :

    ALTER TABLE mydataset.mytable
    ADD COLUMN new_column STRING;

  3. 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 :

  1. Tout d'abord, exécutez la commande bq show avec l'option --schema et é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.mytable dans un fichier, entrez la commande suivante. mydataset.mytable se trouve dans votre projet par défaut.

       bq show \
       --schema \
       --format=prettyjson \
       mydataset.mytable > /tmp/myschema.json
    
  2. Ouvrez 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"
      }
    ]
    
  3. 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 NULLABLE ou REPEATED, et des types RECORD pour 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 colonne NULLABLE nommée column4 est ajoutée. Cette colonne column4 comprend 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.

  4. 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.mytable dans votre projet par défaut. /tmp/myschema.json est 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.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// updateTableAddColumn demonstrates modifying the schema of a table to append an additional column.
func updateTableAddColumn(projectID, datasetID, tableID