Amazon Redshift unterstützt die Verwendung von Python-UDFs nach dem 30. Juni 2026 nicht mehr. Wir werden damit beginnen, es schrittweise durchzusetzen. Weitere Informationen zum Ende der Lebensdauer von Python und zu den Migrationsoptionen finden Sie im Blogbeitrag
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.
Tabellendefinitionen ändern
ALTER TABLEAnweisungen werden verwendet, um Tabellendefinitionen zu ändern, einschließlich Schema, Partitionsspezifikationen und Eigenschaften. Sie können diese DDL-Anweisungen verwenden, um Ihre Iceberg-Tabellen direkt über Amazon Redshift zu verwalten.
Alle ALTER TABLE Anweisungen unterstützen die Verwendung externer Schemareferenzen oder dreiteiliger Notationsreferenzen für Iceberg-Tabellen. In den folgenden Syntaxbeispielen kann das eine der folgenden sein:iceberg_table
-- External schema notation:<external_schema>.<table_name>-- Three-part notation for S3 table buckets: "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name>-- Three-part notation for the awsdatacatalog root catalog: awsdatacatalog.<database_name>.<table_name>
Weitere Informationen finden Sie unter Referenzieren von Iceberg-Tabellen in Amazon Redshift.
Beachten Sie bei der Verwendung von ALTER TABLE Anweisungen Folgendes:
-
ALTER TABLEAnweisungen unterstützen derzeit nur Iceberg v2- oder v3-Tabellen. -
Alle
ALTER TABLEAnweisungen sind reine Metadaten-Operationen. -
ALTER TABLEAnweisungen unterstützen keine Tabellen mit komplexen Spalten.
Inhalt
Aktualisierung auf Iceberg v3
Sie können eine Iceberg v2-Tabelle auf Version 3 aktualisieren, indem Sie: ALTER TABLE SET
TABLE PROPERTIES
ALTER TABLEiceberg_tableSET TABLE PROPERTIES ('format-version' = '3');
Weitere Details finden Sie unter Upgrade von v2 auf v3.
ALTER TABLE RENAME COLUMN
ALTER TABLEiceberg_tableRENAME [COLUMN]col_nameTOnew_name;
ALTER TABLE RENAME COLUMNbenennt eine vorhandene Spalte um. Das kann eine Partitionsspalte oder eine nicht partitionierte Spalte sein. Nach der Umbenennung ändern sich der Spaltendatentyp und die Partitionsspezifikation nicht.col_name
Anmerkung
ALTER TABLE RENAME COLUMNwird für AWS Lake Formation registrierte Tabellen nicht unterstützt.
ADD/DROP TABELLENSPALTE ÄNDERN
ALTER TABLEiceberg_tableADD [COLUMN]col_namecol_type;
ALTER TABLEiceberg_tableDROP [COLUMN]col_name;
ADD COLUMNfügt einer vorhandenen Iceberg-Tabelle eine Spalte hinzu. Sie können jeden Datentyp verwenden, der von Amazon Redshift Iceberg Writes unterstützt wird. Weitere Informationen finden Sie unter Mit Apache-Iceberg-Tabellen unterstützte Datentypen.
ADD COLUMNist ein reiner Metadaten-Vorgang. Die Werte neu hinzugefügter Spalten in vorhandenen Zeilen sind. NULL
DROP COLUMNlöscht eine Spalte aus einer vorhandenen Iceberg-Tabelle. Bei partitionierten Tabellen können Sie keine Spalte löschen, die zur aktuellen Partitionsspezifikation gehört. Sie müssen zuerst das Partitionsfeld entfernen, das die Spalte umfasst, bevor Sie die Spalte löschen. Weitere Informationen finden Sie unter PARTITIONSFELD „TABELLE ÄNDERN“ HINZUFÜGEN, LÖSCHEN UND ERSETZEN.
Für Iceberg v3-Tabellen können Sie beim Hinzufügen einer Spalte einen Standardwert angeben. Bestehende Datendateien geben für die neu hinzugefügte Spalte den angegebenen Standardwert statt NULL zurück, ohne dass die Daten neu geschrieben werden müssen. Standardspaltenwerte werden nur für Iceberg v3-Tabellen unterstützt. Amazon Redshift gibt einen Fehler zurück, wenn Sie einen Standardwert für eine Iceberg v2-Tabelle angeben.
-- External schema notation ALTER TABLE my_external_schema.orders ADD COLUMN priority INT DEFAULT 0; -- Three-part notation (awsdatacatalog / Glue) ALTER TABLE awsdatacatalog.my_glue_db.orders ADD COLUMN priority INT DEFAULT 0; -- Three-part notation (S3 Table Buckets) ALTER TABLE "amzn-s3-demo-bucket@s3tablescatalog".my_namespace.orders ADD COLUMN priority INT DEFAULT 0;
Bei vorhandenen Zeilen wird der Standardwert für die neu hinzugefügte Spalte eingegeben:
-- Existing table with rows SELECT id FROM my_external_schema.orders; -- 1 -- 2 -- Add a column with a default ALTER TABLE my_external_schema.orders ADD COLUMN status varchar DEFAULT 'active'; -- Existing rows return the default without a data rewrite SELECT id, status FROM my_external_schema.orders; -- 1 | active -- 2 | active
TABELLE ÄNDERN, SPALTE ÄNDERN
ALTER TABLEiceberg_tableALTER COLUMNcolumn_nameTYPEupdated_data_type;
ALTER TABLE ALTER COLUMNändert den Datentyp einer vorhandenen Spalte. Es ist nur eine Erweiterung des Typs zulässig, keine Verengung. Da Daten nach dem nicht neu geschrieben werdenALTER, kann eine Einschränkung der Datentypen zu einem Überlauf führen, wenn die vorhandenen Tabellendaten verwendet werden. Die folgenden Typerweiterungen sind gemäß der Iceberg-Spezifikation zulässig:
int → bigint float → double decimal(P, S) → decimal(P2, S) where P2 > P (scale cannot be changed)
In Amazon Redshift können Datentypen Aliase haben. Beispielsweise verwenden 4-Byte-Ganzzahlen den Typnamen oder. int int4 Solange sie in Iceberg-Typen einer 4-Byte-Ganzzahl zugeordnet sind, ist eine Typerweiterung auf 8-Byte-Ganzzahlen zulässig.
Eine Iceberg-Tabelle wird beispielsweise mit 4-Byte-Integertypen erstellt:
CREATE TABLEiceberg_table(cint int) USING ICEBERG LOCATION 's3://your-bucket-name/prefix/';
Sie kann durch diese Aussage erweitert werden: ALTER
ALTER TABLEiceberg_tableALTER COLUMN cint TYPE int8;
Die vollständige Liste der Datentypzuordnungen zwischen Amazon Redshift-Typen und Iceberg-Typen finden Sie unter. Mit Apache-Iceberg-Tabellen unterstützte Datentypen
Das Erweitern des Typs einer Spalte, die zur vorhandenen Partitionsspezifikation gehört, wird nicht unterstützt.
Für Iceberg v3-Tabellen können Sie einen Standardwert für eine vorhandene Spalte festlegen oder entfernen:
ALTER TABLEiceberg_tableALTER COLUMNcolumn_nameSET DEFAULTliteral_value; ALTER TABLEiceberg_tableALTER COLUMNcolumn_nameDROP DEFAULT;
SET DEFAULT ändert den Standardwert einer vorhandenen Spalte. Die neue Standardeinstellung gilt für Datendateien, die nach der Änderung geschrieben wurden. Bestehende Datendateien verwenden weiterhin die vorherige Standardeinstellung.
DROP DEFAULT entfernt den Standardwert, der auf neue Schreibvorgänge angewendet wird. Dies entspricht dem Setzen des Standardwerts auf NULL. Datendateien, die die Spalte nicht enthalten, geben weiterhin den ursprünglichen Standardwert der Spalte zurück.
-- External schema notation ALTER TABLE my_external_schema.orders ALTER COLUMN status SET DEFAULT 'active'; ALTER TABLE my_external_schema.orders ALTER COLUMN status DROP DEFAULT; -- Three-part notation (awsdatacatalog / Glue) ALTER TABLE awsdatacatalog.my_glue_db.orders ALTER COLUMN status SET DEFAULT 'active'; ALTER TABLE awsdatacatalog.my_glue_db.orders ALTER COLUMN status DROP DEFAULT; -- Three-part notation (S3 Table Buckets) ALTER TABLE "amzn-s3-demo-bucket@s3tablescatalog".my_namespace.orders ALTER COLUMN status SET DEFAULT 'active'; ALTER TABLE "amzn-s3-demo-bucket@s3tablescatalog".my_namespace.orders ALTER COLUMN status DROP DEFAULT;
ÄNDERN SIE DIE EIGENSCHAFTEN DER TABELLE, LEGEN SIE FEST
ALTER TABLEiceberg_tableSET TABLE PROPERTIES ( 'compression_type' = 'compression_value');
Mit dieser Anweisung können Sie die Standard-Tabelleneigenschaft überschreiben. Derzeit ist die einzige Tabelleneigenschaft, die für diese Anweisung zulässig ist, compression_type Sie können sie überschreiben, um einen anderen Komprimierungstyp für die Parquet-Dateien der Iceberg-Tabelle zu verwenden. Daten, die nach dem eingefügt werden, ALTER verwenden den neuen Komprimierungstyp.
Die möglichen Werte für compression_type sind: brotli gzipsnappy,uncompressed, undzstd.
Sie können auch eine vorhandene Iceberg v2-Tabelle auf Version 3 aktualisieren, indem Sie die Formatversion festlegen:
ALTER TABLEiceberg_tableSET TABLE PROPERTIES ('format-version' = '3');
Weitere Details finden Sie unter Upgrade von v2 auf v3.
PARTITIONSFELD „TABELLE ÄNDERN“ HINZUFÜGEN, LÖSCHEN UND ERSETZEN
ALTER TABLEiceberg_tableADD PARTITION FIELDcolumn_name|transform_function;
ALTER TABLEiceberg_tableDROP PARTITION FIELDcolumn_name|transform_function;
ALTER TABLEiceberg_tableREPLACE PARTITION FIELDcolumn_name|transform_functionWITHcolumn_name|transform_function;
Die [ADD | DROP | REPLACE] PARTITION FIELD Anweisungen ermöglichen es Ihnen, die bestehende Tabellenpartitionsspezifikation zu ändern und so die Partitionsentwicklung durch Amazon Redshift zu unterstützen.
Die ALTER Anweisungen für die Partitionsspezifikation ändern nur die Tabellenmetadaten und partitionieren die vorhandenen Tabellendaten nicht neu. Danach folgen neue DatenALTER, die in die Tabelle eingefügt werden, der neu definierten Partitionsspezifikation.
Beachten Sie die folgenden Einschränkungen für diese Anweisungen:
-
Wenn Sie ein neues Partitionsfeld über
ADDoder definierenREPLACE ... WITH ..., darf das neue Feld keine Spalte enthalten, die bereits Teil anderer Partitionsfelder ist. Dies ist dieselbe Einschränkung wie bei der Definition der ursprünglichen Partitionsspezifikation unterCREATE TABLE. Weitere Informationen finden Sie unter CREATE TABLE.Zum Beispiel, wenn Sie eine Tabelle haben:
CREATE TABLEiceberg_table... PARTITIONED BY year(ship_date) USING ICEBERG ...;Folgendes schlägt fehl, weil
ship_datees bereits Teil eines vorhandenen Partitionsfeldes ist:ALTER TABLEiceberg_tableADD PARTITION FIELD bucket(128, ship_date); -
Beim Hinzufügen eines neuen Partitionsfeldes wird das neu hinzugefügte Feld immer als letzte Partitionsebene der Tabelle behandelt. Beispiel:
CREATE TABLEiceberg_table... PARTITIONED BY year(ship_date) USING ICEBERG ...; ALTER TABLEiceberg_tableADD PARTITION FIELD bucket(256, item_id);Die Spezifikation der Tabellenpartition ist dieselbe wie:
CREATE TABLEiceberg_table... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; -
Wenn ein Partitionsfeld gelöscht wird, ist es nicht auf die letzte Partitionsebene beschränkt. Sie können jedes vorhandene Partitionsfeld löschen. Beispiel:
CREATE TABLEiceberg_table... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLEiceberg_tableDROP PARTITION FIELD year(ship_date);Danach wird
ALTERdie Tabelle nur noch durch partitioniertbucket(256, item_id). -
Beim Aufruf
REPLACE PARTITION FIELD ... WITH ...kann das zu ersetzende Partitionsfeld ein beliebiges Feld in der Spezifikation sein und ist nicht auf das letzte Feld beschränkt. Beispiel:CREATE TABLEiceberg_table... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLEiceberg_tableREPLACE PARTITION FIELD year(ship_date) WITH month(ship_date);Danach wird
ALTER(month(ship_date), bucket(256, item_id))die Tabellenpartition. -
Die
voidTransformation wird inALTERPartitionsanweisungen nicht unterstützt.