Amazon Athena 테이블의 TIMESTAMP 데이터 열을 쿼리할 때 예외가 발생합니다.
간략한 설명
TIMESTAMP 데이터를 사용하여 Athena 테이블을 쿼리하면 다음 예외 중 하나를 제외하고 쿼리가 실패할 수 있습니다.
- "TYPE_MISMATCH: line 1:49: Cannot apply operator: timestamp(3) < varchar(19)": 쿼리의 TIMESTAMP 값과 STRING 값 사이에 논리 연산자(예: '>')를 사용한 경우 이 예외가 발생할 수 있습니다.
- "cast(col as timestamp) with INVALID_CAST_ARGUMENT": Athena에서 지원하지 않는 데이터 유형의 열에 CAST를 사용하는 경우 이 예외가 발생할 수 있습니다.
해결 방법
논리 연산자와 관련된 구문 오류
쿼리에서 논리 연산자를 사용하여 타임스탬프 값을 비교하는 경우 예외 오류가 발생할 수 있습니다.
테이블의 TIMESTAMP 데이터가 잘못된 형식일 수 있습니다. Athena에는 Java TIMESTAMP 형식이 필요합니다. Trino 날짜 및 시간 함수를 사용하여 쿼리 필터 조건에서 STRING을 TIMESTAMP로 변환하거나 CAST를 사용하여 STRING을 TIMESTAMP로 변환합니다. 자세한 내용은 Trino 웹 사이트의 Date and time functions and operators를 참조하십시오.
다음 단계를 완료하십시오.
- 다음 예와 같이 STRING 형식의 타임스탬프 데이터를 포함하는 테이블을 생성합니다.
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)
참고: testdataset1, testid1, testname1 및 testtimestamp1을 해당하는 값으로 바꾸십시오.
- STRING 값에 CAST 함수를 사용하여 타임스탬프 필터를 적용합니다.
SELECT * FROM testdataset1 WHERE testtimestamp1 < CAST('2020-07-14 00:00:00' AS timestamp)
참고: testdataset1 및 testtimestamp1을 해당하는 값으로 바꾸십시오.
CAST와 관련된 인수 오류
CAST를 사용하여 열을 TIMESTAMP 데이터 유형으로 변환하면 예외 오류가 발생할 수 있습니다.
TIMESTAMP로 캐스팅하려는 열의 데이터 유형이 Athena에서 지원하지 않는 유형일 수 있습니다. Trino 날짜 및 시간 함수를 사용하여 쿼리에서 열을 DATE 또는 TIMESTAMP로 읽습니다. 자세한 내용은 Trino 웹 사이트의 Date and time functions and operators를 참조하십시오.
다음 단계를 완료하십시오.
- 다음 예와 비슷한 테이블을 생성합니다.
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)
참고: testdataset2, testid2, testname2 및 testtimestamp2를 해당하는 값으로 바꾸십시오.
- Trino date_parse 함수를 사용하여 테이블을 Java TIMESTAMP 형식으로 변환하십시오.
SELECT testid2, testname2, date_parse(testtimestamp2, '%m/%d/%Y %h:%i:%s %p') AS testtimestamp2 FROM testdataset2
참고: testdataset2, testid2, testname2 및 testtimestamp2를 해당하는 값으로 바꾸십시오.
관련 정보
Amazon Athena에서 테이블을 쿼리할 때 TIMESTAMP 결과가 비어 있는 이유는 무엇입니까?