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
nach dem Tabellennamen in der timestamp
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
nach dem Tabellennamen in der version
SELECT
-Anweisung, wie im folgenden Beispiel.
SELECT * FROM [
db_name
.]table_name
FOR VERSION AS OFversion
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 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);
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)