

在仔細考慮之後，我們決定停止 Amazon Kinesis Data Analytics for SQL 應用程式：

1. 從 **2025 年 9 月 1 日起，**我們不會為 Amazon Kinesis Data Analytics for SQL 應用程式提供任何錯誤修正，因為考慮到即將終止，我們將對其提供有限的支援。

2. 從 **2025 年 10 月 15 日起，**您將無法建立新的 Kinesis Data Analytics for SQL 應用程式。

3. 我們將自 **2026 年 1 月 27** 日起刪除您的應用程式。您將無法啟動或操作 Amazon Kinesis Data Analytics for SQL 應用程式。從那時起，Amazon Kinesis Data Analytics for SQL 將不再提供支援。如需詳細資訊，請參閱[Amazon Kinesis Data Analytics for SQL 應用程式終止](discontinuation.md)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 串流資料作業：串流聯結
<a name="stream-joins-concepts"></a>

您可以在應用程式中擁有多個應用程式內串流。您可以撰寫 `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：報告下訂單後一分鐘內有交易的訂單
<a name="join-ex1"></a>

在此範例中，您的查詢會同時連接 `OrderStream` 和 `TradeStream`。但是，由於我們只想要訂單後一分鐘下達的交易，因此查詢定義了 1 分鐘的 `TradeStream` 窗口。如需有關窗口查詢的資訊，請參閱[滑動視窗](sliding-window-concepts.md)。

```
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 分鐘窗口內有交易，則應用程序將發出輸出。

在前面的查詢中的連接是一個內部聯接，其中查詢在 `OrderStream` 發出記錄，`TradeStream` 中也有一個相符的記錄（反之亦然）。使用外部連接，您可以創建另一個有趣的情景。假設您想要下單後一分鐘內沒有交易的股票訂單，以及同一窗口其他訂單的交易。此即*外部聯結*的案例。

```
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;
```