Principe
Une push query envoie un flux continu de mises à jour.
S’abonne aux changements d’un stream ou d’une table.
La requête ne se termine jamais (sauf interruption explicite).
Résultat non persisté dans un topic Kafka (sauf CREATE … AS).
Syntaxe complète
SELECT select_expr [, ...]
FROM from_item
[[LEFT | FULL | INNER] JOIN join_item
[WITHIN [<size> <timeunit> | (<before_size> <timeunit>, <after_size> <timeunit>)]
[GRACE PERIOD <grace_size> <timeunit>]]
ON join_criteria]*
[WINDOW window_expression]
[WHERE where_condition]
[GROUP BY grouping_expression]
[HAVING having_expression]
EMIT [CHANGES | FINAL]
[LIMIT count];Exemple simple
Suivre toutes les températures en temps réel :
SELECT sensor_id, ville, temperature, ts
FROM iot_stream_data
EMIT CHANGES;Affiche chaque nouveau message au fur et à mesure.
Exemple avec filtrage
Alertes pour températures supérieures à 30°C :
SELECT sensor_id, ville, temperature, ts
FROM iot_stream_data
WHERE temperature > 30
EMIT CHANGES;N’émet que les événements satisfaisant la condition.
Exemple avec agrégation
Compte du nombre de mesures par ville :
SELECT
ville,
COUNT(*) AS nb_mesures
FROM iot_stream_data
WINDOW TUMBLING (SIZE 5 MINUTES)
GROUP BY ville
EMIT CHANGES;Émet le compte mis à jour pour chaque fenêtre.
EMIT CHANGES vs EMIT FINAL
EMIT CHANGES : émet résultats intermédiaires au fur et à mesure.
EMIT FINAL : n’émet que le résultat final de chaque fenêtre (nécessite fenêtrage).
-- Résultats intermédiaires
SELECT ville, AVG(temperature) AS avg_temp
FROM iot_stream_data
WINDOW TUMBLING (SIZE 10 MINUTES)
GROUP BY ville
EMIT CHANGES;
-- Seulement résultat final de chaque fenêtre
SELECT ville, AVG(temperature) AS avg_temp
FROM iot_stream_data
WINDOW TUMBLING (SIZE 10 MINUTES)
GROUP BY ville
EMIT FINAL;