

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Lakukan perjalanan waktu dan kueri perjalanan versi
<a name="querying-iceberg-time-travel-and-version-travel-queries"></a>

Setiap tabel Apache Iceberg mempertahankan manifes berversi dari objek Amazon S3 yang dikandungnya. Versi manifes sebelumnya dapat digunakan untuk perjalanan waktu dan kueri perjalanan versi.

Kueri perjalanan waktu di Athena menanyakan Amazon S3 untuk data historis dari snapshot yang konsisten pada tanggal dan waktu yang ditentukan. Kueri perjalanan versi di Athena menanyakan Amazon S3 untuk data historis sebagai ID snapshot yang ditentukan.

## Pertanyaan perjalanan waktu
<a name="querying-iceberg-time-travel-queries"></a>

Untuk menjalankan kueri perjalanan waktu, gunakan `FOR TIMESTAMP AS OF {{timestamp}}` setelah nama tabel dalam `SELECT` pernyataan, seperti pada contoh berikut.

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

Waktu sistem yang akan ditentukan untuk bepergian adalah stempel waktu atau stempel waktu dengan zona waktu. Jika tidak ditentukan, Athena menganggap nilainya sebagai stempel waktu dalam waktu UTC.

Contoh kueri perjalanan waktu berikut memilih CloudTrail data untuk tanggal dan waktu yang ditentukan.

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

## Pertanyaan perjalanan versi
<a name="querying-iceberg-version-travel-queries"></a>

Untuk menjalankan kueri perjalanan versi (yaitu, melihat snapshot yang konsisten pada versi tertentu), gunakan `FOR VERSION AS OF {{version}}` setelah nama tabel dalam `SELECT` pernyataan, seperti pada contoh berikut.

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

{{version}}Parameternya adalah ID `bigint` snapshot yang terkait dengan versi tabel Iceberg.

Contoh kueri perjalanan versi berikut memilih data untuk versi yang ditentukan.

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

**catatan**  
`FOR SYSTEM_VERSION AS OF`Klausul `FOR SYSTEM_TIME AS OF` dan dalam mesin Athena versi 2 telah digantikan oleh `FOR TIMESTAMP AS OF` klausul `FOR VERSION AS OF` dan di Athena engine versi 3.

### Ambil ID snapshot
<a name="querying-iceberg-table-snapshot-id"></a>

Anda dapat menggunakan [SnapshotUtil](https://iceberg.apache.org/javadoc/1.6.0/org/apache/iceberg/util/SnapshotUtil.html)kelas Java yang disediakan oleh Iceberg untuk mengambil ID snapshot Iceberg, seperti pada contoh berikut.

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

## Gabungkan perjalanan waktu dan versi
<a name="querying-iceberg-combining-time-and-version-travel"></a>

Anda dapat menggunakan sintaks perjalanan waktu dan perjalanan versi dalam kueri yang sama untuk menentukan kondisi waktu dan versi yang berbeda, seperti pada contoh berikut.

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