

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

# 在查詢中逸出預留關鍵字
<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;
```