

Après mûre réflexion, nous avons décidé de mettre fin à Amazon Kinesis Data Analytics pour les applications SQL :

1. À compter du **1er septembre 2025,** nous ne fournirons aucune correction de bogue pour les applications Amazon Kinesis Data Analytics for SQL, car leur support sera limité, compte tenu de l'arrêt prochain.

2. À compter du **15 octobre 2025,** vous ne pourrez plus créer de nouvelles applications Kinesis Data Analytics for SQL.

3. Nous supprimerons vos candidatures à compter **du 27 janvier 2026**. Vous ne serez pas en mesure de démarrer ou d'utiliser vos applications Amazon Kinesis Data Analytics for SQL. Support ne sera plus disponible pour Amazon Kinesis Data Analytics for SQL à partir de cette date. Pour de plus amples informations, veuillez consulter [Arrêt d'Amazon Kinesis Data Analytics pour les applications SQL](discontinuation.md).

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Opérations de diffusion de données : Jointures de flux
<a name="stream-joins-concepts"></a>

Vous pouvez disposer de plusieurs flux intégrés à l'application dans votre application. Vous pouvez écrire des requêtes `JOIN` pour corréler les données qui arrivent dans ces flux. Par exemple, supposons que vous ayez les flux intégrés à l'application suivants :
+ **OrderStream**— Reçoit les commandes de stock passées.

  ```
  (orderId SqlType, ticker SqlType, amount SqlType, ROWTIME TimeStamp)
  ```
+ **TradeStream**— Reçoit les transactions boursières qui en résultent pour ces ordres.

  ```
  (tradeId SqlType, orderId SqlType, ticker SqlType, amount SqlType, ticker SqlType, amount SqlType, ROWTIME TimeStamp)
  ```

Voici des exemples de requête `JOIN` qui corrèlent les données de ces flux.

## Exemple 1 : Génération de rapport en cas d'opérations à moins d'une minute du placement de l'ordre
<a name="join-ex1"></a>

Dans cet exemple, votre requête joint les deux flux `OrderStream` et `TradeStream`. Cependant, comme nous voulons uniquement les opérations placées dans un délai d'une minute après les ordres, la requête définit la fenêtre de 1 minute sur le flux `TradeStream`. Pour plus d'informations sur les requêtes à fenêtres, consultez [Fenêtres défilantes](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;
```

Vous pouvez définir explicitement la fenêtre en utilisant la clause `WINDOW` et en écrivant la requête précédente comme suit : 

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

Lorsque vous incluez cette requête dans votre code d'application, le code d'application s'exécute en continu. Pour chaque enregistrement qui arrive dans le flux `OrderStream`, l'application émet une sortie si des opérations ont lieu dans la fenêtre de 1 minute suivant l'ordre. 

La jointure dans la requête précédente est une jointure interne où la requête émet des enregistrements dans `OrderStream` pour lesquels il existe un enregistrement correspondant dans `TradeStream` (et vice versa). A l'aide d'une jointure externe, vous pouvez créer un autre scénario intéressant. Supposons que vous vouliez les ordres de bourse pour lesquels aucune opération n'a lieu dans un délai d'une minute après le placement de l'ordre de bourse, et que des opérations soient signalées dans la même fenêtre, mais pour certains autres ordres. Il s'agit d'un exemple de *jointure externe*. 

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