Accéder aux données de l'historique

BigQuery vous permet d'utiliser les fonctionnalités temporelles pour accéder aux données stockées dans BigQuery qui ont été modifiées ou supprimées.

Interroger les données à un moment précis

Vous pouvez interroger les données historiques d'une table à tout moment dans la fenêtre temporelle en utilisant une clause FOR SYSTEM_TIME AS OF. Cette clause prend une expression d'horodatage constante et fait référence à la version de la table active à cet horodatage. La table doit être stockée dans BigQuery. Il ne peut pas s'agir d'une table externe. Lorsque vous utilisez SYSTEM_TIME AS OF, la taille de la table n'est pas limitée.

Par exemple, la requête suivante renvoie une version historique de la table d'une heure écoulée :

SELECT *
FROM `mydataset.mytable`
  FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);

Si l'horodatage spécifie une heure antérieure à la fenêtre de fonctionnalité temporelle ou avant la création de la table, la requête échoue et renvoie une erreur semblable à celle-ci :

Invalid snapshot time 1601168925462 for table
myproject:mydataset.table1@1601168925462. Cannot read before 1601573410026.

Après avoir remplacé une table existante à l'aide de l'instruction CREATE OR REPLACE TABLE, vous pouvez utiliser FOR SYSTEM_TIME AS OF pour interroger la version précédente de la table.

Si la table a été supprimée, la requête échoue et renvoie une erreur semblable à celle-ci :

Not found: Table myproject:mydataset.table was not found in location LOCATION

LOCATION est l'emplacement de l'ensemble de données.

Toutefois, vous pouvez restaurer la table en la copiant à partir d'un moment précis vers une nouvelle table, comme décrit dans ce document.

Restaurer une table à partir d'un moment précis

Vous pouvez restaurer une table à partir des données de l'historique en copiant les données de l'historique dans une table. La copie de données fonctionne même si la table a été supprimée ou a expiré, tant que vous la restaurez pendant la durée de la fenêtre de fonctionnalité temporelle.

Pour copier des données de l'historique à partir d'une table, ajoutez un décorateur au nom de la table à l'aide de la syntaxe suivante :

  • tableid@TIME, où TIME est le nombre de millisecondes écoulées depuis l'époque Unix.
  • tableid@-TIME_OFFSET, où TIME_OFFSET est le décalage relatif par rapport à l'heure actuelle, en millisecondes.
  • tableid@0 : spécifie les données de l'historique les plus anciennes disponibles.

Par exemple, la commande suivante de l'outil de ligne de commande bq permet de copier une table nommée table1 une heure auparavant dans une table nommée table1_restored. La durée, -3600000, est spécifiée en millisecondes à l'aide d'un décalage relatif.

bq cp mydataset.table1@-3600000 mydataset.table1_restored

La commande suivante de l'outil de ligne de commande bq permet de copier une table nommée table1 dans une table nommée table1_restored. La durée, 1624046611000, est spécifiée en millisecondes depuis l'epoch Unix.

bq cp mydataset.table1@1624046611000 mydataset.table1_restored

Pour en savoir plus, consultez la section Restaurer des tables supprimées.

Étapes suivantes