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

2분 분량
0

Amazon Athena 테이블의 TIMESTAMP 데이터 열을 쿼리할 때 예외가 발생합니다.

간략한 설명

TIMESTAMP 데이터를 사용하여 Athena 테이블을 쿼리하면 다음 예외 중 하나를 제외하고 쿼리가 실패할 수 있습니다.

  • SYNTAX_ERROR: '>' 줄을 타임스탬프에 적용할 수 없음, varchar(19): 쿼리의 TIMESTAMP와 STRING 값 사이에 논리 연산자(예: '>')를 사용한 경우 이 예외가 발생할 수 있습니다.
  • INVALID_CAST_ARGUMENT를 사용한 캐스팅(열을 타임스탬프로): Athena에서 지원하지 않는 데이터 형식의 열에 대해 캐스팅을 사용하면 이 예외가 발생할 수 있습니다.

해결 방법

예외: SYNTAX_ERROR: '>' 줄을 타임스탬프에 적용할 수 없음, varchar(19):

테이블의 TIMESTAMP 데이터가 잘못된 형식일 수 있습니다. Athena에는 Java TIMESTAMP 형식이 필요합니다. Presto의 날짜/시간 함수 또는 캐스팅을 사용하여 쿼리 필터 조건에서 STRING을 TIMESTAMP로 변환합니다. 자세한 내용은 Presto 설명서의 날짜/시간 함수 및 연산자를 참조하십시오.

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)

예외: 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 결과가 비어 있는 이유는 무엇입니까?

AWS 공식
AWS 공식업데이트됨 3년 전