

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

# 建立資料庫和資料表
<a name="work-with-data"></a>

Amazon Athena 支援一部分的資料定義語言 (DDL) 陳述式及 ANSI SQL 函數和運算子，以定義和查詢 Amazon Simple Storage Service 中資料所在的外部資料表。

在 Athena 中建立資料庫和資料表時，您需要描述資料的結構描述和位置，才能讓資料表中的資料可供即時查詢。

為改善查詢效能並降低成本，建議您分割資料，並使用開放原始碼單欄格式以儲存於 Amazon S3 中，例如 [Apache Parquet](https://parquet.apache.org) 或 [ORC](https://orc.apache.org/)。

**Topics**
+ [建立資料庫](creating-databases.md)
+ [建立資料表](creating-tables.md)
+ [

# 為資料庫、資料表和資料欄命名
](tables-databases-columns-names.md)
+ [逸出預留關鍵字](reserved-words.md)

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

Athena 中的資料庫是您在其中建立的資料表的邏輯群組。建立資料庫之前，請先建立查詢輸出位置。

**Topics**
+ [

# 建立查詢輸出位置
](creating-databases-prerequisites.md)
+ [

# 建立 資料庫
](creating-databases-query-editor.md)

# 建立查詢輸出位置
<a name="creating-databases-prerequisites"></a>

如果您尚未在 Amazon S3 中設定查詢輸出位置，請執行下列先決條件步驟。

**若要建立查詢輸出位置**

1. 使用您用於 Athena 的相同 AWS 區域 和 帳戶，依照步驟 （例如，使用 Amazon S3 主控台） 在 [Amazon S3 中建立儲存貯](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html)體，以保留您的 Athena 查詢結果。您可將此儲存貯體設定為您的查詢輸出位置。

1. 前往 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 開啟 Athena 主控台。

1. 如果這是您第一次造訪 Athena 主控台 AWS 區域，請選擇**探索查詢編輯器**以開啟查詢編輯器。此外，Athena 會於查詢編輯器中開啟。

1. 選擇 **Edit Settings** (編輯設定) 以在 Amazon S3 中設定查詢結果位置。  
![\[選擇編輯設定。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/getting-started-choose-view-settings.png)

1. 對於 **Manage settings** (管理設定)，請執行下列其中一項動作：
   + 在 **Location of query result** (查詢結果的位置) 方塊中，輸入您在 Amazon S3 中為查詢結果建立的儲存貯體路徑。在路徑中加上 `s3://` 作為字首。
   + 選擇 **Browse S3** (瀏覽 S3)，選擇您在目前區域建立的 Amazon S3 儲存貯體，然後選擇 **Choose** (選擇)。  
![\[在 Amazon S3 中指定要從 Athena 接收查詢結果的位置。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/getting-started-setting-results-location.png)

1. 選擇**儲存**。

1. 選擇 **Editor** (編輯器) 以切換至查詢編輯器。  
![\[選擇 Editor (編輯器)。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/getting-started-choose-editor.png)

# 建立 資料庫
<a name="creating-databases-query-editor"></a>

在您設定查詢結果位置之後，在 Athena 主控台查詢編輯器中建立資料庫輕鬆簡單。

**若要使用 Athena 查詢編輯器建立資料庫**

1. 前往 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 開啟 Athena 主控台。

1. 在**編輯器**索引標籤上，輸入 Hive 資料定義語言 (DDL) 命令 `CREATE DATABASE myDataBase`。以您想要的資料庫名稱取代 *myDatabase*。有關資料庫名稱的限制，請參閱 [為資料庫、資料表和資料欄命名](tables-databases-columns-names.md)。

1. 選擇 **Run** (執行) 或按 **Ctrl\$1ENTER**。

1. 如需使您的資料庫訂為目前的資料庫，請從查詢編輯器左側的 **Database** (資料庫) 選單中選取它。

如需 Athena 資料庫控制許可的相關資訊，請參閱[在 中設定資料庫和資料表的存取權 AWS Glue Data Catalog](fine-grained-access-to-glue-resources.md)。

# 在 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)

# 使用 AWS Glue 或 Athena 主控台建立資料表
<a name="creating-tables-how-to"></a>

您可以使用 新增資料表表單 AWS Glue或在 Athena 查詢編輯器中執行 DDL 陳述式，在 Athena 中建立資料表。

## 使用 AWS Glue 爬蟲程式建立資料表
<a name="to-create-a-table-using-the-aws-glue-data-catalog"></a>

1. 前往 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 開啟 Athena 主控台。

1. 在查詢編輯器中，選擇位於**資料表和檢視**旁的**建立**，然後選擇 **AWS Glue 爬蟲程式**。

1. 請依照 AWS Glue 主控台 **Add crawler** (新增爬蟲程式) 頁面上的步驟新增爬蟲程式。

   如需詳細資訊，請參閱[使用編目程式新增資料表](schema-crawlers.md)。

## 使用 Athena 新增資料表表單來建立資料表
<a name="to-create-a-table-using-the-wizard"></a>

1. 前往 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 開啟 Athena 主控台。

1. 在查詢編輯器中，選擇位在 **Tables and views** (資料表和檢視) 旁的 **Create** (建立)，然後選擇 **S3 bucket data** (S3 儲存貯體資料)。

1. 在 **Create Table From S3 bucket data** (從 S3 儲存貯體資料建立資料表) 表單中，輸入用於建立資料表的資訊，然後選擇 **Create table** (建立資料表)。如需表單欄位的詳細資訊，請參閱[使用 Athena 主控台中的表單來新增 AWS Glue 資料表](data-sources-glue-manual-table.md)。

## 在 Athena 查詢編輯器中，使用 CREATE TABLE 陳述式建立資料表
<a name="to-create-a-table-using-hive-ddl"></a>

1. 從 **Database (資料庫)** 選單中，選擇要為其建立資料表的資料庫。如果您未在 `CREATE TABLE` 陳述式中指定資料庫，則會在查詢編輯器中目前選取的資料庫中建立資料表。

1. 在查詢編輯器中，輸入下列範例所示的陳述式，然後選擇**執行**。

   ```
   CREATE EXTERNAL TABLE myopencsvtable (
      firstname string,
      lastname string,
      job string,
      country string
   )
   ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
   WITH SERDEPROPERTIES (
      'separatorChar' = ',',
      'quoteChar' = '"',
      'escapeChar' = '\\'
      )
   STORED AS TEXTFILE
   LOCATION 's3://amzn-s3-demo-bucket/mycsv/';
   ```

# 在 Amazon S3 中指定資料表位置
<a name="tables-location-format"></a>

當您在 Athena 中執行`CREATE TABLE`查詢時，Athena 會向 AWS Glue Data Catalog 註冊資料表，這是 Athena 存放中繼資料的位置。

若要在 Amazon S3 中指定資料的路徑，請在 `CREATE TABLE` 陳述式中使用 `LOCATION` 屬性，如下列範例所示：

```
CREATE EXTERNAL TABLE `test_table`(
...
)
ROW FORMAT ...
STORED AS INPUTFORMAT ...
OUTPUTFORMAT ...
LOCATION s3://amzn-s3-demo-bucket/folder/
```
+ 如需有關命名儲存貯體的詳細資訊，請參閱《Amazon Simple Storage Service 使用者指南》**中的[儲存貯體限制](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html)。
+ 如需有關在 Amazon S3 中使用資料夾的詳細資訊，請參閱《Amazon Simple Storage Service 使用者指南》**中的[使用資料夾](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-folders.html)。

Amazon S3 中的 `LOCATION` 會指定代表您資料表的*所有*檔案。

**重要**  
Athena 會讀取在您指定的 Amazon S3 資料夾中存放的*所有*資料。如果您有*不*希望 Athena 讀取的資料，請勿使用與您希望 Athena 讀取之資料相同的 Amazon S3 資料夾存放該資料。

當您在 `CREATE TABLE` 陳述式中指定 `LOCATION` 時，請使用下列指導方針：
+ 使用後置斜線。
+ 您可以使用 Amazon S3 資料夾的路徑或 Amazon S3 存取點別名。如需有關 Amazon S3 存取點別名的資訊，請參閱《Amazon S3 使用者指南》**中的[為存取點使用儲存貯體型別名](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-alias.html)。

 **使用**：

```
s3://amzn-s3-demo-bucket/folder/
```

```
s3://amzn-s3-demo-bucket-metadata-s3alias/folder/
```

請勿使用以下任何項目指定您資料的 `LOCATION`。
+ 請勿使用檔案名稱、底線、萬用字元或 glob 模式來指定檔案位置。
+ 請勿將完整 HTTP 標記法 (例如 `s3.amazon.com`) 新增至 Amazon S3 儲存貯體路徑。
+ 請勿在路徑中使用 `//` 等使用空的資料夾，如下所示：`S3://amzn-s3-demo-bucket/folder//folder/`。
+ 請勿使用如下路徑：

  ```
  s3://amzn-s3-demo-bucket
  s3://amzn-s3-demo-bucket/*
  s3://amzn-s3-demo-bucket/mySpecialFile.dat
  s3://amzn-s3-demo-bucket/prefix/filename.csv
  s3://amzn-s3-demo-bucket.s3.amazon.com
  S3://amzn-s3-demo-bucket/prefix//prefix/
  arn:aws:s3:::amzn-s3-demo-bucket/prefix
  s3://arn:aws:s3:<region>:<account_id>:accesspoint/<accesspointname>
  https://<accesspointname>-<number>.s3-accesspoint.<region>.amazonaws.com
  ```

# 建立資料表後即會顯示資料表資訊
<a name="creating-tables-showing-table-information"></a>

在 Athena 中建立資料表之後，其名稱會顯示在 Athena 主控台左側的**資料表**清單中。如需顯示有關資料表的資訊並進行管理，可以選擇 Athena 主控台中資料表名稱旁邊的三個垂直點。
+ **預覽資料表** – 透過執行 Athena 查詢編輯器中的 `SELECT * FROM "database_name"."table_name" LIMIT 10` 陳述式，顯示所有資料欄的前 10 列。
+ **產生建立資料表 DDL** – 您可以透過執行 Athena 查詢編輯器中的 `SHOW CREATE TABLE` *table\$1name* 陳述式，產生可用來重新建立資料表的 DDL 陳述式。
+ **載入分割區** – 執行 Athena 查詢編輯器中的 `MSCK REPAIR TABLE table_name` 陳述式。僅當資料表有分割區時，才可使用此選項。
+ **插入編輯器中** - 在目前編輯位置將資料表的名稱插入查詢編輯器中。
+ **Delete table** (刪除資料表) – 顯示確認對話方塊，詢問您是否要刪除資料表。如果您同意，請執行 Athena 查詢編輯器中的 `DROP TABLE table_name` 陳述式。
+ **Table properties** (資料表屬性) – 顯示資料表名稱、資料庫名稱、建立時間，以及資料表是否有加密資料。

# 為資料庫、資料表和資料欄命名
<a name="tables-databases-columns-names"></a>

使用這些準則來為 Athena 中的資料庫、資料表和資料欄命名。

## 資料庫、資料表和資料欄名稱要求
<a name="tables-databases-columns-names-requirements"></a>
+  AWS Glue 中的資料庫名稱、資料表名稱和資料欄名稱的可接受字元必須是 UTF-8 字串且應為小寫。請注意，在建立資料庫、資料表或資料欄時，Athena 會自動將 DDL 查詢中的任何大寫名稱轉換為小寫。該字串的長度不得小於 1 個位元組，也不得超過 255 個位元組。
+ 目前，名稱開頭可能會有前導空格。由於這些前導空格可能難以偵測，且可能會在建立後造成可用性問題，因此請務必小心，避免不慎建立具有前導空格的物件名稱。
+ 如果您使用 [AWS::Glue::Database](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-database.html) CloudFormation 範本來建立 AWS Glue 資料庫，但未指定資料庫名稱， 會以與 Athena 不相容的 *resource\$1name–random\$1string* 格式 AWS Glue 自動產生資料庫名稱。
+ 您可以使用 AWS Glue Catalog Manager 重新命名資料欄，但不能重新命名資料表名稱或資料庫名稱。若要解決此限制，您必須使用舊資料庫的定義，建立具有新名稱的資料庫。然後，您可以使用舊資料庫中資料表的定義，重新建立新資料庫中的資料表。若要這樣做，您可以使用 AWS CLI 或 AWS Glue SDK。如需這些步驟，請參閱 [使用 AWS CLI 重新建立 AWS Glue 資料庫及其資料表](glue-recreate-db-and-tables-cli.md)。

## 對 Athena 中的資料表名稱和資料表資料欄名稱使用小寫
<a name="table-names-and-table-column-names-in-ate-must-be-lowercase"></a>

Athena 接受在 DDL 和 DML 查詢中混合使用大小寫，但是當其執行查詢時名稱須為小寫。出於這個原因，請避免對資料表或資料欄名稱混合使用大小寫，並且不要在 Athena 中僅依賴大小寫來區分這些名稱。例如，如果您使用 DDL 陳述式來建立名為 `Castle` 的資料欄，則建立的資料欄將會是小寫的 `castle`。如果您接著在 DML 查詢中將資料欄名稱指定為 `Castle` 或 `CASTLE`，則 Athena 會將您要執行查詢的名稱變成小寫，但會使用您在查詢中選擇的大小寫來顯示資料欄標題。

資料庫、資料表和資料欄名稱必須小於或等於 255 個字元的長度。

## 以底線開頭的名稱
<a name="names-that-begin-with-an-underscore"></a>

建立資料表時，使用反引號括住以底線開頭的資料表、檢視或資料欄名稱。例如：

```
CREATE EXTERNAL TABLE IF NOT EXISTS `_myunderscoretable`(
  `_id` string, `_index` string)
LOCATION 's3://amzn-s3-demo-bucket/'
```

## 以數字開頭的資料表、檢視或資料行名稱
<a name="table-names-that-include-numbers"></a>

在執行 `SELECT`、`CTAS` 或 `VIEW` 查詢時，在以數字開頭的識別碼 (例如資料表、檢視或資料欄名稱) 周圍加上引號。例如：

```
CREATE OR REPLACE VIEW "123view" AS
SELECT "123columnone", "123columntwo"
FROM "234table"
```

## 資料欄名稱和複雜類型
<a name="tables-databases-columns-names-complex-types"></a>

對於複雜類型，資料欄名稱中僅允許英數字元、底線 (`_`) 和句點 (`.`)。若要為具有限制字元的索引鍵建立資料表和映射，您可以使用自訂 DDL 陳述式。如需詳細資訊，請參閱AWS 大數據部落格**中的[使用 JSONSerDe，透過巢狀 JSON 和映射，在 Amazon Athena 中建立資料表](https://aws.amazon.com/blogs/big-data/create-tables-in-amazon-athena-from-nested-json-and-mappings-using-jsonserde/)一文。

## 保留字
<a name="tables-databases-columns-names-reserved-words"></a>

Athena 中的某些保留字必須逸出。若要逸出 DDL 陳述式中的預留關鍵字，請以反引號 (`) 括住它們。若要逸出[檢視](views.md)上的 SQL `SELECT` 陳述式和查詢中的預留關鍵字，請以雙引號 ('') 將其括住。

如需詳細資訊，請參閱[在查詢中逸出預留關鍵字](reserved-words.md)。

## 其他資源
<a name="tables-databases-columns-names-additional-resources"></a>

如需完整的資料庫和資料表建立語法，請參閱下列頁面。
+ [CREATE DATABASE](create-database.md)
+ [CREATE TABLE](create-table.md)

如需 中資料庫和資料表的詳細資訊 AWS Glue，請參閱《 *AWS Glue 開發人員指南*》中的[資料庫](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-databases.html)和[資料表](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html)。

# 在查詢中逸出預留關鍵字
<a name="reserved-words"></a>

在 Athena 中執行包含預留關鍵字的查詢時，必須以特殊字元括住關鍵字以將它們逸出。請使用此主題中的清單來檢查 Athena 中的預留關鍵字。

若要逸出 DDL 陳述式中的預留關鍵字，請以反引號 (`) 括住它們。若要逸出[檢視](views.md)上的 SQL `SELECT` 陳述式和查詢中的預留關鍵字，請以雙引號 ('') 將其括住。
+  [DDL 陳述式中要逸出的預留關鍵字](#list-of-ddl-reserved-words) 
+  [SQL SELECT 陳述式中要逸出的預留關鍵字](#list-of-reserved-words-sql-select) 
+  [含有預留關鍵字的查詢範例](#examples-reserved-words) 

## DDL 陳述式中要逸出的預留關鍵字
<a name="list-of-ddl-reserved-words"></a>

Athena 在其 DDL 陳述式中使用下列預留關鍵字清單。如果您使用它們時沒有逸出，Athena 會發出錯誤。若要逸出它們，請以反引號 (`) 括住。

您在 DDL 陳述式中使用 DDL 預留關鍵字作為識別符名稱時，必須以反引號 (`) 括住。

```
ALL, ALTER, AND, ARRAY, AS, AUTHORIZATION, BETWEEN, BIGINT, 
BINARY, BOOLEAN, BOTH, BY, CASE, CASHE, CAST, CHAR, COLUMN, 
CONF, CONSTRAINT, COMMIT, CREATE, CROSS, CUBE, CURRENT, 
CURRENT_DATE, CURRENT_TIMESTAMP, CURSOR, DATABASE, DATE, 
DAYOFWEEK, DECIMAL, DELETE, DESCRIBE, DISTINCT, DIV, DOUBLE, 
DROP, ELSE, END, EXCHANGE, EXISTS, EXTENDED, EXTERNAL, EXTRACT, 
FALSE, FETCH, FLOAT, FLOOR, FOLLOWING, FOR, FOREIGN, FROM, 
FULL, FUNCTION, GRANT, GROUP, GROUPING, HAVING, IF, IMPORT, 
IN, INNER, INSERT, INT, INTEGER, INTERSECT, INTERVAL, INTO, 
IS, JOIN, LATERAL, LEFT, LESS, LIKE, LOCAL, MACRO, MAP, MORE, 
NONE, NOT, NULL, NUMERIC, OF, ON, ONLY, OR, ORDER, OUT, 
OUTER, OVER, PARTIALSCAN, PARTITION, PERCENT, PRECEDING, 
PRECISION, PRESERVE, PRIMARY, PROCEDURE, RANGE, READS, 
REDUCE, REGEXP, REFERENCES, REVOKE, RIGHT, RLIKE, ROLLBACK, 
ROLLUP, ROW, ROWS, SELECT, SET, SMALLINT, START,TABLE, 
TABLESAMPLE, THEN, TIME, TIMESTAMP, TO, TRANSFORM, TRIGGER, 
TRUE, TRUNCATE, UNBOUNDED,UNION, UNIQUEJOIN, UPDATE, USER, 
USING, UTC_TIMESTAMP, VALUES, VARCHAR, VIEWS, WHEN, WHERE, 
WINDOW, WITH
```

## SQL SELECT 陳述式中要逸出的預留關鍵字
<a name="list-of-reserved-words-sql-select"></a>

Athena 在檢視上的 SQL `SELECT` 陳述式和查詢中，使用下列預留關鍵字清單。

如果您使用這些關鍵字作為識別符，您必須在查詢陳述式中以雙引號 (") 括住它們。

```
ALTER, AND, AS, BETWEEN, BY, CASE, CAST, CONSTRAINT, CREATE, 
CROSS, CUBE, CURRENT_CATALOG, CURRENT_DATE, CURRENT_PATH, 
CURRENT_SCHEMA, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, 
DEALLOCATE, DELETE, DESCRIBE, DISTINCT, DROP, ELSE, END, ESCAPE, 
EXCEPT, EXECUTE, EXISTS, EXTRACT, FALSE, FIRST, FOR, FROM, 
FULL, GROUP, GROUPING, HAVING, IN, INNER, INSERT, INTERSECT, 
INTO, IS, JOIN, JSON_ARRAY, JSON_EXISTS, JSON_OBJECT, 
JSON_QUERY, JSON_TABLE, JSON_VALUE, LAST, LEFT, LIKE, 
LISTAGG, LOCALTIME, LOCALTIMESTAMP, NATURAL, NORMALIZE, 
NOT, NULL, OF, ON, OR, ORDER, OUTER, PREPARE, RECURSIVE, RIGHT, 
ROLLUP, SELECT, SKIP, TABLE, THEN, TRIM, TRUE, UESCAPE, UNION, 
UNNEST, USING, VALUES, WHEN, WHERE, WITH
```

## 含有預留關鍵字的查詢範例
<a name="examples-reserved-words"></a>

下列範例中的查詢使用反引號 (`)，以逸出作為資料表名稱和其中一個欄名稱的 DDL 相關預留關鍵字 *partition* 和 *date*：

```
CREATE EXTERNAL TABLE `partition` (
`date` INT, 
col2 STRING
)
PARTITIONED BY (year STRING)
STORED AS TEXTFILE
LOCATION 's3://amzn-s3-demo-bucket/test_examples/';
```

以下範例查詢在 `ALTER TABLE ADD PARTITION` 和 `ALTER TABLE DROP PARTITION` 陳述式中，有一個欄名稱包含 DDL 相關的預留關鍵字。這些 DDL 預留關鍵字以反引號 (`) 括住：

```
ALTER TABLE test_table 
ADD PARTITION (`date` = '2018-05-14')
```

```
ALTER TABLE test_table 
DROP PARTITION (`partition` = 'test_partition_value')
```

以下範例查詢在 `SELECT` 陳述式中包含預留關鍵字 (end) 作為識別符。此關鍵字以雙引號逸出：

```
SELECT * 
FROM TestTable
WHERE "end" != nil;
```

以下範例查詢在 `SELECT` 陳述式中包含預留關鍵字 (first)。此關鍵字以雙引號逸出：

```
SELECT "itemId"."first" 
FROM testTable 
LIMIT 10;
```