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.
Syntax¶
Spalte mit strukturiertem Typ bearbeiten
ALTER ICEBERG TABLE [ IF EXISTS ] <table_name> ALTER COLUMN <structured_column>
SET DATA TYPE <new_structured_type>
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
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 Typlong
.Ändern eines Feldes vom Typ
float
in den Typdouble
.Ändern eines Feldes vom Typ
decimal(p,s)
in den Typdecimal(p',s)
, wobeip
kleiner alsp'
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);
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 = '';
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
);
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 = '';
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
);
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 = '';
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
);
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 = '';
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;