流数据操作: 流联接 - Amazon Kinesis Data Analytics for SQL 应用程序开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

流数据操作: 流联接

您可以在应用程序中拥有多个应用程序内部流。您可以编写 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 在下订单的一分钟内交易的报告订单

在此示例中,您的查询与 OrderStreamTradeStream。但是,由于我们只希望在订单之后的一分钟内进行交易,查询将在1分钟窗口内定义 TradeStream。有关窗口调查查询的信息,请参阅 滑动窗口.

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;