Réaliser des requêtes sur le voyage dans le temps et les versions de voyage - Amazon Athena

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Réaliser des requêtes sur le voyage dans le temps et les versions de voyage

Chaque table Apache Iceberg conserve un manifeste versionné des objets Simple Storage Service (Amazon S3) qu'elle contient. Les versions précédentes du manifeste peuvent être utilisées pour les requêtes Time Travel et Version Travel.

Les requêtes Time Travel dans Athena interrogent Simple Storage Service (Amazon S3) des données historiques à partir d'un instantané cohérent à partir d'une date et d'une heure spécifiées. Les requêtes Version Travel dans Athena interrogent Simple Storage Service (Amazon S3) pour des données historiques à partir d'un ID d'instantané spécifié.

Requêtes Time Travel

Pour exécuter une requête Time Travel, utilisez FOR TIMESTAMP AS OF timestamp après le nom de la table dans l'instruction SELECT, comme dans l'exemple suivant.

SELECT * FROM iceberg_table FOR TIMESTAMP AS OF timestamp

L'heure système à spécifier pour les déplacements est soit un horodatage, soit un horodatage avec un fuseau horaire. Si elle n'est pas spécifiée, Athena considère que la valeur est un horodatage dans le temps. UTC

Les exemples de requêtes de voyage dans le temps suivants sélectionnent CloudTrail des données pour la date et l'heure spécifiées.

SELECT * FROM iceberg_table FOR TIMESTAMP AS OF TIMESTAMP '2020-01-01 10:00:00 UTC'
SELECT * FROM iceberg_table FOR TIMESTAMP AS OF (current_timestamp - interval '1' day)

Requêtes Version Travel

Pour exécuter une requête Version Travel (c'est-à-dire afficher un instantané cohérent à partir d'une version spécifiée), utilisez FOR VERSION AS OF version après le nom de la table dans l'instruction SELECT, comme dans l'exemple suivant.

SELECT * FROM [db_name.]table_name FOR VERSION AS OF version

Le version le paramètre est l'ID de bigint capture associé à une version de table Iceberg.

L'exemple de requête Version Travel suivant sélectionne les données pour la version spécifiée.

SELECT * FROM iceberg_table FOR VERSION AS OF 949530903748831860
Note

Les clauses FOR SYSTEM_TIME AS OF et FOR SYSTEM_VERSION AS OF de la version 2 du moteur Athena ont été remplacées par les clauses FOR TIMESTAMP AS OF et FOR VERSION AS OF de la version 3 du moteur Athena.

Récupérez l'ID du snapshot

Vous pouvez utiliser la SnapshotUtilclasse Java fournie par Iceberg pour récupérer l'ID du snapshot Iceberg, comme dans l'exemple suivant.

import org.apache.iceberg.Table; import org.apache.iceberg.aws.glue.GlueCatalog; import org.apache.iceberg.catalog.TableIdentifier; import org.apache.iceberg.util.SnapshotUtil; import java.text.SimpleDateFormat; import java.util.Date; Catalog catalog = new GlueCatalog(); Map<String, String> properties = new HashMap<String, String>(); properties.put("warehouse", "s3://amzn-s3-demo-bucket/my-folder"); catalog.initialize("my_catalog", properties); Date date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").parse("2022/01/01 00:00:00"); long millis = date.getTime(); TableIdentifier name = TableIdentifier.of("db", "table"); Table table = catalog.loadTable(name); long oldestSnapshotIdAfter2022 = SnapshotUtil.oldestAncestorAfter(table, millis);

Combinez voyage dans le temps et version

Vous pouvez utiliser la syntaxe Time Travel et Version Travel dans la même requête pour spécifier différentes conditions de synchronisation et de gestion des versions, comme dans l'exemple suivant.

SELECT table1.*, table2.* FROM [db_name.]table_name FOR TIMESTAMP AS OF (current_timestamp - interval '1' day) AS table1 FULL JOIN [db_name.]table_name FOR VERSION AS OF 5487432386996890161 AS table2 ON table1.ts = table2.ts WHERE (table1.id IS NULL OR table2.id IS NULL)