

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

# 在 Athena 中建立資料表
<a name="creating-tables"></a>

若要建立資料表，您可以使用 Athena [**建立資料表**表單](creating-tables-how-to.md#to-create-a-table-using-the-wizard)，或使用 JDBC 或 ODBC 驅動器，在 Athena 主控台中執行 DDL 陳述式。Athena 使用 Apache Hive 來定義資料表和建立資料庫，這本質上是資料表的邏輯命名空間。Athena 支援各種不同的序列化程式-還原序列化程式 (SerDe) 程式庫，從而可針對特定資料格式建立資料表。如需支援的 SerDe 程式庫清單，請參閱[為您的資料選擇 SerDe](supported-serdes.md)。

在 Athena 中建立資料庫和資料表時，您只需描述結構描述，以及位於 Amazon S3 中供讀取時間查詢的資料表資料所在的位置。Athena 不會修改 Amazon S3 中的資料。因此，資料庫和資料表會有與傳統關聯式資料庫系統稍微不同的意義，因為資料不會隨著資料庫和資料表的結構描述定義存放。

Athena 會將結構描述存放在 中， AWS Glue Data Catalog 並在您使用 SQL 查詢資料表時用它來讀取資料。此*讀時模式*方法可在您執行查詢時將結構描述投影到資料上，因此無需載入或轉換資料。

## 考量和限制
<a name="creating-tables-considerations-and-limitations"></a>

以下是 Athena 中針對資料表的一些重要限制和注意事項。

### Amazon S3 考量事項
<a name="s3-considerations"></a>

建立資料表時，您需使用 `LOCATION` 子句來指定基礎資料的 Amazon S3 儲存貯體位置。考慮下列各項：
+ Athena 只能查詢版本控制的 Amazon S3 儲存貯體上最新版本的資料，無法查詢之前版本的資料。
+ 您必須擁有使用 Amazon S3 位置中資料的許可。如需詳細資訊，請參閱[透過 Athena 控制 Amazon S3 的存取權](s3-permissions.md)。
+ Athena 支援查詢的物件可以與多個儲存類別一起存放在 `LOCATION` 子句指定的相同儲存貯體中。例如，您可以在存放於 Amazon S3 中不同儲存類別 (標準、標準 – IA 和智慧型分層) 的物件中查詢資料。
+ Athena 支援[申請者付款儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RequesterPaysBuckets.html)。如需有關如何對含有您要在 Athena 中查詢之來源資料的儲存貯體啟用申請者付款的資訊，請參閱[建立工作群組](creating-workgroups.md)。
+ 您可以使用 Athena 查詢從 Amazon Glacier Flexible Retrieval (舊稱 Glacier) 和 Amazon Glacier Deep Archive [Amazon S3 儲存類別](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html#sc-glacier)中還原的物件，您必須基於每個資料表啟用該功能。如果您在執行查詢之前未在資料表上啟用此功能，Athena 會在查詢執行期略過資料表的所有 Amazon Glacier Flexible Retrieval 和 Amazon Glacier Deep Archive 物件。如需詳細資訊，請參閱[查詢還原的 Amazon Glacier 物件](querying-glacier.md)。

  如需有關儲存類別的資訊，請參閱[儲存類別](https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html)、[在 Amazon S3 中變更物件的儲存類別](https://docs.aws.amazon.com/AmazonS3/latest/dev/ChgStoClsOfObj.html)、[轉換為 GLACIER 儲存類別 (物件封存)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-transition-general-considerations.html#before-deciding-to-archive-objects)，以及《Amazon Simple Storage Service 使用者指南**》中的[請求者支付儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html)。
+ 如果您對具有大量物件的 Amazon S3 儲存貯體發出查詢，並且未將資料分割，這類查詢可能會影響 Amazon S3 中的 Get 請求率限制，並導致 Amazon S3 例外狀況。若要避免錯誤，請分割您的資料。此外，請考慮調校您的 Amazon S3 請求率。如需詳細資訊，請參閱[請求率和效能考量](https://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html)。

如需有關在 Amazon S3 中指定資料位置的詳細資訊，請參閱 [在 Amazon S3 中指定資料表位置](tables-location-format.md)。

### 其他考量
<a name="creating-tables-other-considerations"></a>
+ **不支援交易資料轉換** – Athena 不支援對資料表資料進行以交易為基礎的操作 (例如可在 Hive 或 Presto 中找到的操作)。如需不支援的關鍵字完整清單，請參閱[不支援的 DDL](unsupported-ddl.md)。
+ **資料表上的操作為 ACID** – 當您建立、更新或刪除資料表時，這些操作保證與 ACID 相容。例如，如果多個使用者或用戶端同時嘗試建立或修改現有的資料表，只有其中一個會成功。
+ **資料表為 EXTERNAL** – 除了在建立 [Iceberg](querying-iceberg-creating-tables.md) 資料表時，請始終使用 `EXTERNAL` 關鍵字。如果您在非 Iceberg 資料表上使用 `CREATE TABLE` 卻沒有帶 `EXTERNAL` 關鍵字，則 Athena 會發出錯誤。當您在 Athena 中捨棄資料表時，只會移除資料表中繼資料，資料會保留在 Amazon S3 中。
+ **查詢字串長度上限** – 查詢字串長度上限為 256 KB。
+ 如果您使用 AWS Glue [CreateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateTable.html) API 操作或 CloudFormation [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html) 範本建立資料表以在 Athena 中使用，而不指定 `TableType` 屬性，然後執行 DDL 查詢，例如 `SHOW CREATE TABLE`或 `MSCK REPAIR TABLE`，您可以收到錯誤訊息 FAILED：NullPointerException Name 為 null。

  若要解決錯誤，請在 API 呼叫或[CloudFormation 範本](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-table-tableinput.html)中 AWS Glue `CreateTable`指定 [TableInput](https://docs.aws.amazon.com/glue/latest/webapi/API_TableInput.html) `TableType` 屬性的值。`TableType` 可能的值包括 `EXTERNAL_TABLE` 或 `VIRTUAL_VIEW`。

  此要求僅適用於使用 `CreateTable` API AWS Glue 操作或 `AWS::Glue::Table` 範本建立資料表時。如果您使用 DDL 陳述式或 AWS Glue 爬蟲程式建立 Athena 資料表，則系統會為您自動定義 `TableType` 屬性。

**Topics**
+ [考量和限制](#creating-tables-considerations-and-limitations)
+ [使用 AWS Glue 或 Athena 主控台建立資料表](creating-tables-how-to.md)
+ [在 Amazon S3 中指定資料表位置](tables-location-format.md)
+ [建立資料表後即會顯示資料表資訊](creating-tables-showing-table-information.md)