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
setelah nama tabel dalam timestamp
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
setelah nama tabel dalam version
SELECT
pernyataan, seperti pada contoh berikut.
SELECT * FROM [
db_name
.]table_name
FOR VERSION AS OFversion
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 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
Anda dapat menggunakan 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);
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)