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
après le nom de la table dans l'instruction timestamp
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
après le nom de la table dans l'instruction version
SELECT
, comme dans l'exemple suivant.
SELECT * FROM [
db_name
.]table_name
FOR VERSION AS OFversion
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 SnapshotUtil
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)