選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

ALTER TABLE ADD PARTITION

焦點模式
ALTER TABLE ADD PARTITION - Amazon Athena

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

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

為資料表建立一或多個分割區欄。每個分割區由一或多個不同的欄名稱/值組合組成。每種指定的組合都會另外建立一個資料目錄,這樣可在某些情況下改善查詢效能。分割區的欄本身不存在於資料表的資料中,因此,如果您使用的分割區欄名稱和資料表中的欄名稱相同,就會發生錯誤。如需詳細資訊,請參閱分割您的資料

在 Athena 中,資料表及其分割區必須使用相同的資料格式,但其結構描述可能不同。如需詳細資訊,請參閱使用分割區更新資料表

如需有關 IAM 政策中所需資源層級許可的資訊 (包括 glue:CreatePartition),請參閱《AWS Glue API 許可:動作和資源參考》以及 設定對 中資料庫和資料表的存取 AWS Glue Data Catalog。如需有關使用 Athena 時許可的疑難排解資訊,請參閱 對 Athena 中的問題進行故障診斷 主題的 許可 章節。

概要

ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION (partition_col1_name = partition_col1_value [,partition_col2_name = partition_col2_value] [,...]) [LOCATION 'location1'] [PARTITION (partition_colA_name = partition_colA_value [,partition_colB_name = partition_colB_value [,...])] [LOCATION 'location2'] [,...]

參數

當新增分割區時,您可以為分割區指定一或多個資料欄名稱/值組,以及該分割區的資料檔案所在的 Simple Storage Service (Amazon S3) 路徑。

[IF NOT EXISTS]

如果已有相同定義的分割區,則會造成錯誤隱藏。

PARTITION (partition_col_name = partition_col_value [,...])

使用您指定的資料欄名稱/值組合來建立分割區。只有當欄的資料類型是字串時,才需要以字串字元圍住 partition_col_value

[LOCATION 'location']

指定目錄,將在其中存放先前陳述式定義的分割區。當資料使用 Hive 樣式分割 (pk1=v1/pk2=v2/pk3=v3) 時,LOCATION 子句為選用的。使用 Hive 樣式分割時,會從資料表的位置、分割區索引鍵名稱和分割區索引鍵值自動建構完整的 Amazon S3 URI。如需詳細資訊,請參閱分割您的資料

考量事項

Amazon Athena 不會對您可以在單一 ALTER TABLE ADD PARTITION DDL 陳述式中新增的分割區數量施加特定限制。不過,如果您需要新增大量分割區,請考慮將操作分成較小的批次,以避免潛在的效能問題。下列範例使用連續命令個別新增分割區,並使用 IF NOT EXISTS 來避免新增重複項目。

ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-01') ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-02') ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-03')

在 Athena 中使用分割區時,也請記住下列幾點:

  • 雖然 Athena 支援查詢具有 1,000 萬個分割區的 AWS Glue 資料表,但 Athena 無法在單一掃描中讀取超過 100 萬個分割區。

  • 若要最佳化查詢並減少掃描的分割區數量,請考慮分割區刪除或使用分割區索引等策略。

如需在 Athena 中使用分割區的其他考量,請參閱 分割您的資料

範例

下列範例會將單一分割區新增至資料表,以取得 HIVE 樣式分割資料。

ALTER TABLE orders ADD PARTITION (dt = '2016-05-14', country = 'IN');

下列範例會將多個分割區新增至資料表,以取得 HIVE 樣式分割資料。

ALTER TABLE orders ADD PARTITION (dt = '2016-05-31', country = 'IN') PARTITION (dt = '2016-06-01', country = 'IN');

如果資料表不適用於 HIVE 樣式的分割資料,則 LOCATION 子句是必需的,且應該是包含分割區資料之字首的完整 Amazon S3 URI。

ALTER TABLE orders ADD PARTITION (dt = '2016-05-31', country = 'IN') LOCATION 's3://amzn-s3-demo-bucket/path/to/INDIA_31_May_2016/' PARTITION (dt = '2016-06-01', country = 'IN') LOCATION 's3://amzn-s3-demo-bucket/path/to/INDIA_01_June_2016/';

若要在分割區已存在時忽略錯誤,請使用 IF NOT EXISTS 子句,如下列範例所示。

ALTER TABLE orders ADD IF NOT EXISTS PARTITION (dt = '2016-05-14', country = 'IN');

零位元組 _$folder$ 檔案

如果您執行 ALTER TABLE ADD PARTITION 語句並錯誤地指定已存在的分區和不正確的 Simple Storage Service (Amazon S3) 位置,則格式為 partition_value_$folder$ 的零位元組預留位置檔案會在 Simple Storage Service (Amazon S3) 中建立。您必須手動移除這些檔案。

若要防止這種情況發生,請使用 ALTER TABLE ADD PARTITION 陳述式中的 ADD IF NOT EXISTS 語法,如下列範例所示。

ALTER TABLE table_name ADD IF NOT EXISTS PARTITION […]
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。