ストリーミングデータオペレーション: ストリーム結合 - Amazon Kinesis Data Analytics for SQL Applications 開発者ガイド

新規プロジェクトでは、Kinesis Data Analytics for SQL よりも 新しい Managed Service for Apache Flink Studio を使用することをお勧めします。Managed Service for Apache Flink Studio は、使いやすさと高度な分析機能を兼ね備えているため、高度なストリーム処理アプリケーションを数分で構築できます。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ストリーミングデータオペレーション: ストリーム結合

アプリケーションに複数のアプリケーション内ストリームを指定できます。これらストリームに届くデータを関連付ける 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 のレコードを発行します (逆も同様です)。外部結合を使用すると、別の興味深いシナリオを作成できます。株注文が発注されてから 1 分以内に取引がない株注文と、同じウィンドウでレポートされた別の注文に対する取引を指定するとします。これは、外部結合の例です。

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;