Amazon Athena 테이블의 TIMESTAMP 데이터 열을 쿼리할 때 예외가 발생합니다.
간략한 설명
TIMESTAMP 데이터가 포함된 Athena 테이블을 쿼리할 때 다음 예외 중 하나와 함께 쿼리가 실패할 수 있습니다.
- SYNTAX_ERROR: line '>' cannot be applied to timestamp, varchar(19): 쿼리의 TIMESTAMP 및 STRING 값 사이에 '>'와 같은 논리 연산자를 사용하는 경우 이 예외가 발생할 수 있습니다.
- cast(col as timestamp) with INVALID_CAST_ARGUMENT: Athena에서 지원되지 않는 데이터 유형을 가진 열에 캐스팅을 사용하는 경우 이 예외가 발생할 수 있습니다.
해결 방법
Exception: SYNTAX_ERROR: line '>' cannot be applied to timestamp, varchar(19)
테이블의 TIMESTAMP 데이터 형식이 올바르지 않을 수 있습니다. Athena에는 Java TIMESTAMP 형식이 필요합니다. Presto의 날짜 및 시간 함수를 사용하거나 캐스팅을 사용하여 쿼리 필터 조건의 STRING을 TIMESTAMP로 변환합니다. 자세한 내용은 Presto 설명서의 Date and Time Functions and Operators(날짜 및 시간 함수와 연산자)를 참조하세요.
1. 다음과 유사한 쿼리를 실행하여 테이블 testdataset1을 생성합니다.
CREATE TABLE testdataset1 AS SELECT testid1, testname1, date_parse(testtimestamp1,'%m/%d/%Y %h:%i:%s %p') AS testtimestamp1
FROM (
VALUES
(1, 'a','7/14/2020 8:22:39 AM'),
(2, 'b','8/01/2015 10:22:39 PM'),
(3, 'c','8/13/2017 4:22:39 AM')
) AS t(testid1, testname1, testtimestamp1)
2. 리터럴 값에 캐스트 함수를 사용하여 타임스탬프 필터를 적용합니다(예: 2020-07-14 00:00:00).
SELECT * FROM testdataset WHERE testtimestamp1 < cast('2020-07-14 00:00:00' as timestamp)
Exception: cast(col as timestamp) with INVALID_CAST_ARGUMENT
쿼리에서 Presto의 날짜 및 시간 함수를 사용하여 열을 DATE 또는 TIMESTAMP로 읽습니다.
1. 다음과 유사한 쿼리를 실행하여 테이블 testdataset2를 생성합니다.
CREATE TABLE testdataset2 AS SELECT * FROM
(VALUES
(1, 'a','7/14/2020 8:22:39 AM'),
(2, 'b','8/01/2015 10:22:39 PM'),
(3, 'c','8/13/2017 4:22:39 AM')
) AS t(testid2, testname2, testtimestamp2)
2. Presto의 date_parse 함수를 사용하여 STRING TIMESTAMP 열 testtimestamp2를 JAVA TIMESTAMP 형식으로 변환합니다.
SELECT testid2,testname2,date_parse(testtimestamp2,'%m/%d/%Y %h:%i:%s %p') AS testtimestamp2 FROM testdataset2
관련 정보
Amazon Athena의 테이블을 쿼리할 때 TIMESTAMP 결과가 비어 있는 이유가 무엇입니까?