쿼리에서 예약어 이스케이프 - Amazon Athena

쿼리에서 예약어 이스케이프

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 관련 예약어 partitiondate를 이스케이프합니다.

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 PARTITIONALTER 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;