Lakukan perjalanan waktu dan kueri perjalanan versi - Amazon Athena

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

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

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)

Kueri perjalanan versi

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

Bagian version parameter 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 OFKlausul 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

Anda dapat menggunakan SnapshotUtilkelas 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

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)