Accéder aux données de l'historique à l'aide des fonctionnalités temporelles

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. Vous pouvez accéder aux données à partir de n'importe quel moment au cours des sept derniers jours. Vous pouvez utiliser les fonctionnalités temporelles pour interroger des données mises à jour ou supprimées, restaurer une table supprimée ou restaurer une table arrivée à expiration.

Limite

Les fonctionnalités temporelles ne permettent d'accéder aux données de table que pour les sept derniers jours. Pour conserver les données d'une table pendant plus de sept jours, utilisez des instantanés de table.

Interroger les données à un moment précis

Vous pouvez interroger les données de l'historique d'une table à tout moment au cours des sept derniers jours à l'aide d'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 il y a plus de sept jours 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.

Si vous remplacez une table existante à l'aide de l'instruction CREATE OR REPLACE TABLE, vous pouvez toujours 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 US

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 dans les sept jours suivant sa suppression.

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'époque Unix.

bq cp mydataset.table1@1624046611000 mydataset.table1_restored

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

Sécurité des 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.