Aktualisieren von Iceberg-Datentabellen - 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.

Aktualisieren von Iceberg-Datentabellen

Iceberg-Tabellendaten können direkt auf Athena mit INSERT, UPDATE, und DELETE-Abfragen verwaltet werden. Jede Datenverwaltungstransaktion erzeugt einen neuen Snapshot, der über Zeitreisen abgefragt werden kann. Die UPDATE- und DELETE-Anweisungen folgen der Spezifikation zum Löschen von Positionen auf Zeilenebene im Iceberg-Format v2 und erzwingen die Snapshot-Isolation.

Verwenden Sie die folgenden Befehle, um Datenverwaltungsvorgänge für Iceberg-Tabellen durchzuführen.

INSERT INTO

Fügt Daten in eine Iceberg-Tabelle ein. Athena Iceberg INSERT INTO wird nach der gescannten Datenmenge genauso berechnet wie aktuelle INSERT INTO-Abfragen für externe Hive-Tabellen. Um Daten in eine Iceberg-Tabelle einzufügen, verwenden Sie die folgende Syntax, wobei Abfragen VALUES (val1, val2, ...) oder SELECT (col1, col2, …) FROM [db_name.]table_name WHERE predicate sein kann. Informationen zur SQL-Syntax und semantischen Details finden Sie unter INSERT INTO.

INSERT INTO [db_name.]table_name [(col1, col2, …)] query

Die folgenden Beispiele fügen Werte in die Tabelle iceberg_table ein.

INSERT INTO iceberg_table VALUES (1,'a','c1')
INSERT INTO iceberg_table (col1, col2, ...) VALUES (val1, val2, ...)
INSERT INTO iceberg_table SELECT * FROM another_table

DELETE

Athena Iceberg DELETE schreibt Iceberg-Positionslöschdateien in eine Tabelle. Dies wird als merge-on-read Löschen bezeichnet. Im Gegensatz zu einem copy-on-write Löschvorgang ist ein merge-on-read Löschvorgang effizienter, da Dateidaten nicht neu geschrieben werden. Wenn Athena Iceberg-Daten liest, führt sie die Iceberg-Position-Löschdateien mit Datendateien zusammen, um die neueste Ansicht einer Tabelle zu erzeugen. Um diese Positionslöschdateien zu entfernen, können Sie die Komprimierungs-Aktion REWRITE DATA ausführen. DELETE-Vorgänge werden nach der gescannten Datenmenge abgerechnet. Weitere Informationen zur Syntax finden Sie unter DELETE.

Im folgenden Beispiel werden Zeilen aus iceberg_table gelöscht, die c3 als Wert für category haben.

DELETE FROM iceberg_table WHERE category='c3'

UPDATE

Athena Iceberg UPDATE schreibt Iceberg-Positions-Löschdateien und neu aktualisierte Zeilen als Datendateien in derselben Transaktion. UPDATE kann man sich als Kombination von INSERT INTO und DELETE vorstellen. UPDATE-Vorgänge werden nach der gescannten Datenmenge abgerechnet. Weitere Informationen zur Syntax finden Sie unter UPDATE.

Das folgende Beispiel aktualisiert die angegebenen Werte in der Tabelle iceberg_table.

UPDATE iceberg_table SET category='c2' WHERE category='c1'

MERGE INTO

Aktualisiert, löscht oder fügt bedingt Zeilen in eine Iceberg-Tabelle ein. Eine einzige Anweisung kann Aktionen zum Aktualisieren, Löschen und Einfügen kombinieren. Weitere Informationen zur Syntax finden Sie unter MERGE INTO.

Anmerkung

MERGE INTO ist transaktionsbasiert und wird nur für Apache-Iceberg-Tabellen in Athena-Engine-Version 3 unterstützt.

Das folgende Beispiel löscht alle Kunden aus der Tabelle t, die sich in der Quelltabelle s befinden.

MERGE INTO accounts t USING monthly_accounts_update s ON t.customer = s.customer WHEN MATCHED THEN DELETE

Im folgenden Beispiel wird die Zieltabelle t mit Informationen aus Quelltabelle s aktualisiert. Für Kundenzeilen in Tabelle t, die über übereinstimmende Kundenzeilen in Tabelle s verfügen, erhöht das Beispiel die Einkäufe in Tabelle t. Wenn Tabelle t keine Übereinstimmung mit einer Kundenzeile in der Tabelle s hat, fügt das Beispiel die Kundenzeile aus Tabelle s in Tabelle t ein.

MERGE INTO accounts t USING monthly_accounts_update s ON (t.customer = s.customer) WHEN MATCHED THEN UPDATE SET purchases = s.purchases + t.purchases WHEN NOT MATCHED THEN INSERT (customer, purchases, address) VALUES(s.customer, s.purchases, s.address)

Im folgenden Beispiel wird die Zieltabelle t bedingt mit Informationen aus der Quelltabelle s aktualisiert. Das Beispiel löscht alle übereinstimmenden Zielzeilen, deren Quelladresse Centreville ist. Für alle weiteren übereinstimmenden Zeilen fügt das Beispiel die Quellkäufe hinzu und legt die Zieladresse auf die Quelladresse fest. Wenn es in der Zieltabelle keine Übereinstimmung gibt, fügt das Beispiel die Zeile aus der Quelltabelle ein.

MERGE INTO accounts t USING monthly_accounts_update s ON (t.customer = s.customer) WHEN MATCHED AND s.address = 'Centreville' THEN DELETE WHEN MATCHED THEN UPDATE SET purchases = s.purchases + t.purchases, address = s.address WHEN NOT MATCHED THEN INSERT (customer, purchases, address) VALUES(s.customer, s.purchases, s.address)