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

Pour les nouveaux projets, nous vous recommandons d’utiliser le nouveau service géré pour Apache Flink Studio plutôt que les applications Kinesis Data Analytics pour SQL. Le service géré pour Apache Flink Studio allie facilité d’utilisation et capacités analytiques avancées, ce qui vous permet de créer des applications sophistiquées de traitement des flux en quelques minutes.

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

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