ALTER ICEBERG TABLE … ALTER COLUMN … SET DATA TYPE

Bemerkung

Diese Variante der Syntax wird bei Iceberg-Tabellen, die einen externen Katalog verwenden, nicht unterstützt.

Ändert (entwickelt) eine Spalte für einen strukturierten Typ in einer Snowflake-verwalteten Apache Iceberg™-Tabelle.

Mit diesem Befehl können Sie strukturierte Typen in einer Spalte einer Iceberg-Tabelle bearbeiten. Sie können einen Schlüssel in einem strukturierten OBJECT umbenennen oder eine Kombination der folgenden Änderungen ausführen:

  • Entwickeln des Typs eines Feldes innerhalb eines strukturierten Typs.

  • Neuordnen der Schlüssel in einem strukturierten OBJECT.

  • Hinzufügen von Schlüsseln zu einem strukturierten OBJECT.

  • Löschen von Schlüsseln aus einem strukturierten OBJECT.

Sie können das Umbenennen eines Schlüssels nicht mit anderen Änderungen kombinieren.

Der Kürze halber werden unter diesem Thema Iceberg-Tabellen nur als „Tabellen“ bezeichnet, es sei denn, es wird zwischen Iceberg-Tabellen und normalen Snowflake-Tabellen unterschieden.

Siehe auch:

CREATE ICEBERG TABLE, DROP ICEBERG TABLE, SHOW ICEBERG TABLES, DESCRIBE ICEBERG TABLE

Syntax

Spalte mit strukturiertem Typ bearbeiten

ALTER ICEBERG TABLE [ IF EXISTS ] <table_name> ALTER COLUMN <structured_column>
  SET DATA TYPE <new_structured_type>
Copy

Schlüssel in einem strukturierten OBJECT umbenennen

ALTER ICEBERG TABLE [ IF EXISTS ] <table_name> ALTER COLUMN <structured_column>
  SET DATA TYPE <new_structured_type>
  RENAME FIELDS
Copy

Parameter

table_name

Bezeichner der zu ändernden Tabelle.

Wenn der Bezeichner Leerzeichen oder Sonderzeichen enthält, muss die gesamte Zeichenfolge in doppelte Anführungszeichen gesetzt werden. Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß- und Kleinschreibung zu beachten.

Weitere Informationen dazu finden Sie unter Anforderungen an Bezeichner.

ALTER COLUMN structured_column

Gibt die Spalte des strukturierten Typs an, die geändert werden soll.

Wenn der Bezeichner Leerzeichen oder Sonderzeichen enthält, muss die gesamte Zeichenfolge in doppelte Anführungszeichen gesetzt werden. Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß- und Kleinschreibung zu beachten.

Weitere Informationen dazu finden Sie unter Anforderungen an Bezeichner.

SET DATA TYPE new_structured_type

Eine vollständige Spezifikation für den neuen strukturierten Typ, der für die Spalte verwendet werden soll. Um zum Beispiel ein strukturiertes ARRAY von NUMBER-Elementen anzugeben, verwenden Sie ARRAY(NUMBER).

Weitere Informationen dazu finden Sie unter Festlegen eines strukturierten Typs und in den Beispielen auf dieser Seite.

RENAME FIELDS

Gibt an, dass der Befehl einen oder mehrere Schlüssel in einem strukturierten OBJECT umbenennen soll. Der alte und der neue Schlüssel dürfen sich nur im Namen unterscheiden und müssen exakt dieselbe Hierarchie und denselben Datentyp haben. Das Umbenennen von Schlüsseln ändert nicht die Feld-IDs.

Die Umbenennung von Schlüsseln kann nicht mit anderen Änderungen an strukturierten Typen in einer Iceberg-Tabelle kombiniert werden.

Siehe RENAME FIELDS-Beispiele.

Anforderungen an die Zugriffssteuerung

Eine Rolle, die zur Ausführung dieses SQL-Befehls verwendet wird, muss mindestens die folgenden Berechtigungen haben:

Berechtigung

Objekt

Anmerkungen

OWNERSHIP

Iceberg-Tabelle

OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege).

USAGE

Externes Volume

Beachten Sie, dass für die Bearbeitung eines Objekts in einem Schema auch die Berechtigung USAGE für die übergeordnete Datenbank und das Schema erforderlich ist.

Eine Anleitung zum Erstellen einer kundenspezifischen Rolle mit einer bestimmten Gruppe von Berechtigungen finden Sie unter Erstellen von kundenspezifischen Rollen.

Allgemeine Informationen zu Rollen und Berechtigungen zur Durchführung von SQL-Aktionen auf sicherungsfähigen Objekten finden Sie unter Übersicht zur Zugriffssteuerung.

Nutzungshinweise

  • Dieser Befehl unterstützt die folgenden Aktionen nicht:

    • Entwickeln eines strukturierten Typs in einen nicht strukturierten Typ (oder umgekehrt).

    • Festlegen einer Null-Einschränkung für ein strukturiertes ARRAY-Element oder die Schlüssel-Wert-Paare eines strukturierten MAP-Objekts.

    • Verwenden von RENAME FIELDS, um einen Schlüssel umzubenennen, der Teil des Gruppierungsschlüssels der Tabelle ist.

    • Ändern der NULL-Einschränkung für ein strukturiertes OBJECT.

  • Bei Tabellen, die Datenzugriffsrichtlinien verwenden, müssen Sie sicherstellen, dass der neue Datentyp für eine Spalte mit dem Argumenttyp Ihrer Datenzugriffsrichtlinie kompatibel ist. Andernfalls könnte das Abfragen der Tabelle fehlschlagen. Wenn Sie zum Beispiel einen Schlüssel zu einer strukturierten OBJECT-Spalte hinzufügen, müssen Sie Ihre Richtlinie ändern oder eine neue Richtlinie erstellen und diese auf Ihre Tabelle anwenden.

  • Metadaten:

    Achtung

    Kunden müssen sicherstellen, dass bei der Nutzung des Snowflake-Dienstes keine personenbezogenen Daten (außer für ein Objekt „Benutzer“), sensible Daten, exportkontrollierte Daten oder andere regulierte Daten als Metadaten eingegeben werden. Weitere Informationen dazu finden Sie unter Metadatenfelder in Snowflake.

Beispiele

Entwickeln von Typen

Sie können den Typ für ein Feld zu einem strukturierten Typ weiterentwickeln. Die Weiterentwicklung des Typs bedeutet, dass er zu einem größeren, verwandten Iceberg-Datentyp erweitert wird.

Snowflake unterstützt die folgenden Typentwicklungen, in Übereinstimmung mit der Apache Iceberg-Spezifikation:

  • Ändern eines Feldes vom Typ int in den Typ long.

  • Ändern eines Feldes vom Typ float in den Typ double.

  • Ändern eines Feldes vom Typ decimal(p,s) in den Typ decimal(p',s), wobei p kleiner als p' ist.

Um einen Feldtyp zu entwickeln, verwenden Sie die Snowflake-Syntax zum Spezifizieren strukturierter Typen. Sie können den Datentyp Iceberg in Ihrer Spezifikation verwenden. Die folgende Anweisung ändert zum Beispiel den Elementtyp einer strukturierten ARRAY-Spalte in den (Iceberg-)Typ long.

ALTER ICEBERG TABLE my_iceberg_table ALTER COLUMN col1
  SET DATA TYPE ARRAY(long);
Copy

Informationen zum Zuordnen von Iceberg-Datentypen zu Snowflake-Datentypen finden Sie unter Datentypen für Apache Iceberg™-Tabellen.

Neusortieren von Schlüsseln

Um die Reihenfolge der Schlüssel in einem strukturierten OBJECT neu anzuordnen, geben Sie in Ihrer ALTER ICEBERG TABLE-Anweisung eine neue Reihenfolge an. Das Umstellen der Schlüsselreihenfolge hat keinen Einfluss auf die Daten in dem OBJECT.

Betrachten Sie beispielsweise die folgende CREATE ICEBERG TABLE-Anweisung: Die Tabelle hat eine Spalte (column_1) vom Typ OBJECT mit zwei Schlüsseln in einer bestimmten Reihenfolge:

CREATE ICEBERG TABLE my_iceberg_table (
  column_1 OBJECT(
      key_a int,
      key_b int
    )
  )
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = '';
Copy

Der folgende Befehl ändert die Reihenfolge der Schlüssel so, dass key_b vor key_a steht:

ALTER ICEBERG TABLE my_iceberg_table ALTER COLUMN column_1
  SET DATA TYPE OBJECT(
    key_b int,
    key_a int
  );
Copy

Hinzufügen von Schlüsseln

Sie können Schlüssel zu einem strukturierten OBJECT hinzufügen. Ein neuer Schlüssel kann für seinen Wert jeden der für Iceberg-Tabellen unterstützten Datentypen verwenden.

Bemerkung

Sie können beim Hinzufügen eines Schlüssels keine Null-Einschränkung festlegen, da Snowflake den Wert des Schlüssels für alle vorhandenen Zeilen in der Tabelle auf NULL setzt.

Betrachten Sie beispielsweise die folgende CREATE ICEBERG TABLE-Anweisung: Die Tabelle hat genau eine Spalte (column_1) vom Typ OBJECT mit genau einem Schlüssel (key_1):

CREATE ICEBERG TABLE my_iceberg_table (
  column_1 OBJECT(
      key_1 int
    )
  )
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = '';
Copy

Der folgende Befehl fügt einen Schlüssel namens key_2 zu column_1 hinzu:

ALTER ICEBERG TABLE my_iceberg_table ALTER COLUMN column_1
  SET DATA TYPE OBJECT(
    key_1 int,
    key_2 int
  );
Copy

Löschen von Schlüsseln

Bemerkung

Das Löschen eines Schlüssels, dessen Wert ein strukturierter Datentyp ist, der zu einem Gruppierungsschlüssel gehört, wird nicht unterstützt.

Um einen Schlüssel aus einem strukturierten OBJECT zu entfernen, verwenden Sie den Befehl ALTER ICEBERG TABLE … ALTER COLUMN, um das OBJECT neu zu definieren.

Wenn Sie den Schlüssel löschen, werden der Schlüssel und sein Wert aus allen Zeilen der Tabelle entfernt.

Betrachten Sie beispielsweise die folgende CREATE ICEBERG TABLE-Anweisung: Die Tabelle hat genau eine Spalte (column_1) vom Typ OBJECT mit zwei Schlüsseln:

CREATE ICEBERG TABLE my_iceberg_table (
  column_1 OBJECT(
      key_1 int,
      key_2 ARRAY(string)
    )
  )
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = '';
Copy

Der folgende Befehl löscht den Schlüssel mit dem Namen key_2, indem er ihn in der OBJECT-Spezifikation weglässt:

ALTER ICEBERG TABLE my_iceberg_table ALTER COLUMN column_1
  SET DATA TYPE OBJECT(
    key_1 int
  );
Copy

Umbenennen von Schlüsseln

Um die Schlüsselnamen in einem strukturierten OBJECT zu ändern, verwenden Sie die Schlüsselwörter RENAME FIELDS.

Betrachten Sie beispielsweise die folgende CREATE ICEBERG TABLE-Anweisung:

CREATE ICEBERG TABLE my_iceberg_table (
  column_1 OBJECT(
      key_1 int,
      key_2 int
    )
  )
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = '';
Copy

Der folgende Befehl verwendet RENAME FIELDS, um die Schlüssel in column_1 umzubenennen:

ALTER ICEBERG TABLE my_iceberg_table ALTER COLUMN column_1
  SET DATA TYPE OBJECT(
    k_1 int,
    k_2 int
  )
  RENAME FIELDS;
Copy