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é | Comme l'expiration de l'instantané supprime l'instantané ultérieurement, vous devez disposer de l'autorisation bigquery.tables.deleteSnapshot pour créer un instantané avec un délai d'expiration. |
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 moins l'un des éléments suivants :bigquery.dataViewer bigquery.dataEditor bigquery.dataOwner Et au moins l'un des éléments suivants : bigquery.jobUser bigquery.studioUser bigquery.user bigquery.studioAdmin bigquery.admin
|
Table dont vous souhaitez prendre un instantané | Seuls bigquery.dataOwner , bigquery.admin et bigquery.studioAdmin peuvent être utilisés pour créer un instantané avec un délai d'expiration. |
Au moins l'un des éléments suivants :bigquery.dataEditor bigquery.dataOwner bigquery.studioAdmin 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.
- Lorsque vous créez un instantané de table à l'aide de la CLI BigQuery, l'instantané possède la clé de chiffrement par défaut de l'ensemble de données de destination. Lorsque vous créez un instantané de table à l'aide de SQL, l'instantané possède la même clé de chiffrement que la table source.
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
Dans la console Google Cloud, accédez à la page BigQuery.
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é.
Cliquez sur le nom de la table à partir de laquelle vous souhaitez créer un instantané.
Dans le volet du tableau qui s'affiche, cliquez sur Instantané.
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
Dans le champ Heure d'expiration, saisissez la date et l'heure pendant 24 heures.
Cliquez sur Enregistrer.
SQL
Utilisez l'instruction LDD CREATE SNAPSHOT TABLE
:
Dans la console Google Cloud, accédez à la page BigQuery.
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.
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 :
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
Dans la console Google Cloud, accédez à la page BigQuery.
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é.
Cliquez sur le nom de la table à partir de laquelle vous souhaitez créer un instantané.
Dans le volet du tableau qui s'affiche, cliquez sur Instantané.
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
Dans le champ Heure de l'instantané, saisissez la date et l'heure de la dernière heure écoulée.
Cliquez sur Enregistrer.
SQL
Utilisez l'instruction LDD CREATE SNAPSHOT TABLE
avec une clause FOR SYSTEM_TIME AS OF
:
Dans la console Google Cloud, accédez à la page BigQuery.
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é.
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 :
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
- Mettre à jour la description, la date d'expiration ou la règle d'accès d'un instantané de table
- Restaurer un instantané de table
- Créer des instantanés mensuels d'une table à l'aide d'un compte de service exécutant une requête programmée