本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立 Iceberg 資料表
若要建立 Iceberg 資料表以在 Athena 中使用,您可以使用此頁面中記錄的CREATE TABLE
陳述式,也可以使用 AWS Glue 爬蟲程式。
使用CREATETABLE陳述式
Athena 可建立 Iceberg V2 資料表。有關 v1 和 v2 資料表之間的區別,請參閱 Apache Iceberg 文件中的格式版本變更
Athena CREATE TABLE
建立一個不含資料的 Iceberg 資料表。如果資料表使用 Iceberg 開放原始碼 glue 目錄
警告
執行CREATE EXTERNAL TABLE
會導致資料表類型 不支援的錯誤訊息外部關鍵字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://amzn-s3-demo-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://amzn-s3-demo-bucket/
your-folder
/' TBLPROPERTIES ( 'table_type' = 'ICEBERG' )
下表顯示可用的分割區轉換函數。
函式 | 描述 | 支援的類型 |
---|---|---|
year(ts) |
按年分割區 | date , timestamp |
month(ts) |
按月分割區 | date , timestamp |
day(ts) |
按日分割區 | date , timestamp |
hour(ts) |
按小時分割區 | timestamp |
bucket( |
依雜湊值模組分割 N 儲存貯體。這與 Hive 資料表的雜湊儲存貯體具有相同的概念。 |
int , long , decimal ,
date , timestamp ,
string , binary
|
truncate( |
分割依值截斷為 L |
int , long , decimal ,
string |
Athena 支援 Iceberg 的隱藏分割。如需詳細資訊,請參閱 Apache Iceberg 文件中的 Iceberg 隱藏分割
本節說明可在 CREATE
TABLE
陳述式的 TBLPROPERTIES
子句中指定為鍵值對的資料表屬性。Athena 僅允許使用預先定義之資料表屬性清單中的鍵值對來建立或更改 Iceberg 資料表。下表顯示您可指定的資料表屬性。如需有關壓縮選項的詳細資訊,請參閱本文件中的 優化冰山表。如果您希望 Athena 支援特定的開放原始碼資料表組態屬性,請將意見回饋傳送至 athena-feedback@amazon.com
format
Description | 檔案資料格式 |
允許的屬性值 | 支援的檔案格式和壓縮組合會隨 Athena 引擎版本而異。如需詳細資訊,請參閱使用冰山表壓縮。 |
預設值 | parquet |
write_compression
optimize_rewrite_data_file_threshold
Description | 資料最佳化的專用組態。如果需要最佳化的資料檔案少於指定的閾值,則不會重寫這些檔案。這允許累積更多的資料檔案,從而產生更接近目標大小的檔案,並略過不必要的運算以節省成本。 |
允許的屬性值 | 正數。必須小於 50。 |
預設值 | 5 |
optimize_rewrite_delete_file_threshold
Description | 資料最佳化的專用組態。如果與資料檔案關聯的刪除檔案少於閾值,則不會重寫資料檔案。這允許為每個資料檔案累積更多的刪除檔案,從而節省成本。 |
允許的屬性值 | 正數。必須小於 50。 |
預設值 | 2 |
vacuum_min_snapshots_to_keep
Description |
要保留在資料表主要分支上的快照數目下限。 此值優先於 |
允許的屬性值 | 正數。 |
預設值 | 1 |
vacuum_max_snapshot_age_seconds
Description | 要在主分支上保留的快照最長期限。如果由 vacuum_min_snapshots_to_keep 指定的剩餘最小快照早於指定的期限,則會忽略此值。此資料表行為屬性對應至 Apache Iceberg 組態中的 history.expire.max-snapshot-age-ms 屬性。 |
允許的屬性值 | 正數。 |
預設值 | 432,000 秒 (5 天) |
vacuum_max_metadata_files_to_keep
Description | 資料表主分支上要保留的先前中繼資料檔案數目上限。 |
允許的屬性值 | 正數。 |
預設值 | 100 |
範例CREATETABLE陳述式
下列範例會建立具有三個資料欄的 Iceberg 資料表。
CREATE TABLE iceberg_table ( id int, data string, category string) PARTITIONED BY (category, bucket(16,id)) LOCATION 's3://amzn-s3-demo-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 爬蟲程式自動將 Iceberg 資料表註冊到 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。