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
SELECT * FROM [
db_name
.]table_name
[WHEREpredicate
]
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
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. 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
nach dem Tabellennamen in der version
SELECT
-Anweisung, wie im folgenden Beispiel.
SELECT * FROM [
db_name
.]table_name
FOR VERSION AS OFversion
Der Versions
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.
Abrufen der Snapshot-ID
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://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
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