

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à.

# Eseguire query temporali e di versione
<a name="querying-iceberg-time-travel-and-version-travel-queries"></a>

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
<a name="querying-iceberg-time-travel-queries"></a>

Per eseguire una query temporale, utilizza `FOR TIMESTAMP AS OF timestamp` dopo il nome della tabella nell'istruzione `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
<a name="querying-iceberg-version-travel-queries"></a>

Per eseguire una query di versione (ovvero visualizzare uno snapshot coerente a partire da una versione specificata), utilizza `FOR VERSION AS OF version` dopo il nome della tabella nell'istruzione `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.

### Recuperare l’ID snapshot
<a name="querying-iceberg-table-snapshot-id"></a>

È possibile utilizzare la [SnapshotUtil](https://iceberg.apache.org/javadoc/1.6.0/org/apache/iceberg/util/SnapshotUtil.html)classe Java fornita da Iceberg per recuperare l'ID dello snapshot Iceberg, come nell'esempio seguente.

```
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);
```

## Combinare query temporali e di versione
<a name="querying-iceberg-combining-time-and-version-travel"></a>

È 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)
```