Transaktionen und Apache Iceberg™-Tabellen

Unter diesem Thema finden Sie Informationen darüber, wie Snowflake speziell Transaktionen für Apache Iceberg™-Tabellen verarbeitet. Die Regeln, die unter dem Thema Snowflake Transaktionen beschrieben sind, gelten auch für Iceberg-Tabellen.

Tabellen, die Snowflake als Iceberg-Katalog verwenden

Für eine Tabelle , die Snowflake als Katalog verwendet, verwaltet Snowflake die Iceberg-Metadaten, sodass andere Abfrage-Engines, wie Spark, aus der Tabelle lesen können.

Abfragen

Wenn Sie Snowflake verwenden, um diese Art von Tabelle abzufragen, folgt die Tabelle den allgemeinen Snowflake Transaktionsprinzipien.

Snowflake unterstützt derzeit die Read Committed-Isolationsebene für Transaktionen zur Verbesserung der Parallelität und des Durchsatzes, während Iceberg derzeit serialisierbare oder Snapshot-Isolation unterstützt.

DDL-Anweisungen

Snowflake verarbeitet DDL Anweisungen als einzelne Transaktionen und isoliert DDL Anweisungen nicht über mehrere gleichzeitige Transaktionen. Weitere Informationen finden Sie unter DDL in impliziten Transaktionen.

Dies unterscheidet sich von der Art und Weise, wie Iceberg-Tabellen typischerweise Transaktionen mit DDL-Anweisungen behandeln, bei denen eine einzelne bestätigte Transaktion sowohl DML als auch DDL-Anweisungen oder mehrere gebündelte DDL-Anweisungen enthalten kann.

Bemerkung

  • Die Iceberg-Metadaten zeigen nicht immer eine neue Version des Schemas für jede einzelne DDL Änderung an. In einigen Fällen fasst Snowflake DDL-Anweisungen zusammen und speichert die Gruppe als eine einzige neue Schemaversion in den Iceberg-Metadaten.

  • DDL-Änderungen können in den Iceberg-Metadaten ungeordnet angezeigt werden, insbesondere wenn eine DDL-Änderung in unmittelbarer Nähe zu anderen DDL- oder DML- Operationen erfolgt.

Schreibvorgänge von externen Engines in von Snowflake verwaltete Tabellen

Snowflake unterstützt derzeit keine Schreibvorgänge in von Snowflake verwaltete Tabellen von externen Abfrage-Engines wie Spark.

Tabellen, die einen externen Katalog verwenden

Bei einer Iceberg-Tabelle, die einen externen Katalog verwendet, ruft Snowflake den neuesten Tabellenstatus aus dem externen Katalog ab, wenn Sie den Befehl ALTER ICEBERG TABLE … REFRESH ausführen.

Transaktionen aktualisieren

Snowflake überträgt automatisch ALTER ICEBERG TABLE. .. REFRESH Anweisungen innerhalb einer Transaktion mit einer einzigen Anweisung.

In einer impliziten Transaktion verarbeitet Snowflake die Anweisung auf dieselbe Weise wie jede andere Anweisung, wenn AUTOCOMMIT aktiviert ist.

In einer expliziten Transaktion (mit mehreren Anweisungen) führt Snowflake die Aktualisierung als Anweisung, die nur aus einer Transaktion besteht, vor dem Commit des expliziten Transaktionsblocks aus.

Schreibt in extern verwaltete Tabellen

Snowflake unterstützt derzeit keine Schreibvorgängen auf extern verwaltete Tabellen.

Transaktionen mit mehreren Anweisungen

Snowflake unterstützt Transaktionen mit mehreren Anweisungen durch atomares Commit mehrerer DML-Anweisungen und verwendet die folgende Logik:

  • Jede DDL-Anweisung wird als einzelne Transaktion ausgeführt, wenn sie auftritt.

  • Jede ALTER ICEBERG TABLE … REFRESH-Operation wird als eine einzige Transaktion ausgeführt, wenn sie auftritt.

  • Alle anderen Anweisungen innerhalb einer expliziten oder impliziten Transaktion werden gruppiert und als eine einzige Transaktion mit Commit bestätigt

Betrachten Sie das folgende Beispiel für einen expliziten Transaktionsblock für eine Iceberg-Tabelle in Snowflake:

BEGIN
  INSERT INTO table1 VALUES (1, "One");
  INSERT INTO table1 VALUES (2, "Two");
  ALTER ICEBERG TABLE table1 ALTER COLUMN c3 SET DATA TYPE ARRAY(long);
  INSERT INTO table1 VALUES (3, "Three");
  INSERT INTO table1 VALUES (4, "Four");
COMMIT;
Copy
  1. Wenn Snowflake auf die Anweisung ALTER ICEBERG TABLE stößt, werden die ersten beiden INSERT INTO TABLE-Anweisungen (alles, was bisher verarbeitet wurde) als eine Transaktion mit Commit bestätigt.

  2. Snowflake überträgt dann die ALTER ICEBERG TABLE-Anweisung als separate Transaktion.

  3. Zum Schluss erstellt Snowflake eine neue Transaktion und verarbeitet die restlichen INSERT INTO-Anweisungen. Da der Rest des Blocks keine DDL-oder Refresh-Anweisungen enthält, werden die verbleibenden Transaktionen am Ende des Blocks mit Commit bestätigt (bei COMMIT).