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à.
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 timestamp
SELECT
, come nel seguente esempio:
SELECT * FROM iceberg_table FOR TIMESTAMP AS OF timestamp
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 version
SELECT
, come nell'esempio seguente.
SELECT * FROM [db_name
.]table_name
FOR VERSION AS OF version
Il version
parametro è l'ID dell'bigint
istantanea 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_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)