经过仔细考虑,我们决定分两个步骤停止使用亚马逊 Kinesis Data Analytics SQL 的应用程序:
1. 从 2025 年 10 月 15 日起,您将无法为应用程序创建新的 Kinesis Data Analytic SQL s。
2. 我们将从 2026 年 1 月 27 日起删除您的申请。您将无法启动或操作适用于应用程序的 Amazon Kinesis Data Analytic SQL s。从那时起,亚马逊 Kinesis Data Analytics SQL 将不再提供支持。有关更多信息,请参阅 适用于应用程序的 Amazon Kinesis Data Analytic SQL s 停产。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
流数据操作:流联接
您可以在应用程序中拥有多个应用程序内部流。您可以编写 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;