新規プロジェクトでは、Kinesis Data Analytics for SQL よりも 新しい Managed Service for Apache Flink Studio を使用することをお勧めします。Managed Service for Apache Flink Studio は、使いやすさと高度な分析機能を兼ね備えているため、高度なストリーム処理アプリケーションを数分で構築できます。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ストリーミングデータオペレーション: ストリーム結合
アプリケーションに複数のアプリケーション内ストリームを指定できます。これらストリームに届くデータを関連付ける JOIN
クエリを記述できます。たとえば、以下のアプリケーション内ストリームがあるとします。
-
OrderStream — 注文中の在庫注文を受け取ります。
(orderId
SqlType
, tickerSqlType
, amountSqlType
, ROWTIME TimeStamp) -
TradeStream - これらの注文の結果となる株式取引を受け取ります。
(tradeId
SqlType
, orderIdSqlType
, tickerSqlType
, amountSqlType
, tickerSqlType
, amountSqlType
, ROWTIME TimeStamp)
以下は、これらのストリームのデータを関連付ける JOIN
クエリの例です。
例 1: 注文が出されてから 1 分以内に取引があった注文をレポートする
この例では、クエリは OrderStream
と TradeStream
の両方を結合します。ただし、注文から 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;