Conservation des données avec la fonctionnalité temporelle et la prévention des défaillances
Ce document décrit les périodes de conservation des données des ensembles de données avec la fonctionnalité temporelle et la prévention des défaillances. Pendant les périodes de transit et de sécurité, les données que vous avez modifiées ou supprimées dans une table de l'ensemble de données continuent d'être stockées au cas où vous auriez besoin de les récupérer.
Fonctionnalité temporelle et conservation des données
Vous pouvez accéder aux données modifiées ou supprimées à partir de n'importe quel moment pendant la fenêtre de fonctionnalité temporelle, qui couvre les sept derniers jours par défaut. La fonctionnalité temporelle vous permet d'interroger des données mises à jour ou supprimées, de restaurer une table ou un ensemble de données supprimé, de restaurer une table arrivée à expiration, ou de restaurer une table à un point précis dans le temps.
Vous pouvez définir la durée de la fenêtre de fonctionnalité temporelle comprise entre deux jours et sept jours au maximum. Une fenêtre de fonctionnalité temporelle plus longue est utile dans les cas où il est important de pouvoir récupérer les données mises à jour ou supprimées. Une fenêtre de fonctionnalité temporelle plus courte vous permet de réduire les coûts de stockage lorsque vous utilisez le modèle de facturation du stockage physique. Ces économies ne s'appliquent pas au modèle de facturation du stockage logique. Pour en savoir plus sur l'incidence du modèle de facturation du stockage sur les coûts, consultez la section Facturation. Vous ne pouvez pas définir une durée de fonctionnalité temporelle inférieure à deux jours.
Configurer la fenêtre de fonctionnalité temporelle
Vous définissez la fenêtre de fonctionnalité temporelle au niveau de l'ensemble de données ou du projet. Ces paramètres s'appliquent ensuite à toutes les tables associées à l'ensemble de données ou au projet.
Définir la fenêtre de fonctionnalité temporelle au niveau du projet
Pour spécifier la fenêtre de fonctionnalité temporelle par défaut au niveau du projet, vous pouvez utiliser des instructions LDD (langage de définition de données). Pour savoir comment définir la fenêtre de fonctionnalité temporelle au niveau du projet, consultez la section Gérer les paramètres de configuration.
Définir la fenêtre de fonctionnalité temporelle au niveau de l'ensemble de données
Pour spécifier ou modifier la fenêtre de fonctionnalité temporelle d'un ensemble de données, vous pouvez utiliser la Cloud de Confiance console, l'outil de ligne de commande bq ou l'API BigQuery.
- Pour spécifier la fenêtre de fonctionnalité temporelle par défaut pour les nouveaux ensembles de données, consultez la section Créer des ensembles de données.
- Pour modifier ou mettre à jour la fenêtre de fonctionnalité temporelle d'un ensemble de données existant, consultez la section Mettre à jour les fenêtres de fonctionnalité temporelle.
Lorsque vous modifiez une fenêtre de fonctionnalité temporelle, si le code temporel spécifie une heure en dehors de 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 :
TableIDwas created at time which is before its allowed time travel intervaltimestamp. Creation time:timestamp
Fonctionnement de la fonctionnalité temporelle
BigQuery utilise un format de stockage en colonnes. Cela signifie que les données sont organisées et stockées par colonne plutôt que par ligne. Lorsque vous disposez d'une table comportant plusieurs colonnes, les valeurs de chaque colonne sur toutes les lignes sont stockées ensemble dans des blocs de stockage.
Lorsque vous modifiez une cellule dans une table BigQuery, vous modifiez une valeur spécifique dans une ligne et une colonne spécifiques. Comme BigQuery stocke les colonnes ensemble, la modification d'une seule cellule dans une colonne nécessite généralement la lecture de l'ensemble du bloc de stockage contenant les données de cette colonne pour les lignes concernées, l'application de la modification, puis l'écriture d'une nouvelle version de ce bloc de stockage.
La fonctionnalité temporelle fonctionne en effectuant le suivi des versions des blocs de stockage qui composent votre table. Lorsque vous mettez à jour des données, BigQuery ne modifie pas simplement le bloc de stockage existant. Au lieu de cela, il crée une nouvelle version des blocs de stockage concernés avec les données mises à jour. La version précédente est ensuite conservée à des fins de fonctionnalité temporelle.
BigQuery utilise des tailles de fichiers et des blocs de stockage adaptatifs. La taille des blocs de stockage n'est pas fixe, mais peut varier en fonction de facteurs tels que la taille de la table et sa distribution de données. La modification d'une seule cellule dans un bloc de stockage modifie les données de cette colonne, ce qui peut affecter de nombreuses lignes. Par conséquent, l'unité de données qui est versionnée et envoyée à la fonctionnalité temporelle est souvent l'ensemble du bloc de stockage contenant les données modifiées de cette colonne, et non une seule cellule.
Pour cette raison, la modification d'une cellule peut entraîner l'envoi de plus de données à la fonctionnalité temporelle que la taille de la modification.
Impact de la fenêtre de fonctionnalité temporelle sur la récupération des tables et des ensembles de données
Une table ou un ensemble de données supprimé utilise la durée de la fenêtre de fonctionnalité temporelle appliquée au moment de la suppression.
Par exemple, si vous disposez d'une durée de fenêtre de fonctionnalité temporelle de deux jours, puis que vous augmentez cette durée à sept jours, les tables supprimées avant cette modification ne peuvent toujours être récupérées que pendant deux jours. De même, si vous disposez d'une durée de fenêtre de fonctionnalité temporelle de cinq jours et que vous la réduisez à trois jours, toutes les tables supprimées avant la modification peuvent être récupérées pendant cinq jours.
Les fenêtres de fonctionnalité temporelle étant définies au niveau de l'ensemble de données, vous ne pouvez pas modifier la fenêtre temporelle d'un ensemble de données supprimé tant que la suppression n'est pas annulée.
Si vous réduisez la durée de la fenêtre de fonctionnalité temporelle, supprimez une table, puis réalisez que vous avez besoin de plus de récupération pour ces données, vous pouvez créer un instantané de la table à partir d'un moment antérieur à la suppression de la table. Vous devez le faire pendant que la table supprimée est toujours récupérable. Pour en savoir plus, consultez la page Créer un instantané de table à l'aide des fonctionnalités temporelles.
Fonctionnalité temporelle et accès au niveau des lignes
Si une table dispose ou a eu des règles d'accès au niveau des lignes , seul un principal qui est autorisé à disposer de l'autorisation IAM (Identity and Access Management) suivante peut accéder aux données historiques de la table :
| Autorisation | Ressource |
|---|---|
bigquery.rowAccessPolicies.overrideTimeTravelRestrictions
|
Table dont les données historiques sont accessibles |
Les rôles IAM prédéfinis suivants fournissent l'autorisation bigquery.rowAccessPolicies.overrideTimeTravelRestrictions :
| Rôle | Ressource |
|---|---|
roles/bigquery.admin
|
Table dont les données historiques sont accessibles |
roles/bigquery.studioAdmin
|
Table dont les données historiques sont accessibles |
roles/iam.databasesAdmin
|
Table dont les données historiques sont accessibles |
Vous pouvez également accorder
bigquery.rowAccessPolicies.overrideTimeTravelRestrictions
à l'aide d'un rôle personnalisé.
Exécutez la commande suivante pour obtenir l'epoch Unix équivalent en transmettant le code temporel UTC :
date -d '2023-08-04 16:00:34.456789Z' +%s000
Remplacez l'heure selon l'epoch UNIX
1691164834000renvoyée par la commande précédente dans l'outil de ligne de commande bq. Exécutez la commande suivante pour restaurer une copie de la table suppriméedeletedTableIDdans une autre tablerestoredTablede l'ensemble de donnéesmyDatasetID:bq cp myProjectID:myDatasetID.deletedTableID@1691164834000 myProjectID:myDatasetID.restoredTable
Prévention des défaillances
BigQuery prévoit une période de sécurité. Pendant cette période, les données supprimées sont automatiquement conservées pendant sept jours supplémentaires après la fenêtre de fonctionnalité temporelle, afin que les données soient disponibles pour la récupération d'urgence. Les données peuvent être récupérées au niveau de la table à partir du moment représenté par le code temporel de la suppression de ces données.
La période de sécurité n'est pas configurable et ne peut pas être prolongée. Vous devez démarrer et terminer la récupération de la table avant l'expiration de la période de sécurité de sept jours, en prévoyant suffisamment de temps pour que le job de copie se termine en fonction de la taille de votre table.
Lorsque vous effectuez les opérations suivantes, les données remplacées ou supprimées peuvent être récupérées via la fenêtre de fonctionnalité temporelle. Une fois la fenêtre de fonctionnalité temporelle terminée, ces données entrent dans la période de sécurité pour une durée de récupération prolongée :
-
Suppression ou remplacement de table : lorsqu'une table est supprimée
ou que ses données sont entièrement remplacées (par exemple, à l'aide de la
WRITE_TRUNCATEdisposition d'écriture dans un job de chargement ou à l'aide de l'CREATE OR REPLACE TABLEinstruction), le contenu précédent de la table est conservé. - Suppression ou expiration de partition : si une partition spécifique est supprimée ou expire d'une table partitionnée, les données appartenant à cette partition spécifique sont conservées. Les autres partitions de la table ne sont pas affectées. Comme vous ne pouvez pas restaurer une partition individuelle, vous devez restaurer l'intégralité de la table à partir d'un code temporel antérieur à la suppression ou à l'expiration de la partition. Si la table d'origine comporte une expiration de partition, ce paramètre est copié dans la table restaurée. Pour interroger les partitions restaurées qui sont antérieures à l'heure d'expiration de la partition, mettez à jour l'expiration de la partition dans la table restaurée.
Récupérer des données à partir d'un espace de stockage sécurisé
Vous ne pouvez pas interroger directement les données dans un espace de stockage sécurisé, ni copier une table
à partir d'un espace de stockage sécurisé tant que Cloud Customer Care
n'a pas accordé un accès temporaire à la récupération sécurisée sur l'ensemble de données. Pour récupérer une table
à partir d'un espace de stockage sécurisé, contactez Cloud Customer Care
pour demander un accès à la récupération sécurisée pour votre ensemble de données, puis
restaurez la table
vous-même en exécutant un job de copie de table avec un décorateur de code temporel @TIME.
Contrairement à la récupération de la fonctionnalité temporelle, qui ne met à jour que les pointeurs de métadonnées, la récupération sécurisée doit restaurer et répliquer physiquement les blocs de stockage archivés avant la fin du job de copie de table. Lorsque vous restaurez une table volumineuse ou fortement partitionnée à partir d'un espace de stockage sécurisé, gardez à l'esprit les comportements suivants :
- Temps de copie et délais d'expiration plus longs : la restauration d'une table de plusieurs téraoctets ou d'une table comportant de nombreuses partitions à partir d'un espace de stockage sécurisé peut prendre beaucoup plus de temps qu'une copie de table standard. Un seul job de copie peut expirer ou échouer avec une erreur interne temporaire avant que tous les blocs de stockage ne soient restaurés.
- Progression incrémentale entre les nouvelles tentatives : la progression de la restauration sécurisée est enregistrée de manière incrémentale. Tous les blocs de stockage restaurés avant l'expiration ou l'échec d'un job de copie restent restaurés. Si une commande
bq cpéchoue, réessayez la commande en utilisant exactement la même table source et le@TIMEdécorateur de code temporel. Chaque nouvelle tentative ignore les blocs déjà restaurés et continue de restaurer les données restantes jusqu'à ce que le job de copie réussisse. - Fenêtre de récupération limitée dans le temps : contactez Cloud Customer Care dès que possible pendant la période de sécurité de sept jours, en particulier pour les tables volumineuses, afin de disposer de suffisamment de temps pour exécuter des nouvelles tentatives avant l'expiration de la période de sécurité.
Facturation
Si vous définissez votre modèle de facturation du stockage pour qu'il utilise des octets physiques, les octets utilisés pour le stockage temporel et de sécurité vous sont facturés séparément. Le stockage temporel et le stockage sécurisé sont facturés au tarif de stockage physique actif. Vous pouvez configurer la fenêtre de fonctionnalité temporelle pour équilibrer les coûts de stockage et vos besoins en termes de conservation des données.
Si vous définissez votre modèle de facturation du stockage pour qu'il utilise des octets logiques, les coûts de stockage totaux pour le stockage temporel et de sécurité sont inclus dans le tarif de base qui vous est facturé.
Le tableau suivant compare les coûts de stockage physique et logique :
| Modèle de facturation | Que payez-vous ? |
|---|---|
| Stockage physique (compressé) |
|
| Stockage logique (non compressé) (paramètre par défaut) |
|
Si vous utilisez le stockage physique, vous pouvez voir les octets utilisés par la fonctionnalité temporelle et la prévention des défaillances en consultant les colonnes TIME_TRAVEL_PHYSICAL_BYTES et FAIL_SAFE_PHYSICAL_BYTES dans les vues TABLE_STORAGE et TABLE_STORAGE_BY_ORGANIZATION. Pour obtenir un exemple d'utilisation de l'une de ces vues afin d'estimer vos coûts,
consultez
la section Prévoir la facturation du stockage.
Les coûts de stockage s'appliquent aux données avec la fonctionnalité temporelle et la prévention des défaillances, mais vous ne serez facturé que si les frais de stockage des données ne s'appliquent pas ailleurs dans BigQuery. Les informations suivantes s'appliquent :
- Lorsqu'une table est créée, il n'y a aucun coût de stockage lié à la fonctionnalité temporelle ou à la prévention des défaillances.
- Si des données sont modifiées ou supprimées, le stockage des données modifiées ou supprimées enregistrées par la fonctionnalité temporelle vous sera facturé pendant la période de fonctionnalité temporelle et la période de prévention des défaillances. Cela est semblable à la tarification du stockage pour les instantanés et les clones de table.
- Le stockage sécurisé n'est pas facturé pour les tables temporaires.
Exemple de conservation des données
Le tableau suivant montre comment les données supprimées ou modifiées sont transférées entre les périodes de conservation du stockage. Cet exemple montre une situation dans laquelle le stockage total actif est de 200 Gio, et 50 Gio sont supprimés avec une fenêtre de fonctionnalité temporelle de sept jours :
| Jour 0 | Jour 1 | Jour 2 | Jour 3 | Jour 4 | Jour 5 | Jour 6 | Jour 7 | Jour 8 | Jour 9 | Jour 10 | Jour 11 | Jour 12 | Jour 13 | Jour 14 | Jour 15 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Stockage actif | 200 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 |
| Stockage temporel | 50 | 50 | 50 | 50 | 50 | 50 | 50 | |||||||||
| Stockage sécurisé | 50 | 50 | 50 | 50 | 50 | 50 | 50 |
La suppression des données d'un espace de stockage physique à long terme fonctionne de la même manière.
Limites
La récupération des données avec la fonctionnalité temporelle est soumise aux limites suivantes :
- Les fonctionnalités temporelles ne permettent d'accéder aux données historiques que pour la durée de la fenêtre de fonctionnalité temporelle. Pour conserver les données d'une table à des fins non urgentes pendant une durée supérieure à celle de la fenêtre de fonctionnalité temporelle, utilisez des instantanés de table.
- Si une table dispose ou a déjà configuré des règles d'accès au niveau des lignes, seul un administrateur de table peut utiliser la fonctionnalité temporelle. Pour en savoir plus, consultez la section Fonctionnalité temporelle et accès au niveau des lignes.
- La fonctionnalité temporelle ne permet pas de restaurer les métadonnées d'une table.
- La fonctionnalité temporelle n'est pas compatible avec les types de tableaux suivants :
- Tables externes. Toutefois, pour les
tables externes Apache Iceberg, vous pouvez utiliser la
FOR SYSTEM_TIME AS OFclause pour accéder aux instantanés conservés dans vos métadonnées Iceberg. - Tables de résultats de requêtes mises en cache temporaires.
- Tables de session temporaires.
- Tables temporaires à plusieurs instructions.
- Tables listées sous des ensembles de données externes.
- Tables externes. Toutefois, pour les
tables externes Apache Iceberg, vous pouvez utiliser la
Étape suivante
- Découvrez comment interroger et récupérer les données d'une fonctionnalité temporelle.
- En savoir plus sur les instantanés de table.