转义查询中的保留关键字
当您在 Athena 中运行包含保留关键字的查询时,必须用特殊字符将保留关键字括起来以便对它们进行转义。可使用本主题中的列表检查 Athena 中保留的关键字。
要对 DDL 语句中的保留关键字进行转义,请使用反引号 (`) 将其括起来。要对 SQL SELECT
语句以及视图的查询中的保留关键字进行转义,请使用双引号 ('') 将其括起来。
要在 DDL 语句中转义的保留关键字
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 语句中转义的保留关键字
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
保留关键字的查询示例
以下示例中的查询使用反引号 (`) 来转义 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')
以下查询示例包含一个保留关键字 (end) 作为 SELECT
语句中的标识符。此关键字用双引号进行转义:
SELECT * FROM TestTable WHERE "end" != nil;
以下查询示例在 SELECT
语句中包含一个保留关键字 (first)。此关键字用双引号进行转义:
SELECT "itemId"."first" FROM testTable LIMIT 10;