내용으로 건너뛰기

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

2분 분량
0

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를 참조하십시오.

다음 단계를 완료하십시오.

  1. 다음 예와 같이 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, testname1testtimestamp1을 해당하는 값으로 바꾸십시오.
  2. STRING 값에 CAST 함수를 사용하여 타임스탬프 필터를 적용합니다.
    SELECT * FROM testdataset1 WHERE testtimestamp1 < CAST('2020-07-14 00:00:00' AS timestamp)
    참고: testdataset1testtimestamp1을 해당하는 값으로 바꾸십시오.

CAST와 관련된 인수 오류

CAST를 사용하여 열을 TIMESTAMP 데이터 유형으로 변환하면 예외 오류가 발생할 수 있습니다.

TIMESTAMP로 캐스팅하려는 열의 데이터 유형이 Athena에서 지원하지 않는 유형일 수 있습니다. Trino 날짜 및 시간 함수를 사용하여 쿼리에서 열을 DATE 또는 TIMESTAMP로 읽습니다. 자세한 내용은 Trino 웹 사이트의 Date and time functions and operators를 참조하십시오.

다음 단계를 완료하십시오.

  1. 다음 예와 비슷한 테이블을 생성합니다.
    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, testname2testtimestamp2를 해당하는 값으로 바꾸십시오.
  2. Trino date_parse 함수를 사용하여 테이블을 Java TIMESTAMP 형식으로 변환하십시오.
    SELECT testid2, testname2, date_parse(testtimestamp2, '%m/%d/%Y %h:%i:%s %p') AS testtimestamp2 FROM testdataset2
    참고: testdataset2, testid2, testname2testtimestamp2를 해당하는 값으로 바꾸십시오.

관련 정보

Amazon Athena에서 테이블을 쿼리할 때 TIMESTAMP 결과가 비어 있는 이유는 무엇입니까?

AWS 공식업데이트됨 9달 전
댓글 없음

관련 콘텐츠