시계열 데이터 결합하기¶
ASOF JOIN 구문을 사용하여 시계열 데이터가 포함된 테이블을 조인할 수 있습니다. SELECT 문의 FROM 절 내에서 ASOF JOIN을 표준 구문으로 사용할 수 있습니다. 복잡한 SQL, 다른 유형의 조인, 윈도우 함수를 사용하여 ASOF JOIN 쿼리를 에뮬레이트할 수 있지만 ASOF JOIN 구문을 사용하면 이러한 쿼리가 작성하기 더 쉬워지고 최적화됩니다.
소개¶
ASOF 조인을 사용하여 금융 거래 데이터와 같은 시계열 데이터를 분석할 수 있습니다. 예를 들어, 거래 비용 분석에는 주식 구매 결정 시 호가와 거래가 실행되고 기록될 때 실제로 지불한 가격 간의 차이를 측정하는 “슬리피지” 계산이 필요합니다. ASOF JOIN은 이러한 유형의 분석을 촉진할 수 있습니다. 이 조인 방법의 핵심 기능이 시계열 간의 비교 분석임을 감안할 때 ASOF JOIN은 날씨 관측, 센서 판독 또는 감사 내역과 같이 본질적으로 과거 시점의 데이터 세트를 분석하는 데 유용할 수 있습니다. 이러한 사용 사례 중 다수에서는 서로 다른 디바이스에서 판독한 데이터에 정확히 동일하지 않은 타임스탬프가 있는 경우 ASOF JOIN을 사용하여 데이터를 연결할 수 있습니다.
분석해야 하는 시계열 데이터가 두 테이블에 존재하고 각 테이블의 각 행에 대한 타임스탬프가 있다고 가정합니다. 이 타임스탬프는 기록된 이벤트의 정확한 “현재” 날짜와 시간을 나타냅니다. 첫 번째(또는 왼쪽) 테이블의 각 행에 대해 조인은 타임스탬프 값이 다음 중 하나인 두 번째(또는 오른쪽) 테이블에서 단일 행을 찾기 위해 지정하는 비교 연산자와 함께 “일치 조건”을 사용합니다.
왼쪽 테이블의 타임스탬프 값보다 작거나 같습니다.
왼쪽 테이블의 타임스탬프 값보다 크거나 같습니다.
왼쪽 테이블의 타임스탬프 값보다 작습니다.
왼쪽 테이블의 타임스탬프 값보다 큽니다.
오른쪽에 있는 적격 행은 가장 가까운 일치 항목이며, 지정된 비교 연산자에 따라 시간상 동일하거나 이전 또는 이후일 수 있습니다.
ASOF JOIN 결과의 카디널리티는 항상 왼쪽 테이블의 카디널리티와 같습니다. 왼쪽 테이블에 4,000만 개의 행이 있는 경우 ASOF JOIN은 4,000만 개의 행을 반환합니다. 따라서 왼쪽 테이블은 “보존하는” 테이블로, 오른쪽 테이블은 “참조되는” 테이블로 생각할 수 있습니다.
ASOF JOIN 쿼리의 개념적 예¶
예를 들어 금융 애플리케이션에는 quotes
라는 테이블과 trades
라는 테이블이 있을 수 있습니다. 한 테이블에는 주식 매수 입찰 내역이 기록되고, 다른 테이블에는 실제 거래 내역이 기록됩니다. 주식 매수 입찰은 거래 전에 이루어집니다(또는 기록된 시간의 세분성에 따라 “동시에” 이루어질 수도 있음). 두 테이블 모두 타임스탬프가 있으며, 둘 다 관심을 두고서 비교할 수 있는 다른 열이 있습니다. 간단한 ASOF JOIN 쿼리는 각 거래 이전에 가장 가까운 호가(시간 기준)를 반환합니다. 즉, 쿼리는 다음과 같이 묻습니다. “내가 거래할 당시 해당 주식의 주가는 얼마였습니까?”
trades
테이블에 3개의 행이 있고 quotes
테이블에 7개의 행이 있다고 가정합니다. 셀의 배경색은 행이 일치하는 티커 심벌에서 조인되고 이들 행의 타임스탬프 열이 비교될 때 quotes
의 3개 행이 ASOF JOIN에 적합하다는 것을 보여줍니다.
TRADES 테이블(왼쪽 또는 “보존하는” 테이블)
QUOTES 테이블(오른쪽 또는 “참조되는” 테이블)
이처럼 강조 표시된 3개 행의 조합을 생성하는 구문과 그 밖의 여러 예를 보려면 일치 및 ON 조건으로 조인 섹션을 참조하십시오.