타임스탬프 데이터 작업
이 섹션에서는 Athena에서 타임스탬프 데이터를 작업할 때 고려해야 할 몇 가지 사항을 설명합니다.
참고
이전 엔진 버전과 Athena 엔진 버전 3 사이에서 타임스탬프 처리가 조금 변경되었습니다. Athena 엔진 버전 3에서 발생할 수 있는 타임스탬프 관련 오류와 권장 솔루션은 Athena 엔진 버전 3 참조의 타임스탬프 변경 사항 섹션을 참조하세요.
Amazon S3 객체에 타임스탬프 데이터를 쓰기 위한 형식
Amazon S3 객체에 타임스탬프 데이터를 써야 하는 형식은 사용하는 SerDe 라이브러리와 열 데이터 형식 모두에 따라 달라집니다.
-
테이블 열 형식이
DATE
인 경우 Athena는 데이터의 해당 열 또는 속성을 ISO 형식YYYY-MM-DD
의 문자열이거나 Parquet 또는 ORC와 같은 기본 제공 날짜 유형으로 예상합니다. -
테이블 열 형식이
TIME
인 경우 Athena는 데이터의 해당 열 또는 속성을 ISO 형식HH:MM:SS
의 문자열이거나 Parquet 또는 ORC와 같은 기본 제공 시간 유형으로 예상합니다. -
테이블 열 형식이
TIMESTAMP
인 경우 Athena는 데이터의 해당 열 또는 속성을YYYY-MM-DD HH:MM:SS.SSS
형식의 문자열(날짜 및 시간 사이의 공백에 주의)이거나 Parquet, ORC 또는 Ion과 같은 기본 제공 시간 유형으로 예상합니다. 참고로 Athena는 유효하지 않은 타임스탬프(예:0000-00-00 08:00:00.000
)에 대한 동작을 보장하지 않습니다.참고
OpenCSVSerDe 타임스탬프는 예외이며, 밀리초 분해능의 UNIX 에포크로 인코딩해야 합니다.
시간을 기준으로 파티셔닝된 데이터가 레코드의 타임스탬프 필드와 일치하는지 확인
데이터 생성자는 파티션 값이 파티션 내 데이터에 맞게 조정되었는지 확인해야 합니다. 예를 들어 데이터에 timestamp
속성이 있고 Firehose를 사용하여 Amazon S3로 데이터를 로드하는 경우 Firehose의 기본 파티셔닝은 12시간 형식의 시간에 기반하므로 동적 파티셔닝을 사용해야 합니다.
파티션 키의 데이터 형식으로 문자열 사용
성능상의 이유로 파티션 키의 데이터 유형으로 STRING
을 사용하는 것이 좋습니다. DATE
유형을 사용할 때 Athena는 YYYY-MM-DD
형식의 파티션 값을 날짜로 인식하지만 이 경우 성능이 저하될 수 있습니다. 이러한 이유로 대신 파티션 키에 STRING
데이터 형식을 사용하는 것이 좋습니다.
시간을 기준으로 파티셔닝된 타임스탬프 필드에 대한 쿼리를 작성하는 방법
시간을 기준으로 파티셔닝된 타임스탬프 필드에 대한 쿼리를 작성하는 방법은 쿼리하려는 테이블 유형에 따라 달라집니다.
Hive 테이블
Athena에서 가장 흔히 사용되는 Hive 테이블의 경우 쿼리 엔진은 열과 파티션 키 사이의 관계를 알지 못합니다. 따라서 항상 쿼리에 열과 파티션 키 모두에 대한 조건자를 추가해야 합니다.
예를 들어 event_time
열과 event_date
파티션 키가 있고 23:00 및 03:00 사이에 이벤트를 쿼리하려고 한다고 가정합니다. 이 경우 다음 예제와 같이 열과 파티션 키 모두에 대한 조건자를 쿼리에 포함해야 합니다.
WHERE event_time BETWEEN
start_time
ANDend_time
AND event_date BETWEENstart_time_date
ANDend_time_date
Iceberg 테이블
Iceberg 테이블을 사용하면 쿼리를 단순화하는 계산된 파티션 값을 사용할 수 있습니다. 예를 들어 Iceberg 테이블이 다음과 같은 PARTITIONED BY
절을 사용하여 생성되었다고 가정합니다.
PARTITIONED BY (event_date month(event_time))
이 경우 쿼리 엔진은 event_time
조건자 값을 기반으로 파티션을 자동으로 정리합니다. 따라서 다음 예제와 같이 쿼리에서는 event_time
에 대한 조건자만 지정하면 됩니다.
WHERE event_time BETWEEN
start_time
ANDend_time
자세한 내용은 Iceberg 테이블 생성 단원을 참조하십시오.
타임스탬프 열에 Iceberg의 숨겨진 파티셔닝을 사용하는 경우 Iceberg는 타임스탬프 열에서 파생되고 보다 효과적인 파티셔닝을 위해 날짜로 변환되어 구성된 테이블 열에서 파티션을 생성할 수 있습니다. 예를 들어 타임스탬프 열 event_time
에서 event_date
를 생성하고 event_date
에서 자동으로 파티셔닝할 수 있습니다. 이 경우 파티션 유형은 날짜입니다.
파티션을 사용하는 경우 쿼리 성능을 최적화하기 위해 종일 범위를 기준으로 필터링하여 조건자 푸시다운을 활성화합니다. 예를 들어 다음 쿼리는 하루 안에 속하더라도 범위를 단일 날짜 파티션으로 변환할 수 없으므로 푸시다운되지 않습니다.
WHERE event_time >= TIMESTAMP '2024-04-18 00:00:00' AND event_time < TIMESTAMP '2024-04-18 12:00:00'
대신 다음 예제와 같이 종일 범위를 사용하여 조건자 푸시다운을 허용하고 쿼리 성능을 개선합니다.
WHERE event_time >= TIMESTAMP '2024-04-18 00:00:00' AND event_time < TIMESTAMP '2024-04-19 00:00:00'
타임스탬프 일부가 00:00:00
인 경우 BETWEEN start_time AND end_time
구문을 사용하거나 여러 일의 범위를 사용할 수도 있습니다.
자세한 내용은 Trino 블로그 게시물