

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

# 更新含有分割區的資料表
<a name="updates-and-partitions"></a>

在 Athena 中，資料表及其分割區必須使用相同的資料格式，但其結構描述可能不同。當您建立新的分割區時，該分區通常會繼承資料表的結構描述。隨著時間經過，結構描述可能開始不同。原因包括：
+ 如果資料表的結構描述變更，分割區的結構描述不會更新，而無法與資料表的結構描述保持同步。
+ 爬 AWS Glue 蟲程式可讓您在具有不同結構描述的分割區中探索資料。這表示如果您使用 在 Athena 中建立資料表 AWS Glue，則在爬蟲程式完成處理後，資料表及其分割區的結構描述可能會不同。
+ 如果您直接使用 AWS API 新增分割區。

如果含有分割區的資料表符合下列限制條件，Athena 會成功處理資料表。如果不符合這些限制條件，Athena 會發出 HIVE\_PARTITION\_SCHEMA\_MISMATCH 錯誤。
+ 每個分割區的結構描述與資料表的結構描述相容。
+ 資料表的資料格式允許您想要執行的更新類型：新增、刪除、重新排序欄，或變更欄的資料類型。

  例如，對於 CSV 和 TSV 格式，您可以重新命名欄、在資料表尾端新增欄，以及變更欄的資料類型 (如果類型相容)，但您無法移除欄。對於其他格式，您可以新增或移除欄，或將欄變更為另一種資料類型 (如果類型相容)。如需相關資訊，請參閱[摘要：Athena 中的更新和資料格式](handling-schema-updates-chapter.md#summary-of-updates)。

## 避免含有分割區的資料表發生結構描述不符的錯誤
<a name="partitions-dealing-with-schema-mismatch-errors"></a>

在開始執行查詢時，Athena 會檢查資料表與分割區之間的每個資料欄資料類型是否相容，以驗證資料表的結構描述。
+ 對於 Parquet 和 ORC 資料儲存類型，Athena 倚賴資料欄名稱，並使用它們來進行以資料欄名稱為基礎的結構描述驗證。這樣可避免含有分割區的 Parquet 和 ORC 資料表發生 `HIVE_PARTITION_SCHEMA_MISMATCH` 錯誤。(如果 SerDe 屬性設為依名稱存取索引，則這適用於 ORC：`orc.column.index.access=FALSE`。Parquet 預設會依名稱讀取索引)。
+ 對於 CSV、JSON 和 Avro，Athena 使用以索引為基礎的結構描述驗證。這表示如果您遇到結構描述不符的錯誤，則應該捨棄導致結構描述不符的分割區，並重新建立分割區，讓 Athena 在查詢它時不會失敗。

 Athena 會比較資料表的結構描述與分割區結構描述。如果您在 Athena 中使用 AWS Glue 爬蟲程式在 CSV、JSON 和 AVRO 中建立資料表，則在爬蟲程式完成處理後，資料表及其分割區的結構描述可能會不同。如果資料表的結構描述與分割區結構描述不相符，則您在 Athena 中的查詢會失敗，因為發生類似如下的結構描述驗證錯誤：'crawler\_test.click\_avro' is declared as type 'string', but partition 'partition\_0=2017-01-17' declared column 'col68' as type 'double'." ('crawler\_test.click\_avro' 宣告為類型 'string'，但分割區 'partition\_0=2017-01-17' 將資料欄 'col68' 宣告為類型 'double'。)

這類錯誤的典型解決方法是捨棄造成錯誤的分割區，然後重新建立。如需詳細資訊，請參閱[ALTER TABLE DROP PARTITION](alter-table-drop-partition.md)及[ALTER TABLE ADD PARTITION](alter-table-add-partition.md)。