스트리밍 데이터 작업: 스트림 조인 - Amazon Kinesis Data Analytics for SQL Applications 개발자 안내서

신중한 고려 끝에 두 단계로 Amazon Kinesis Data Analytics for SQL applications를 중단하기로 결정했습니다.

1. 2025년 10월 15일부터 SQL 애플리케이션을 위한 새 Kinesis Data Analytics를 생성할 수 없습니다.

2. 2026년 1월 27일부터 애플리케이션이 삭제됩니다. SQL 애플리케이션용 Amazon Kinesis Data Analytics를 시작하거나 작동할 수 없습니다. 해당 시점부터 에 대한 Amazon Kinesis Data AnalyticsSQL에 대한 지원을 더 이상 사용할 수 없습니다. 자세한 내용은 Amazon Kinesis Data Analytics for SQL Applications 중단 단원을 참조하십시오.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

스트리밍 데이터 작업: 스트림 조인

애플리케이션에 복수의 애플리케이션 내 스트림을 가질 수 있습니다. JOIN 쿼리를 작성하여 이들 스트림에 도착하는 데이터를 연결할 수 있습니다. 예를 들어 다음과 같은 애플리케이션 내 스트림이 있다고 가정하겠습니다.

  • OrderStream— 접수된 재고 주문을 받습니다.

    (orderId SqlType, ticker SqlType, amount SqlType, ROWTIME TimeStamp)
  • TradeStream— 해당 주문에 대한 주식 거래 결과를 수신합니다.

    (tradeId SqlType, orderId SqlType, ticker SqlType, amount SqlType, ticker SqlType, amount SqlType, ROWTIME TimeStamp)

다음은 이들 스트림의 데이터를 연결하는 JOIN 쿼리 예입니다.

예 1: 주문 시점으로부터 1분 내에 거래가 이루어진 주문 보고

이 예에서 쿼리를 통해 OrderStreamTradeStream을 조인합니다. 그러나 주문 시점에서 1분 이내에 체결된 매매한 원하는 것이기 때문에 쿼리는 TradeStream에 대해 1분 윈도우를 정의합니다. 윈도우 형식 쿼리에 대한 자세한 설명은 슬라이딩 윈도우 섹션을 참조하십시오.

SELECT STREAM ROWTIME, o.orderId, o.ticker, o.amount AS orderAmount, t.amount AS tradeAmount FROM OrderStream AS o JOIN TradeStream OVER (RANGE INTERVAL '1' MINUTE PRECEDING) AS t ON o.orderId = t.orderId;

WINDOW 절을 명시적으로 사용하고 다음과 같이 앞선 쿼리를 작성하는 윈도우를 정의할 수 있습니다.

SELECT STREAM ROWTIME, o.orderId, o.ticker, o.amount AS orderAmount, t.amount AS tradeAmount FROM OrderStream AS o JOIN TradeStream OVER t ON o.orderId = t.orderId WINDOW t AS (RANGE INTERVAL '1' MINUTE PRECEDING)

이 쿼리를 애플리케이션 코드에 포함시키는 경우 애플리케이션 코드는 연속적으로 실행됩니다. OrderStream에 도착한 모든 레코드에 대해, 주문이 이루어 진 후 1분 윈도우 내에 거래가 있으면 애플리케이션은 출력을 방출합니다.

앞선 쿼리에서의 조인은 TradeStream에 일치하는 레코드가 있는 경우에만 OrderStream에 있는 레코드를 방출하는(또는 그 반대) 내부 조인입니다. 외부 조인을 사용하면 또 다른 흥미로운 시나리오를 만들 수 있습니다. 주식 주문이 이루어진 후 동일한 윈도우 내에 체결된 매매가 없는 주식 주문과 동일한 윈도우 내에 있지만 다른 주문에 대해 체결된 매매가 보고되도록 원한다고 가정해 보겠습니다. 다음은 외부 조인의 예입니다.

SELECT STREAM ROWTIME, o.orderId, o.ticker, o.amount AS orderAmount, t.ticker, t.tradeId, t.amount AS tradeAmount, FROM OrderStream AS o LEFT OUTER JOIN TradeStream OVER (RANGE INTERVAL '1' MINUTE PRECEDING) AS t ON o.orderId = t.orderId;