Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊,請參閱部落格文章
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
變更資料表定義
ALTER TABLE 陳述式用於變更資料表定義,包括結構描述、分割區規格和屬性。您可以使用這些 DDL 陳述式,直接透過 Amazon Redshift 管理您的 Iceberg 資料表。
所有ALTER TABLE陳述式都支援使用 Iceberg 資料表的外部結構描述參考或三部分表示法參考。在下面的語法範例中, 可以是以下任何一個: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>
如需詳細資訊,請參閱在 Amazon Redshift 中參考 Iceberg 資料表。
使用ALTER TABLE陳述式時,請考慮下列事項:
-
ALTER TABLE陳述式目前僅支援 Iceberg v2 資料表。 -
所有
ALTER TABLE陳述式都是僅限中繼資料的操作。 -
ALTER TABLE陳述式不支援具有複雜類型資料欄的資料表。
內容
ALTER TABLE RENAME COLUMN
ALTER TABLEiceberg_tableRENAME [COLUMN]col_nameTOnew_name;
ALTER TABLE RENAME COLUMN 重新命名現有的資料欄。 可以是分割區資料欄或非分割區資料欄。重新命名後,資料欄資料類型和分割區規格不會變更。col_name
注意
ALTER TABLE RENAME COLUMN 已 AWS Lake Formation 註冊的資料表不支援 。
ALTER TABLE ADD/DROP COLUMN
ALTER TABLEiceberg_tableADD [COLUMN]col_namecol_type;
ALTER TABLEiceberg_tableDROP [COLUMN]col_name;
ADD COLUMN 會將一欄新增至現有的 Iceberg 資料表。您可以使用 Amazon Redshift Iceberg 寫入支援的任何資料類型。如需詳細資訊,請參閱Apache Iceberg 資料表支援的資料類型。
ADD COLUMN 是僅限中繼資料的操作。在現有資料列上新增的資料欄值為 NULL。
DROP COLUMN 從現有的 Iceberg 資料表捨棄資料欄。對於分割資料表,您無法捨棄屬於目前分割區規格的資料欄。在捨棄資料欄之前,您必須先移除涉及資料欄的分割區欄位。如需詳細資訊,請參閱ALTER TABLE ADD、DROP 和 REPLACE PARTITION 欄位。
更改資料表更改資料欄
ALTER TABLEiceberg_tableALTER COLUMNcolumn_nameTYPEupdated_data_type;
ALTER TABLE ALTER COLUMN 會變更現有資料欄的資料類型。僅允許類型變寬,不允許變窄。由於資料不會在 之後重寫ALTER,因此在耗用現有的資料表資料時,縮小資料類型可能會導致溢位。每個 Iceberg 規格允許以下類型加寬:
int → bigint float → double decimal(P, S) → decimal(P2, S) where P2 > P (scale cannot be changed)
在 Amazon Redshift 中,資料類型可以有別名。例如,4 位元組整數使用類型名稱 int或 int4。只要它們映射到 Iceberg 類型的 4 位元組整數,就可以將類型加寬到 8 位元組整數。
例如,使用 4 位元組整數類型建立 Iceberg 資料表:
CREATE TABLEiceberg_table(cint int) USING ICEBERG LOCATION 's3://your-bucket-name/prefix/';
它可以被此ALTER陳述式加寬:
ALTER TABLEiceberg_tableALTER COLUMN cint TYPE int8;
如需 Amazon Redshift 類型和 Iceberg 類型之間資料類型映射的完整清單,請參閱 Apache Iceberg 資料表支援的資料類型。
不支援擴展屬於現有分割區規格的資料欄類型。
更改資料表集資料表屬性
ALTER TABLEiceberg_tableSET TABLE PROPERTIES ( 'compression_type' = 'compression_value');
此陳述式可讓您覆寫預設資料表屬性。此陳述式目前唯一允許的資料表屬性為 compression_type。您可以覆寫它,以針對 Iceberg 資料表 Parquet 檔案使用不同的壓縮類型。在 之後插入的資料ALTER會使用新的壓縮類型。
的可能值compression_type為:brotli、gzip、uncompressed、 snappy和 zstd。
ALTER TABLE ADD、DROP 和 REPLACE PARTITION 欄位
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;
[ADD | DROP | REPLACE] PARTITION FIELD 陳述式可讓您變更現有的資料表分割區規格,支援透過 Amazon Redshift 進行分割區演變。
分割區規格的ALTER陳述式只會變更資料表中繼資料,而且不會重新分割現有的資料表資料。在 之後ALTER,插入資料表的新資料會遵循新定義的分割區規格。
請考慮這些陳述式的下列限制:
-
透過
ADD或 定義新的分割區欄位時REPLACE ... WITH ...,新欄位不能包含已屬於其他分割區欄位的資料欄。這與您在 定義初始分割區規格時的限制相同CREATE TABLE。如需詳細資訊,請參閱CREATE TABLE。例如,當您有資料表時:
CREATE TABLEiceberg_table... PARTITIONED BY year(ship_date) USING ICEBERG ...;下列 已
ship_date是現有分割區欄位的一部分,因此失敗:ALTER TABLEiceberg_tableADD PARTITION FIELD bucket(128, ship_date); -
新增分割區欄位時,新增的欄位一律會被視為資料表的最後一個分割區層級。例如:
CREATE TABLEiceberg_table... PARTITIONED BY year(ship_date) USING ICEBERG ...; ALTER TABLEiceberg_tableADD PARTITION FIELD bucket(256, item_id);資料表分割區規格與下列項目相同:
CREATE TABLEiceberg_table... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; -
捨棄分割區欄位時,不限於最後一個分割區層級。您可以捨棄任何現有的分割區欄位。例如:
CREATE TABLEiceberg_table... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLEiceberg_tableDROP PARTITION FIELD year(ship_date);在此 之後
ALTER,資料表只會依 分割bucket(256, item_id)。 -
呼叫 時
REPLACE PARTITION FIELD ... WITH ...,要取代的分割區欄位可以是規格中的任何欄位,且不限於最後一個欄位。例如: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);在此之後
ALTER,資料表分割區會變成(month(ship_date), bucket(256, item_id))。 -
分割區
ALTER陳述式不支援void轉換。