Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Esegui ricerche sui viaggi nel tempo e sui viaggi di versione
Ogni tabella Apache Iceberg conserva un manifesto con versioni degli oggetti Amazon S3 che comprende. Le versioni precedenti del manifesto possono essere utilizzate per le query temporali e di versione.
Le query temporali in Athena interrogano Amazon S3 relativamente a dati storici da uno snapshot coerente con una data e un'ora specificate. Le query di versione in Athena interrogano Amazon S3 relativamente a dati storici a partire da un ID snapshot specificato.
Query temporali
Per eseguire una query temporale, utilizza FOR TIMESTAMP AS OF
dopo il nome della tabella nell'istruzione timestampSELECT, come nel seguente esempio:
SELECT * FROM iceberg_table FOR TIMESTAMP AS OFtimestamp
L'ora del sistema da specificare per il viaggio è un timestamp o un timestamp con un fuso orario. Se non specificato, Athena considera il valore come un timestamp nell'ora UTC.
Nell'esempio seguente le interrogazioni sui viaggi nel tempo selezionano CloudTrail i dati per la data e l'ora specificate.
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)
Query di versione
Per eseguire una query di versione (ovvero visualizzare uno snapshot coerente a partire da una versione specificata), utilizza FOR VERSION AS OF
dopo il nome della tabella nell'istruzione versionSELECT, come nell'esempio seguente.
SELECT * FROM [db_name.]table_nameFOR VERSION AS OFversion
Il version parametro è l'ID dell'bigintistantanea associato a una versione della tabella Iceberg.
La seguente query di versione di esempio seleziona i dati per la versione specificata.
SELECT * FROM iceberg_table FOR VERSION AS OF 949530903748831860
Nota
Le clausole FOR SYSTEM_TIME AS OF e FOR SYSTEM_VERSION AS OF nella versione 2 del motore Athena sono state sostituite dalle clausole FOR TIMESTAMP AS OF e FOR VERSION AS OF nella versione 3 del motore Athena.
Recupera l'ID dell'istantanea
È possibile utilizzare 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);
Combina viaggi nel tempo e nelle versioni
È possibile utilizzare la sintassi delle query temporali e di versione nella stessa query per specificare condizioni di temporizzazione e controllo delle versioni diverse, come nell'esempio seguente.
SELECT table1.*, table2.* FROM [db_name.]table_nameFOR TIMESTAMP AS OF (current_timestamp - interval '1' day) AS table1 FULL JOIN [db_name.]table_nameFOR VERSION AS OF 5487432386996890161 AS table2 ON table1.ts = table2.ts WHERE (table1.id IS NULL OR table2.id IS NULL)