Créer des instantanés de table

Ce document explique comment créer un instantané d'une table à l'aide de Google Cloud Console, de l'instruction SQL CREATE SNAPSHOT TABLE, de la commande bq cp --snapshot ou de l'API jobs.insert. Ce document est destiné aux utilisateurs familiarisés avec les instantanés de table BigQuery.

Autorisations et rôles

Cette section décrit les autorisations Identity and Access Management (IAM) dont vous avez besoin pour créer un instantané de table, ainsi que les rôles IAM prédéfinis qui accordent ces autorisations.

Autorisations

Pour créer un instantané de table, vous avez besoin des autorisations suivantes :

Autorisation Ressource Notes
Tous les éléments suivants :

bigquery.tables.get
bigquery.tables.getData
bigquery.tables.createSnapshot
bigquery.datasets.get
bigquery.jobs.create
Table dont vous souhaitez prendre un instantané Vous devez disposer de l'autorisation bigquery.tables.deleteSnapshot pour créer un instantané avec un délai d'expiration, car l'expiration d'un instantané équivaut à sa suppression ultérieure.
bigquery.tables.create
bigquery.tables.updateData
Ensemble de données contenant l'instantané de table

Rôles

Voici les rôles BigQuery prédéfinis qui fournissent les autorisations requises :

Rôle Ressource Notes
Au choix :

bigquery.dataViewer
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
Table dont vous souhaitez prendre un instantané Seuls bigquery.dataOwner et bigquery.admin peuvent être utilisés pour créer un instantané avec un délai d'expiration.
Au choix :

bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
Ensemble de données contenant le nouvel instantané de table

Limites

Pour en savoir plus sur les limitations des instantanés de table, consultez la section Limites des instantanés de table.

En outre, la création d'instantanés de table est soumise aux limites suivantes, qui s'appliquent à toutes les tâches de copie de table :

  • Lorsque vous créez un instantané de table, son nom doit respecter les mêmes règles de dénomination que lorsque vous créez une table.
  • La création d'instantanés de table est soumise aux limites BigQuery applicables aux tâches de copie.
  • L'ensemble de données de l'instantané de table doit se trouver dans la même région et appartenir à la même organisation que l'ensemble de données contenant la table dont vous prenez un instantané. Par exemple, vous ne pouvez pas créer un instantané de table dans un ensemble de données basé aux États-Unis pour une table située dans un ensemble de données basé dans l'UE. Vous devriez plutôt faire une copie de la table.
  • Le temps nécessaire à BigQuery pour créer des instantanés de table peut varier considérablement selon les exécutions, car le stockage sous-jacent est géré de manière dynamique.

Créer un instantané de table

Il est recommandé de créer un instantané de table dans un ensemble de données différent de la table de base. Cette pratique permet de restaurer la table de base à partir de son instantané, même si l'ensemble de données de la table est accidentellement supprimé.

Lorsque vous créez un instantané de table, vous spécifiez la table dont vous souhaitez prendre un instantané et un nom unique pour l'instantané de table. Vous pouvez également spécifier l'heure et le délai d'expiration de l'instantané de table.

Créer un instantané de table avec un délai d'expiration

Vous pouvez créer un instantané d'une table qui expire au bout de 24 heures à l'aide de l'une des options suivantes :

Console

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

    Accéder à BigQuery

  2. Dans le volet Explorateur, développez les nœuds de projet et d'ensemble de données de la table à partir de laquelle vous souhaitez créer un instantané.

  3. Cliquez sur le nom de la table à partir de laquelle vous souhaitez créer un instantané.

  4. Dans le volet du tableau qui s'affiche, cliquez sur Instantané.

    Cliquer sur "Instantané"

  5. Dans le volet Créer un instantané de table qui s'affiche, saisissez les informations Projet, Ensemble de données et Table pour le nouvel instantané de table

  6. Dans le champ Heure d'expiration, saisissez la date et l'heure pendant 24 heures.

  7. Cliquez sur Save (Enregistrer).

SQL

Utilisez l'instruction LDD CREATE SNAPSHOT TABLE :

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

    Accéder à BigQuery

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

    CREATE SNAPSHOT TABLE SNAPSHOT_PROJECT_ID.SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME
    CLONE TABLE_PROJECT_ID.TABLE_DATASET_NAME.TABLE_NAME
      OPTIONS (
        expiration_timestamp = TIMESTAMP 'TIMESTAMP_VALUE');
    

    Remplacez les éléments suivants :

    • SNAPSHOT_PROJECT_ID : ID du projet dans lequel créer l'instantané.
    • SNAPSHOT_DATASET_NAME : nom de l'ensemble de données dans lequel créer l'instantané.
    • SNAPSHOT_NAME : nom de l'instantané que vous créez.
    • TABLE_PROJECT_ID : ID du projet contenant la table à partir de laquelle vous créez l'instantané.
    • TABLE_DATASET_NAME : nom de l'ensemble de données contenant la table à partir de laquelle vous créez l'instantané.
    • TABLE_NAME : nom de la table à partir de laquelle vous créez l'instantané.
    • TIMESTAMP_VALUE : valeur de code temporel représentant la date et l'heure, 24 heures à compter de maintenant.

  3. Cliquez sur Exécuter.

Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.

bq

Saisissez la commande suivante dans Cloud Shell :

Accéder à Cloud Shell

bq cp \
--snapshot \
--no_clobber \
--expiration=86400 \
TABLE_PROJECT_ID:TABLE_DATASET_NAME.TABLE_NAME \
SNAPSHOT_PROJECT_ID:SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME

Remplacez les éléments suivants :

  • TABLE_PROJECT_ID : ID du projet contenant la table à partir de laquelle vous créez l'instantané.
  • TABLE_DATASET_NAME : nom de l'ensemble de données contenant la table à partir de laquelle vous créez l'instantané.
  • TABLE_NAME : nom de la table à partir de laquelle vous créez l'instantané.
  • SNAPSHOT_PROJECT_ID : ID du projet dans lequel créer l'instantané.
  • SNAPSHOT_DATASET_NAME : nom de l'ensemble de données dans lequel créer l'instantané.
  • SNAPSHOT_NAME : nom de l'instantané que vous créez.

L'option --no_clobber est obligatoire.

API

Appelez la méthode jobs.insert avec les paramètres suivants :

Paramètre Valeur
projectId ID du projet à facturer pour cette opération.
Corps de la requête

{
  "configuration": {
    "copy": {
      "sourceTables": [
        {
          "projectId": "TABLE_PROJECT_ID",
          "datasetId": "TABLE_DATASET_NAME",
          "tableId": "TABLE_NAME"
        }
      ],
      "destinationTable": {
        "projectId": "SNAPSHOT_PROJECT_ID",
        "datasetId": "SNAPSHOT_DATASET_NAME",
        "tableId": "SNAPSHOT_NAME"
      },
      "operationType": "SNAPSHOT",
      "writeDisposition": "WRITE_EMPTY",
      "destinationExpirationTime":"TIMESTAMP_VALUE"
    }
  }
}

Remplacez les éléments suivants :

  • TABLE_PROJECT_ID : ID du projet contenant la table à partir de laquelle vous créez l'instantané.
  • TABLE_DATASET_NAME : nom de l'ensemble de données contenant la table à partir de laquelle vous créez l'instantané.
  • TABLE_NAME : nom de la table à partir de laquelle vous créez l'instantané.
  • SNAPSHOT_PROJECT_ID : ID du projet dans lequel créer l'instantané.
  • SNAPSHOT_DATASET_NAME : nom de l'ensemble de données dans lequel créer l'instantané.
  • SNAPSHOT_NAME : nom de l'instantané que vous créez.
  • TIMESTAMP_VALUE : valeur de code temporel représentant la date et l'heure, 24 heures à compter de maintenant.

Comme pour les tables, si aucun délai d'expiration n'est spécifié, l'instantané de table expire après l'expiration du délai par défaut de la table ou de l'ensemble de données contenant l'instantané de table.

Créer un instantané de table à l'aide des fonctionnalités temporelles

Vous pouvez créer un instantané d'une table telle qu'elle était une heure auparavant à l'aide de l'une des options suivantes :

Console

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

    Accéder à BigQuery

  2. Dans le volet Explorateur, développez les nœuds de projet et d'ensemble de données de la table à partir de laquelle vous souhaitez créer un instantané.

  3. Cliquez sur le nom de la table à partir de laquelle vous souhaitez créer un instantané.

  4. Dans le volet du tableau qui s'affiche, cliquez sur Instantané.

    Cliquer sur "Instantané"

  5. Dans le volet Créer un instantané de table qui s'affiche, saisissez les informations Projet, Ensemble de données et Table pour le nouvel instantané de table

  6. Dans le champ Heure de l'instantané, saisissez la date et l'heure de la dernière heure écoulée.

  7. Cliquez sur Save (Enregistrer).

SQL

Utilisez l'instruction LDD CREATE SNAPSHOT TABLE avec une clause FOR SYSTEM_TIME AS OF :

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

    Accéder à BigQuery

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

    CREATE SNAPSHOT TABLE SNAPSHOT_PROJECT_ID.SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME
    CLONE TABLE_PROJECT_ID.TABLE_DATASET_NAME.TABLE_NAME
    FOR SYSTEM_TIME AS OF
      TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);
    

    Remplacez les éléments suivants :

    • SNAPSHOT_PROJECT_ID : ID du projet dans lequel créer l'instantané.
    • SNAPSHOT_DATASET_NAME : nom de l'ensemble de données dans lequel créer l'instantané.
    • SNAPSHOT_NAME : nom de l'instantané que vous créez.
    • TABLE_PROJECT_ID : ID du projet contenant la table à partir de laquelle vous créez l'instantané.
    • TABLE_DATASET_NAME : nom de l'ensemble de données contenant la table à partir de laquelle vous créez l'instantané.
    • TABLE_NAME : nom de la table à partir de laquelle vous créez l'instantané.

  3. Cliquez sur Exécuter.

Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.

bq

Saisissez la commande suivante dans Cloud Shell :

Accéder à Cloud Shell

bq cp \
--no_clobber \
--snapshot \
TABLE_PROJECT_ID:TABLE_DATASET_NAME.TABLE_NAME@-3600000 \
SNAPSHOT_PROJECT_ID:SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME

Remplacez les éléments suivants :

  • TABLE_PROJECT_ID : ID du projet contenant la table à partir de laquelle vous créez l'instantané.
  • TABLE_DATASET_NAME : nom de l'ensemble de données contenant la table à partir de laquelle vous créez l'instantané.
  • TABLE_NAME : nom de la table à partir de laquelle vous créez l'instantané.
  • SNAPSHOT_PROJECT_ID : ID du projet dans lequel créer l'instantané.
  • SNAPSHOT_DATASET_NAME : nom de l'ensemble de données dans lequel créer l'instantané.
  • SNAPSHOT_NAME : nom de l'instantané que vous créez.

L'option --no_clobber est obligatoire.

API

Appelez la méthode jobs.insert avec les paramètres suivants :

Paramètre Valeur
projectId ID du projet à facturer pour cette opération.
Corps de la requête

{
  "configuration": {
    "copy": {
      "sourceTables": [
        {
          "projectId": "TABLE_PROJECT_ID",
          "datasetId": "TABLE_DATASET_NAME",
          "tableId": "TABLE_NAME@-360000"
        }
      ],
      "destinationTable": {
        "projectId": "SNAPSHOT_PROJECT_ID",
        "datasetId": "SNAPSHOT_DATASET_NAME",
        "tableId": "SNAPSHOT_NAME"
      },
      "operationType": "SNAPSHOT",
      "writeDisposition": "WRITE_EMPTY"
    }
  }
}

Remplacez les éléments suivants :

  • TABLE_PROJECT_ID : ID du projet contenant la table à partir de laquelle vous créez l'instantané.
  • TABLE_DATASET_NAME : nom de l'ensemble de données contenant la table à partir de laquelle vous créez l'instantané.
  • TABLE_NAME : nom de la table à partir de laquelle vous créez l'instantané.
  • SNAPSHOT_PROJECT_ID : ID du projet dans lequel créer l'instantané.
  • SNAPSHOT_DATASET_NAME : nom de l'ensemble de données dans lequel créer l'instantané.
  • SNAPSHOT_NAME : nom de l'instantané que vous créez.

Pour en savoir plus sur la spécification d'une version antérieure d'une table, consultez la page Accéder aux données de l'historique à l'aide des fonctionnalités temporelles.

Contrôle des accès aux tables

Pour savoir comment contrôler l'accès aux tables dans BigQuery, consultez la page Présentation des contrôles d'accès aux tables.

Lorsque vous créez un instantané de table, l'accès au niveau de la table à l'instantané de la table est défini comme suit :

  • Si l'instantané de table écrase une table existante, l'accès au niveau de la table est conservé. Les tags ne sont pas copiés depuis la table de base.
  • Si l'instantané de table est une nouvelle ressource, l'accès au niveau de la table pour le l'instantané est déterminé par les stratégies d'accès de l'ensemble de données dans lequel l'instantané de la table est créé. De plus, les tags sont copiés depuis la table de base vers l'instantané de la table.

Étapes suivantes