View a markdown version of this page

Tabellendefinitionen ändern - Amazon Redshift

Amazon Redshift unterstützt ab Patch 198 nicht mehr die Erstellung neuer Python-UDFs. Bestehende Python-UDFs werden bis zum 30. Juni 2026 weiterhin funktionieren. Weitere Informationen finden Sie im Blog-Posting.

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, einschließlich Schema, Partitionsspezifikationen und Eigenschaften, zu ändern. 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 iceberg_table kann es sich um eine der folgenden Optionen handeln:

-- 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 Verweisen auf Iceberg-Tabellen in Amazon Redshift.

Beachten Sie bei der Verwendung von ALTER TABLE Anweisungen Folgendes:

  • ALTER TABLEAnweisungen unterstützen derzeit nur Iceberg v2-Tabellen.

  • Alle ALTER TABLE Anweisungen sind reine Metadaten-Operationen.

  • ALTER TABLEAnweisungen unterstützen keine Tabellen mit komplexen Spalten.

ALTER TABLE RENAME COLUMN

ALTER TABLE iceberg_table RENAME [COLUMN] col_name TO new_name;

ALTER TABLE RENAME COLUMNbenennt eine bestehende Spalte um. Dabei col_name kann es sich um eine Partitionsspalte oder eine nicht partitionierte Spalte handeln. Nach der Umbenennung ändern sich der Spaltendatentyp und die Partitionsspezifikation nicht.

Anmerkung

ALTER TABLE RENAME COLUMNwird für AWS Lake Formation registrierte Tabellen nicht unterstützt.

ADD/DROP TABELLENSPALTE ÄNDERN

ALTER TABLE iceberg_table ADD [COLUMN] col_name col_type;
ALTER TABLE iceberg_table DROP [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 eine reine Metadaten-Operation. 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 betrifft, bevor Sie die Spalte löschen. Weitere Informationen finden Sie unter PARTITIONSFELD „TABELLE HINZUFÜGEN“, „LÖSCHEN“ und „ERSETZEN“ ÄNDERN.

TABELLE ÄNDERN, SPALTE ÄNDERN

ALTER TABLE iceberg_table ALTER COLUMN column_name TYPE updated_data_type;

ALTER TABLE ALTER COLUMNändert den Datentyp einer vorhandenen Spalte. Nur eine Erweiterung des Typs ist zulässig, keine Verengung. Da Daten nach dem nicht neu geschrieben werdenALTER, kann eine Eingrenzung 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 auf 4-Byte-Ganzzahlen vom Typ int abgebildet sind, ist eine Typerweiterung auf 8-Byte-Ganzzahlen zulässig.

Beispielsweise wird eine Iceberg-Tabelle mit 4-Byte-Integer-Typen erstellt:

CREATE TABLE iceberg_table (cint int) USING ICEBERG LOCATION 's3://your-bucket-name/prefix/';

Sie kann durch diese Aussage erweitert werden: ALTER

ALTER TABLE iceberg_table ALTER COLUMN cint TYPE int8;

Die vollständige Liste der Datentypzuordnungen zwischen Amazon Redshift Redshift-Typen und Iceberg-Typen finden Sie unter. Mit Apache-Iceberg-Tabellen unterstützte Datentypen

Die Erweiterung des Typs einer Spalte, die zur vorhandenen Partitionsspezifikation gehört, wird nicht unterstützt.

TABELLE ÄNDERN, TABELLENEIGENSCHAFTEN FESTLEGEN

ALTER TABLE iceberg_table SET TABLE PROPERTIES ( 'compression_type' = 'compression_value');

Mit dieser Anweisung können Sie die Standardeigenschaft der Tabelle überschreiben. Derzeit ist die einzige Tabelleneigenschaft, die für diese Anweisung zulässig istcompression_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: brotligzip,snappy,uncompressed, undzstd.

PARTITIONSFELD „TABELLE HINZUFÜGEN“, „LÖSCHEN“ und „ERSETZEN“ ÄNDERN

ALTER TABLE iceberg_table ADD PARTITION FIELD column_name | transform_function;
ALTER TABLE iceberg_table DROP PARTITION FIELD column_name | transform_function;
ALTER TABLE iceberg_table REPLACE PARTITION FIELD column_name | transform_function WITH column_name | transform_function;

Die [ADD | DROP | REPLACE] PARTITION FIELD Anweisungen ermöglichen es Ihnen, die bestehende Tabellenpartitionsspezifikation zu ändern, wodurch die Partitionsentwicklung über Amazon Redshift unterstützt wird.

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, die neu definierte Partitionsspezifikation.

Beachten Sie die folgenden Einschränkungen für diese Anweisungen:

  • Wenn Sie mit ADD oder ein neues Partitionsfeld 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.

    Wenn Sie beispielsweise eine Tabelle haben:

    CREATE TABLE iceberg_table ... PARTITIONED BY year(ship_date) USING ICEBERG ...;

    Folgendes schlägt fehl, weil ship_date es bereits Teil eines vorhandenen Partitionsfeldes ist:

    ALTER TABLE iceberg_table ADD 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 TABLE iceberg_table ... PARTITIONED BY year(ship_date) USING ICEBERG ...; ALTER TABLE iceberg_table ADD PARTITION FIELD bucket(256, item_id);

    Die Spezifikation der Tabellenpartition ist dieselbe wie:

    CREATE TABLE iceberg_table ... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...;
  • Wenn Sie ein Partitionsfeld löschen, ist es nicht auf die letzte Partitionsebene beschränkt. Sie können jedes vorhandene Partitionsfeld löschen. Beispiel:

    CREATE TABLE iceberg_table ... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLE iceberg_table DROP PARTITION FIELD year(ship_date);

    Danach wird ALTER die Tabelle nur noch nach 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 TABLE iceberg_table ... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLE iceberg_table REPLACE PARTITION FIELD year(ship_date) WITH month(ship_date);

    Danach wird ALTER (month(ship_date), bucket(256, item_id)) die Tabellenpartition.

  • Die void Transformation wird in ALTER Partitionsanweisungen nicht unterstützt.