Iceberg-Tabellen abfragen und Zeitreisen durchführen - 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.

Iceberg-Tabellen abfragen und Zeitreisen durchführen

Um einen Iceberg-Datensatz abzufragen, verwenden Sie eine SELECT-Standardanweisung wie die folgende. Abfragen entsprechen der Spezifikation des Apache Iceberg-Formats v2 und führen sowohl Positions - als auch merge-on-read Gleichheitslöschungen durch.

SELECT * FROM [db_name.]table_name [WHERE predicate]

Um die Abfragezeiten zu optimieren, werden alle Prädikate dorthin verschoben, wo sich die Daten befinden.

Zeitreisen- und Versionsreiseabfragen

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. Wenn nicht angegeben, betrachtet Athena den Wert als Zeitstempel in UTC-Zeit.

Im folgenden Beispiel für Zeitreiseabfragen werden CloudTrail Daten für das angegebene Datum und die angegebene Uhrzeit ausgewählt.

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

Der Versionsparameter 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.

Abrufen der Snapshot-ID

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://DOC-EXAMPLE-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);

Zeit- und Versionsreisen kombinieren

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)

Erstellen und Abfragen von Ansichten mit Iceberg-Tabellen

Verwenden Sie zum Erstellen und Abfragen von Athena-Ansichten für Iceberg-Tabellen CREATE VIEW-Ansichten wie in Arbeiten mit Ansichten beschrieben.

Beispiel:

CREATE VIEW view1 AS SELECT * FROM iceberg_table
SELECT * FROM view1

Wenn Sie daran interessiert sind, die Iceberg-Ansicht-Spezifikation zum Erstellen von Ansichten zu verwenden, wenden Sie sich an athena-feedback@amazon.com.

Arbeiten mit der differenzierte Zugriffskontrolle von Lake Formation

Athena-Engine-Version 3 unterstützt die differenzierte Zugriffskontrolle von Lake Formation mit Iceberg-Tabellen, einschließlich der Sicherheitskontrolle auf Spalten- und Zeilenebene. Diese Zugriffskontrolle funktioniert mit Zeitreiseabfragen und mit Tabellen, die eine Schemaentwicklung durchgeführt haben. Weitere Informationen finden Sie unter Differenzierte Zugriffskontrolle von Lake Formation und Athena-Arbeitsgruppen.

Wenn Sie Ihre Iceberg-Tabelle außerhalb von Athena erstellt haben, verwenden Sie Apache Iceberg SDK Version 0.13.0 oder höher, damit Ihre Iceberg-Tabellenspalteninformationen im AWS Glue Data Catalog ausgefüllt werden. Wenn Ihre Iceberg-Tabelle keine Spalteninformationen enthält AWS Glue, können Sie die FESTGELEGTE TABELLENEIGENSCHAFTEN ÄNDERN Athena-Anweisung oder das neueste Iceberg-SDK verwenden, um die Tabelle zu korrigieren und die Spalteninformationen in zu aktualisieren. AWS Glue