Fenêtres bascules (regroupements à l'aide de GROUP BY) - Guide du développeur d'Amazon Kinesis Data Analytics SQL pour applications

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

1. À compter du 15 octobre 2025, vous ne pourrez plus créer de nouveaux Kinesis Data Analytics SQL pour les applications.

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

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.

Fenêtres bascules (regroupements à l'aide de GROUP BY)

Lorsqu'une requête à fenêtres traite chaque fenêtre sans chevauchement, la fenêtre est appelée fenêtre bascule. Dans ce cas, chaque enregistrement d'un flux intégré à l'application appartient à une fenêtre spécifique. Il n'est traité qu'une fois (lorsque la requête traite la fenêtre à laquelle l'enregistrement appartient).

Timeline showing non-overlapping windows processing data streams at distinct time intervals.

Par exemple, une requête de regroupement à l'aide d'une clause GROUP BY traite des lignes dans une fenêtre bascule. Le flux de démonstration de l'exercice de mise en route reçoit des données de prix d'action qui sont mappées au flux intégré à l'application SOURCE_SQL_STREAM_001 dans votre application. Ce flux a le schéma suivant :

(TICKER_SYMBOL VARCHAR(4), SECTOR varchar(16), CHANGE REAL, PRICE REAL)

Dans votre code d'application, supposons que vous vouliez trouver des prix agrégés (minimum, maximum) pour chaque symbole boursier sur une fenêtre d'une minute. Vous pouvez utiliser la requête suivante.

SELECT STREAM ROWTIME, Ticker_Symbol, MIN(Price) AS Price, MAX(Price) AS Price FROM "SOURCE_SQL_STREAM_001" GROUP BY Ticker_Symbol, STEP("SOURCE_SQL_STREAM_001".ROWTIME BY INTERVAL '60' SECOND);

La requête précédente est un exemple de requête à fenêtres temporelle. La requête regroupe les enregistrements par valeurs ROWTIME. Une génération de rapports sur une base par minute, la fonction STEP arrondit vers le bas les valeurs ROWTIME à la minute la plus proche.

Note

Vous pouvez également utiliser la fonction FLOOR pour regrouper les enregistrements dans des fenêtres. Cependant, FLOOR peut uniquement arrondir les valeurs de temps à l'unité de temps entière inférieure (heure, minute, seconde, etc.). La fonction STEP est recommandée pour regrouper les enregistrements dans des fenêtres bascules, car elle peut arrondir des valeurs à un intervalle inférieur arbitraire, par exemple 30 secondes.

Cette requête est un exemple de fenêtre sans chevauchement (bascule). La clause GROUP BY regroupe les enregistrements dans une fenêtre d'une minute et chaque enregistrement appartient à une fenêtre spécifique (pas de chevauchement). La requête émet un enregistrement de sortie par minute, fournissant le prix d'un symbole boursier minimum/maximum enregistré dans la minute spécifique. Ce type de requête est utile pour générer des rapports périodiques à partir du flux de données d'entrée. Dans cet exemple, des rapports sont générés toutes les minutes.

Pour tester la requête
  1. Configurez une application en suivant l'exercice de mise en route.

  2. Remplacez l'instruction SELECT dans le code d'application par la requête SELECT précédente. Le code d'application résultant est présenté ci-après :

    CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ticker_symbol VARCHAR(4), Min_Price DOUBLE, Max_Price DOUBLE); -- CREATE OR REPLACE PUMP to insert into output CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM Ticker_Symbol, MIN(Price) AS Min_Price, MAX(Price) AS Max_Price FROM "SOURCE_SQL_STREAM_001" GROUP BY Ticker_Symbol, STEP("SOURCE_SQL_STREAM_001".ROWTIME BY INTERVAL '60' SECOND);