Führen Sie Zeitreise- und Versionsreiseabfragen durch - Amazon Athena

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.

Führen Sie Zeitreise- und Versionsreiseabfragen durch

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

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. Falls nicht angegeben, betrachtet Athena den Wert als einen Zeitstempel. UTC

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

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

Das Tool 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.

Rufen Sie die Snapshot-ID ab

Sie können die von Iceberg bereitgestellte SnapshotUtilJava-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);

Kombinieren Sie Zeit- und Versionsreisen

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)