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

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


결제 또는 기술 지원이 필요하세요?