

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Zeitreisen- und Versionsreiseabfragen durchführen
<a name="querying-iceberg-time-travel-and-version-travel-queries"></a>

Jede Apache-Iceberg-Tabelle verwaltet ein versioniertes Manifest der darin enthaltenen Amazon-S3-Objekte. Frühere Versionen des Manifests können für Zeitreise- und Versionsreiseabfragen verwendet werden.

Zeitreiseabfragen in Athena fragen Amazon S3 nach historischen Daten aus einem konsistenten Snapshot ab einem bestimmten Datum und einer bestimmten Uhrzeit ab. Versionsreiseabfragen in Athena fragen Amazon S3 nach historischen Daten ab einer angegebenen Snapshot-ID ab.

## Zeitreiseabfragen
<a name="querying-iceberg-time-travel-queries"></a>

Um eine Zeitreiseabfrage auszuführen, verwenden Sie `FOR TIMESTAMP AS OF timestamp` nach dem Tabellennamen in der `SELECT`-Anweisung, wie im folgenden Beispiel.

```
SELECT * FROM iceberg_table FOR TIMESTAMP AS OF timestamp
```

Die für Reisen festzulegende Systemzeit ist entweder ein Zeitstempel oder ein Zeitstempel mit einer Zeitzone. Wenn nicht angegeben, betrachtet Athena den Wert als Zeitstempel in UTC-Zeit.

Das folgende Beispiel für Zeitreiseabfragen wählt CloudTrail Daten für das angegebene Datum und die angegebene Uhrzeit aus.

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

## Versionsreiseabfragen
<a name="querying-iceberg-version-travel-queries"></a>

Um eine Versionsreiseabfrage durchzuführen (d. h. einen konsistenten Snapshot ab einer angegebenen Version anzuzeigen), verwenden Sie `FOR VERSION AS OF version` nach dem Tabellennamen in der `SELECT`-Anweisung, wie im folgenden Beispiel.

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

Der *version* Parameter ist die `bigint` Snapshot-ID, die einer Iceberg-Tabellenversion zugeordnet ist.

Die folgende Beispielversionsreiseabfrage wählt Daten für die angegebene Version aus.

```
SELECT * FROM iceberg_table FOR VERSION AS OF 949530903748831860
```

**Anmerkung**  
Die `FOR SYSTEM_TIME AS OF`- und `FOR SYSTEM_VERSION AS OF`-Klauseln in Athena-Engine-Version 2 wurden durch die `FOR TIMESTAMP AS OF`- und `FOR VERSION AS OF`-Klauseln in Athena-Engine-Version 3 ersetzt.

### Abrufen der Snapshot-ID
<a name="querying-iceberg-table-snapshot-id"></a>

Sie können die von Iceberg bereitgestellte [SnapshotUtil](https://iceberg.apache.org/javadoc/1.6.0/org/apache/iceberg/util/SnapshotUtil.html)Java-Klasse verwenden, um die Iceberg-Snapshot-ID abzurufen, wie im folgenden Beispiel gezeigt.

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

## Zeit- und Versionsreisen kombinieren
<a name="querying-iceberg-combining-time-and-version-travel"></a>

Sie können Zeitreisen- und Versionsreisesyntax in derselben Abfrage verwenden, um verschiedene Timing- und Versionsbedingungen anzugeben, wie im folgenden Beispiel.

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