Amazon Redshift 自 2025 年 11 月 1 日起不再支援建立新的 Python UDF。如果您想要使用 Python UDF,請在該日期之前建立 UDF。現有 Python UDF 將繼續正常運作。如需詳細資訊,請參閱部落格文章
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
SQL 命令
Amazon Redshift 中的 Apache Iceberg 資料表提供強大的方法來管理資料湖中的大型分析資料集。這些資料表支援 ACID 交易、結構描述演變和時間歷程功能,同時維持分析工作負載的高效能。使用 Apache Iceberg 資料表,您可以有效率地整理和分割資料、控制檔案格式和壓縮,以及與其他 AWS服務無縫整合。
您可以使用 和 CREATE TABLE ... USING ICEBERGCREATE TABLE ... USING ICEBERG AS SELECT命令建立分割和未分割的 Iceberg 資料表。您可以使用外部結構描述表示法 (external_schema.table_name) 或三部分表示法 () 來參考 Iceberg 資料表"catalog_name".database_name.table_name。本節中的範例示範這兩種方法。
建立資料表之後,您可以使用標準INSERT命令新增資料。請記住,雖然 Amazon Redshift 適用於許多 Iceberg 資料類型,但您可能需要在插入資訊時轉換某些資料格式。
您可以使用 SHOW TABLES命令檢視 Iceberg 資料表。如果您想要從 移除資料表AWS Glue Data Catalog,您可以使用 DROP TABLE命令。請注意,這只會移除資料表註冊。實際資料將保留在儲存體中,直到您分別刪除為止。
Iceberg 資料表尚未支援所有其他 SQL 陳述式ALTER TABLE,例如 MERGE、、 DELETE UPDATE和 。
下列各節示範在 Amazon Redshift 中建立、插入和管理 Iceberg 資料表的 SQL 語法。
CREATE TABLE
CREATE TABLE [IF NOT EXISTS]<external_schema>.<table_name>( column_name data_type [, ...] ) USING ICEBERG [LOCATION 's3://your-bucket-name/prefix/'] [PARTITIONED BY [[column_name | transform_function]], ...] [TABLE PROPERTIES ('compression_type'='<compression_value>')]
您也可以對 S3 資料表儲存貯體使用三部分表示法:
CREATE TABLE "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name>( column_name data_type [, ...] ) USING ICEBERG [PARTITIONED BY [[column_name | transform_function]], ...] [TABLE PROPERTIES ('compression_type'='<compression_value>')]
請注意, 必須是建立外部資料表的現有外部結構描述名稱。如需如何建立和管理外部結構描述的詳細資訊,請參閱 Amazon Redshift 文件中的 CREATE EXTERNAL SCHEMA。<external_schema>
LOCATION 子句定義此新建立 Iceberg 資料表的資料表位置。對於 Amazon S3 資料表,LOCATION無法指定 ,因為資料表位置是由 Amazon S3 資料表目錄 () 決定s3tablescatalog。
在所有其他情況下, LOCATION 是必要的,而且應該是空的位置,這表示不存在共用此相同儲存貯體和字首的現有 Amazon S3 物件。請注意,Amazon S3 儲存貯體區域必須與 Amazon Redshift 叢集位於相同的區域。
不過, AWS提供將資料從存放在 AWS Glue Data Catalog中的 Iceberg 資料表複寫AWS 區域到不同 的方法AWS 區域,可讓您將寫入複寫到不同區域。如需詳細資訊,請參閱跨 複寫資料AWS 區域。
PARTITIONED BY 定義 Iceberg 資料表分割區。Amazon Redshift 支援除 以外的所有 Iceberg v2 分割區轉換void。以下是支援的轉換清單:
-
身分
-
儲存貯體 【N】
-
截斷【W】
-
年
-
月
-
天
-
小時
如需這些轉換的完整定義和相容的資料類型,請參閱 Apache Iceberg 文件中的分割區轉換
PARTITIONED BY 支援多層級分割。例如,您可執行下列命令:
CREATE TABLE ... USING ICEBERG LOCATION ... PARTITIONED BY (bucket(16, id), year(ship_date));
不過,Amazon Redshift 不支援在多個轉換中使用單一資料欄。例如,不支援下列語法:
CREATE TABLE ... USING ICEBERG LOCATION ... PARTITIONED BY (bucket(16, ship_date), year(ship_date));
TABLE PROPERTIES 子句定義此 Iceberg 資料表的額外資料表屬性。我們支援的唯一資料表屬性是compression_type定義預設 Parquet 資料檔案壓縮。如果未指定,snappy則會使用 做為壓縮轉碼器。的可能值compression_type為:zstd、brotli、snappy、 gzip和 uncompressed。
注意
CREATE TABLE ... LIKE ... Iceberg 資料表不支援 。Iceberg 資料表也不支援資料欄限制條件和資料欄屬性,就像 RMS 資料表一樣。
或者,您可以使用 在單一操作中建立和填入 Iceberg 資料表CREATE TABLE AS SELECT:
CREATE TABLE AS SELECT
CREATE TABLE<external_schema>.<table_name>[( column_name[, ...] )] USING ICEBERG [LOCATION 's3://your-bucket-name/prefix/'] [PARTITIONED BY [[column_name | transform_function]], ...] [TABLE PROPERTIES ('compression_type'='<compression-value>')] AS SELECT query
您也可以使用三部分表示法在自動掛載的目錄中建立資料表:
CREATE TABLE "<catalog_name>".<database_name>.<table_name>[( column_name[, ...] )] USING ICEBERG [LOCATION 's3://your-bucket-name/prefix/'] [PARTITIONED BY [[column_name | transform_function]], ...] [TABLE PROPERTIES ('compression_type'='<compression-value>')] AS SELECT query
這類似於 CREATE TABLE陳述式,但 後面CREATE接著一個SELECT陳述式,以將SELECT查詢結果填入資料表。
此處的 CREATE TABLE子句不再允許您指定資料類型,因為資料欄資料類型將由SELECT查詢決定。
如果SELECT查詢因任何原因失敗,此查詢將會失敗,而且不會建立 Iceberg 資料表。
您可以使用 檢視 Iceberg 資料表的結構SHOW TABLE:
SHOW TABLE
SHOW TABLE<external_schema>.<table_name>
您也可以搭配自動掛載的目錄使用三部分表示法:
SHOW TABLE "<catalog_name>".<database_name>.<table_name>
SHOW TABLE 會顯示 Iceberg 資料表的 CREATE TABLE 陳述式。命令會根據資料表的類型顯示適當的結果。以下是 Iceberg 資料表SHOW TABLE輸出的範例:
CREATE TABLE my_schema.items (id int, price decimal(5, 2)) USING ICEBERG LOCATION 's3://my_s3_bucket/items/' PARTITIONED BY (bucket(16, id)) TABLE PROPERTIES ('compression_type'='snappy')
注意
對於 Amazon S3 資料表,由於資料表位置是由 Amazon S3 資料表目錄管理,SHOW TABLE因此結果中會省略 LOCATION子句。
建立資料表之後,您可以使用 新增資料INSERT INTO:
INSERT INTO
INSERT INTO<external_schema>.<table_name>[(column_name [, ...])] VALUES (...) INSERT INTO<external_schema>.<table_name>[(column_name [, ...])] (SELECT query) -- Using three-part notation for S3 table buckets: INSERT INTO "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name>[(column_name [, ...])] VALUES (...) INSERT INTO "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name>[(column_name [, ...])] (SELECT query)
您可以使用上述語法INSERT INTO現有的 Iceberg 資料表。如果使用 VALUES子句,您可以為 列出的資料欄提供值column_name,如果省略column_name部分,則為所有資料欄提供值。
將資料插入分割資料表時,會根據預先定義的分割區規格分佈新資料列。如果SELECT查詢因任何原因失敗,查詢將會失敗,而且不會將任何資料插入 Iceberg 資料表。
您可以INSERT INTO前往不是由 Amazon Redshift 建立的 Iceberg 資料表。不過,有一些限制:
-
資料表必須是 Iceberg v2 資料表。
-
資料表必須使用 Parquet 做為預設資料格式。
-
資料表不得將中繼資料壓縮設定為 True。
-
資料表不得啟用 Write-Audit-Publish (WAP)。
若要從目錄中移除 Iceberg 資料表,請使用 DROP TABLE命令:
DROP TABLE
DROP TABLE<external_schema>.<table_name>
您也可以搭配自動掛載的目錄使用三部分表示法:
DROP TABLE "<catalog_name>.<database_name>.<table_name>
捨棄 Iceberg 資料表是僅限中繼資料的操作。如果這是 Amazon S3 資料表,則會從 AWS Glue Data Catalog和 Amazon S3 資料表目錄移除資料表項目。Amazon Redshift 不會清除或刪除資料表位置下的任何現有資料檔案或中繼資料檔案。您可以使用 AWS Glue和 Amazon S3 資料表中的功能來移除孤立的檔案。如需 AWS Glue,請參閱刪除孤立檔案。如需 Amazon S3 資料表,請參閱資料表維護。