Amazon Athena의 테이블을 쿼리할 때 타임스탬프 예외를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 4월 9일

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

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?