建立 Iceberg 資料表 - Amazon Athena

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建立 Iceberg 資料表

若要建立 Iceberg 表格以供 Athena 使用,您可以使用此頁面所述的CREATE TABLE陳述式,或使用 AWS Glue 爬行者程式。

使用 CREATE TABLE 陳述式

Athena 可建立 Iceberg V2 資料表。有關 v1 和 v2 資料表之間的區別,請參閱 Apache Iceberg 文件中的格式版本變更

Athena CREATE TABLE 建立一個不含資料的 Iceberg 資料表。如果資料表使用 Iceberg 開放原始碼 glue 目錄,您可以直接從外部系統 (如 Apache Spark) 查詢資料表。您不必建立外部資料表。

警告

執行 CREATE EXTERNAL TABLE 會導致錯誤訊息 External keyword not supported for table type ICEBERG (資料表類型 ICEBERG 不支援外部關鍵字)。

若要在 Athena 中建立 Iceberg 資料表,請在 TBLPROPERTIES 子句中將 'table_type' 資料表屬性設定成 'ICEBERG',如下列語法摘要所示。

CREATE TABLE [db_name.]table_name (col_name data_type [COMMENT col_comment] [, ...] ) [PARTITIONED BY (col_name | transform, ... )] LOCATION 's3://DOC-EXAMPLE-BUCKET/your-folder/' TBLPROPERTIES ( 'table_type' ='ICEBERG' [, property_name=property_value] )

如需有關您可在 Iceberg 資料表中查詢之資料類型的資訊,請參閱 Athena 中 Iceberg 資料表支援的資料類型

分割

若要建立含有分割區的 Iceberg 資料表,請使用 PARTITIONED BY 語法。必須先在資料欄聲明中宣告要分割的資料欄。PARTITIONED BY 子句中不能包括資料欄類型。您也可以使用 CREATE TABLE 語法來定義分割區轉換。若要指定分割時要使用的多個資料欄,請使用逗號 (,) 字元來分隔資料欄,如下列範例所示。

CREATE TABLE iceberg_table (id bigint, data string, category string) PARTITIONED BY (category, bucket(16, id)) LOCATION 's3://DOC-EXAMPLE-BUCKET/your-folder/' TBLPROPERTIES ( 'table_type' = 'ICEBERG' )

下表顯示可用的分割區轉換函數。

函數 描述 支援的類型
year(ts) 按年分割區 date, timestamp
month(ts) 按月分割區 date, timestamp
day(ts) 按日分割區 date, timestamp
hour(ts) 按小時分割區 timestamp
bucket(N, col) 按雜湊值模組 N 儲存貯體分割區。這與 Hive 資料表的雜湊儲存貯體具有相同的概念。 int, long, decimal, date, timestamp, string, binary
truncate(L, col) 按截斷至 L 的值分割區 int, long, decimal, string

Athena 支援 Iceberg 的隱藏分割。如需詳細資訊,請參閱 Apache Iceberg 文件中的 Iceberg 隱藏分割

資料表屬性

本節說明可在 CREATE TABLE 陳述式的 TBLPROPERTIES 子句中指定為鍵值對的資料表屬性。Athena 僅允許使用預先定義之資料表屬性清單中的鍵值對來建立或更改 Iceberg 資料表。下表顯示您可指定的資料表屬性。如需有關壓縮選項的詳細資訊,請參閱本文件中的 最佳化處理 Iceberg 資料表。如果您希望 Athena 支援特定的開放原始碼資料表組態屬性,請將意見回饋傳送至 athena-feedback@amazon.com

format

Description 檔案資料格式
允許的屬性值 支援的檔案格式和壓縮組合會隨 Athena 引擎版本而異。如需詳細資訊,請參閱 檔案格式支援 Iceberg 資料表壓縮
預設值 parquet

write_compression

Description 檔案壓縮轉碼器
允許的屬性值 支援的檔案格式和壓縮組合會隨 Athena 引擎版本而異。如需詳細資訊,請參閱 檔案格式支援 Iceberg 資料表壓縮
預設值

預設寫入壓縮會隨 Athena 引擎版本而異。如需詳細資訊,請參閱 檔案格式支援 Iceberg 資料表壓縮

optimize_rewrite_data_file_threshold

Description 資料最佳化的專用組態。如果需要最佳化的資料檔案少於指定的閾值,則不會重寫這些檔案。這允許累積更多的資料檔案,從而產生更接近目標大小的檔案,並略過不必要的運算以節省成本。
允許的屬性值 正數。必須小於 50。
預設值 5

optimize_rewrite_delete_file_threshold

Description 資料最佳化的專用組態。如果與資料檔案關聯的刪除檔案少於閾值,則不會重寫資料檔案。這允許為每個資料檔案累積更多的刪除檔案,從而節省成本。
允許的屬性值 正數。必須小於 50。
預設值 2

vacuum_min_snapshots_to_keep

Description

要保留在資料表主要分支上的快照數目下限。

此值優先於 vacuum_max_snapshot_age_seconds 屬性。如果最小剩餘快照早於 vacuum_max_snapshot_age_seconds 指定的期限,則會保留快照,且會忽略 vacuum_max_snapshot_age_seconds 的值。

允許的屬性值 正數。
預設值 1

vacuum_max_snapshot_age_seconds

Description 要在主分支上保留的快照最長期限。如果由 vacuum_min_snapshots_to_keep 指定的剩餘最小快照早於指定的期限,則會忽略此值。
允許的屬性值 正數。
預設值 432,000 秒 (5 天)

真空最大元資料檔案至保留

Description 要保留在資料表主分支上的先前中繼資料檔案數目上限。
允許的屬性值 正數。
預設值 100

CREATE TABLE 陳述式範例

下列範例會建立具有三個資料欄的 Iceberg 資料表。

CREATE TABLE iceberg_table ( id int, data string, category string) PARTITIONED BY (category, bucket(16,id)) LOCATION 's3://DOC-EXAMPLE-BUCKET/iceberg-folder' TBLPROPERTIES ( 'table_type'='ICEBERG', 'format'='parquet', 'write_compression'='snappy', 'optimize_rewrite_delete_file_threshold'='10' )

CREATE TABLE AS SELECT (CTAS)

如需使用 CREATE TABLE AS 陳述式建立 Iceberg 資料表的相關資訊,請參閱 CREATE TABLE AS,特別注意 CTAS 資料表屬性 一節。

使用 AWS Glue 爬蟲程式

您可以使用 AWS Glue 爬蟲將您的冰山表自動註冊到. AWS Glue Data Catalog如果您想要從其他 Iceberg 目錄遷移,可以建立並排程 AWS Glue 爬行程式,並提供 Iceberg 表所在的 Amazon S3 路徑。您可以指定 AWS Glue 爬蟲程式可周遊的 Amazon S3 路徑的深度上限。排定爬行者程式之後, AWS Glue 爬行者程式會擷取結構描述資訊,並在每次執行時 AWS Glue Data Catalog 隨結構描述變更來更新。 AWS Glue 爬行者程式支援跨快照合併結構描述,並更新中的最新中繼資料檔案位置 AWS Glue Data Catalog。如需詳細資訊,請參閱中 AWS Glue的資料目錄和爬行者程式