시간 여행

시간 여행 (Time Travel)

시간 여행(time travel) 구문은 과거 데이터를 조회하는 데 사용돼요. 사용자가 특정 시점을 지정하고 해당 테이블 데이터를 조회할 수 있게 해줘요.

출처: 문서

본문

배치 | 스트리밍

시간 여행의 구문은 과거 데이터를 조회하는 데 사용돼요. 사용자가 특정 시점을 지정하고 해당 테이블 데이터를 조회할 수 있게 해줘요.

주의: 현재 시간 여행은 테이블이 속한 해당 카탈로그가 getTable(ObjectPath tablePath, long timestamp) 메서드를 구현해야 해요. 자세한 내용은 Catalog를 참고하세요.

시간 여행 절이 있는 구문은 다음과 같아요.

SELECT select_list FROM table_name FOR SYSTEM_TIME AS OF timestamp_expression

매개변수 사양:

  • FOR SYSTEM_TIME AS OF timestamp_expression: 특정 시점의 데이터를 조회하는 데 사용되며, timestamp_expression은 조회하려는 과거 시점을 나타내요. timestamp_expression은 특정 타임스탬프이거나 상수로 축약될 수 있는 시간 관련 표현식일 수 있고, 이 표현식은 물리적 테이블에만 적용할 수 있으며 뷰나 하위 쿼리에는 적용할 수 없어요.

예시 (Example)

--use timestamp constant expression
SELECT select_list FROM paimon_tb FOR SYSTEM_TIME AS OF TIMESTAMP '2023-07-31 00:00:00'

--use expression with functions that can be reduced to a timestamp constant
SELECT select_list FROM paimon_tb FOR SYSTEM_TIME AS OF TIMESTAMP '2023-07-31 00:00:00' - INTERVAL '1' DAY

제한 (Limitation)

주의: 시간 여행에 사용되는 timestamp_expression은 TIMESTAMP 상수로 축약될 수 있는 특정 유형의 표현식만 지원해요. 여기에는 TIMESTAMP 유형의 상수 표현식, 타임스탬프의 더하기·빼기 연산, 그리고 일부 부분 내장 함수와 UDF가 포함돼요.

timestamp_expression에서 UDF를 사용할 때, 현재 프레임워크의 제한 때문에 일부 표현식은 SQL 파싱 중에 TIMESTAMP 상수로 직접 축약될 수 없고 예외가 발생해요.

--use expression with functions that can not be reduced to a timestamp constant
SELECT select_list FROM paimon_tb FOR SYSTEM_TIME AS OF TO_TIMESTAMP_LTZ(0, 3)

해당 예외는 다음과 같아요.

Unsupported time travel expression: TO_TIMESTAMP_LTZ(0, 3) for the expression can not be reduced to a constant by Flink.

시간대 처리 (Time Zone Handling)

TIMESTAMP 표현식이 생성하는 데이터 타입은 TIMESTAMP 유형이지만, 시간 여행 절에는 특별한 경우가 있어요. 시간 여행 절을 만나면 프레임워크는 TIMESTAMP 유형을 로컬 시간대 기준으로 LONG 유형으로 변환해요. 따라서 같은 시간 여행 조회 문의 결과는 서로 다른 시간대에서 달라질 수 있어요.

더 알아보기 (Learn more)