Eine genaue Länge beim Einfügen in Apache Iceberg™ fixed[L]-Spalten erzwingen (Vorschau)

Achtung

Diese Verhaltensänderung ist in Bundle 2026_02 enthalten.

Den aktuellen Status des Bundles finden Sie unter Bundle-Verlauf.

Snowflake erzwingt das Einfügen mit exakter Länge in Iceberg fixed[L]-Spaltentypen.

Vor der Änderung:

Spalten, die den Iceberg-Datentyp fixed[L] verwenden, akzeptieren Binärwerte bis zu der definierten Länge „L“ in Bytes. Werte, die kürzer als L sind, sind zulässig.

Werte, die länger als L sind, führen dazu, dass die Abfrage fehlschlägt.

Nach der Änderung:

Spalten, die den Iceberg-Datentyp fixed[L] verwenden, akzeptieren Binärwerte, die genau der definierten Länge „L“ in Bytes entsprechen. INSERT-Anweisungen, die versuchen, einen Binärwert einzufügen, der kleiner als L ist, führen zu einem Fehler.

Durch diese Änderung wird Snowflake an die Iceberg-Spezifikation und andere Iceberg-kompatible Engines angepasst, wie z. B. Apache Spark™.

Die folgende Liste fasst das Verhalten nach Aktivierung dieser Änderung zusammen:

  • Diese Änderung gilt sowohl für neue als auch für bestehende Iceberg-Tabellen.

  • Diese Änderung gilt sowohl für von Snowflake verwaltete als auch für extern verwaltete Iceberg-Tabellen.

  • Beim Lesen hat diese Änderung keine Auswirkungen auf ältere Snapshots oder Time Travel. Vorhandene Snapshots bleiben lesbar, da Snowflake nur die Länge des Iceberg-Datentyps fixed[L] bei DML-Operationen validiert.

  • Wenn diese Änderung aktiviert ist, erzwingt Snowflake beim Schreiben immer die richtige Länge des Iceberg-Datentyps fixed[L] bei Schreiboperationen, auch während Time Travel. Schreibvorgänge, die versuchen, einen Binärwert einzufügen, der nicht genau der definierten Länge „L“ in Bytes entspricht, schlagen immer fehl. Werte, die länger als L sind, führen weiterhin zum Fehlschlagen der Abfrage.

Was Sie tun müssen, um eine Unterbrechung des Dienstes zu vermeiden: Betroffene Spalten identifizieren und Probleme beheben.

Betroffene Spalten identifizieren und Probleme beheben

In diesem Abschnitt erfahren Sie, wie Sie feststellen, ob eine Spalte von BCR betroffen ist und wie Sie die Fehler bei betroffenen Spalten beheben.

Schritt 1: Betroffene Spalten identifizieren

Um festzustellen, ob Sie betroffene Spalten haben, führen Sie die folgenden Schritte aus:

  1. Führen Sie den Befehl DESCRIBE ICEBERG TABLE aus.

    Suchen Sie in der Ausgabe nach Spalten mit dem Iceberg-Quelltyp fixed[L]. Wenn Sie eine Spalte vom Iceberg-Typ fixed[L] finden, fahren Sie mit dem nächsten Schritt fort.

  2. Führen Sie die folgende Abfrage aus:

    SELECT BOOLOR_AGG(OCTET_LENGTH(<column_name>) != L) from <table_name>
    
    Copy

    Wenn die Abfrage „true“ zurückgibt, enthält die Spalte Werte mit einer falschen Länge, sodass die Spalte betroffen ist.

Schritt 2: Problem mit den betroffenen Spalten auflösen

Führen Sie einen der folgenden Schritte aus, um das Problem mit den betroffenen Spalten aufzulösen:

Ermöglichen Sie das Einfügen von Binärwerten beliebiger Größe in die betroffene Spalte, bis zu einer maximalen Länge

Um das Problem mit den betroffenen Spalten aufzulösen, können Sie das Einfügen von Binärwerten beliebiger Größe in die betroffene Spalte bis zu einer maximalen Länge ermöglichen.

Diese Auflösung stellt sicher, dass die Metadaten und die physischen Dateien für die Tabelle mit der Iceberg-Spezifikation abgeglichen werden und daher mit externen Engines kompatibel sind.

Um das Einfügen von Binärwerten beliebiger Größe in die betroffene Spalte bis zu einer maximalen Länge zu ermöglichen, folgen Sie diesen Anweisungen:

  • Wenn externe Engines, wie z. B. Spark, auf Ihre Tabelle zugreifen, müssen Sie die Tabelle neu erstellen, indem Sie den Spaltentyp BINARY verwenden.

    Um die Tabelle mithilfe des Spaltentyps BINARY neu zu erstellen, führen Sie die folgenden Schritte aus:

    1. Um eine neue Tabelle zu erstellen und zu füllen, die auf der Tabelle mit den betroffenen Spalten basiert, führen Sie den Befehl CREATE ICEBERG TABLE … AS SELECT (auch als CTAS bezeichnet) aus, und geben Sie Binary als Datentyp für die betroffenen Spalten an.

      Das folgende Beispiel zeigt eine CTAS-Anweisung, bei der der Datentyp für Spalte b in der neuen Tabelle als binär angegeben wird:

      CREATE ICEBERG TABLE my_table (..., b binary) AS SELECT * FROM my_old_table
      
      Copy
    2. Verwenden Sie den Befehl DROP ICEBERG TABLE, um die Tabelle mit den betroffenen Spalten zu entfernen.

  • Alternativ können Sie das Tabellenschema weiterentwickeln, indem Sie den Befehl ALTER ICEBERG TABLE ausführen, um den Datentyp für die Spalte auf BINARY festzulegen.

    Wichtig

    Bevor Sie eine ALTER ICEBERG TABLE-Anweisung zum Ändern des Datentyps einer Spalte in BINARY ausführen, müssen Sie sich zuerst mit dem ` Snowflake-Support`_ in Verbindung setzen, um diese Funktion für Ihr Konto zu aktivieren.

    Die folgende Anweisung entwickelt zum Beispiel das Schema für Tabelle t weiter. Dazu müssen Sie den Datentyp für die Spalte c in BINARY ändern:

    ALTER ICEBERG TABLE t ALTER COLUMN c SET DATA TYPE BINARY;
    
    Copy

    Dieser Ansatz ist eine temporäre, unterstützte Lösung für die betroffene Kundschaft während des BCR-Zeitraums. Der Vorteil dieses Ansatzes ist, dass Sie nur das Tabellenschema aktualisieren müssen, anstatt die gesamte Tabelle neu zu erstellen.

    Wichtig

    Dieser Ansatz ist keine gültige Heraufstufung des Iceberg-Typs, sodass externe Engines möglicherweise eine Heraufstufung des ungültigen Typs erkennen und die Tabelle nicht aktualisieren können. Daher sollten Sie diesen Ansatz nur für von Snowflake verwaltete Iceberg-Tabellen verwenden, die nicht von externen Engines gelesen oder in die externen Engines geschrieben werden.

Ermöglichen Sie das Einfügen von Binärwerten mit einer Länge von genau L in die betroffene Spalte

Um das Einfügen von Binärwerten mit einer Länge von genau L in die betroffene Spalte zu ermöglichen, stellen Sie sicher, dass die Größe des Eingabewerts mit der Zielgröße übereinstimmt, indem Sie Ihren Workflow anpassen, z. B. durch Kürzen oder Auffüllen. Wir empfehlen auch, dass Sie die Iceberg-Tabelle mit dem Iceberg-Spaltentyp fixed(L) neu erstellen, um sicherzustellen, dass die Größe aller Werte, die Sie zuvor in die Tabelle eingefügt haben, genau der definierten Länge L entspricht.

Ref: 2246