Types de jointures
KSQL supporte trois types de jointures :
INNER JOIN : garde seulement les correspondances des deux côtés.
LEFT JOIN : garde tous les éléments de gauche, NULL à droite si pas de correspondance.
FULL OUTER JOIN : garde tous les éléments des deux côtés.
Jointure stream-stream
Les jointures entre streams nécessitent une fenêtre temporelle.
Syntaxe WITHIN spécifie la fenêtre de join :
SELECT
o.order_id,
o.amount,
p.status
FROM orders o
INNER JOIN payments p
WITHIN 10 MINUTES
ON o.order_id = p.order_id
EMIT CHANGES;Un événement de orders est joint avec les événements de payments dans une fenêtre de 10 minutes.
Jointure stream-table
Join d’un stream avec l’état actuel d’une table.
Pas besoin de fenêtre temporelle :
SELECT
o.order_id,
o.customer_id,
c.customer_name,
o.amount
FROM orders_stream o
LEFT JOIN customers_table c
ON o.customer_id = c.customer_id
EMIT CHANGES;Chaque commande est enrichie avec les informations client de la table.
Jointure table-table
Join entre deux tables pour créer une vue matérialisée :
SELECT
c.customer_id,
c.customer_name,
SUM(o.amount) AS total_spent
FROM customers_table c
LEFT JOIN orders_table o
ON c.customer_id = o.customer_id
GROUP BY c.customer_id, c.customer_name
EMIT CHANGES;WITHIN avec before et after
Spécifier une fenêtre asymétrique :
SELECT *
FROM stream1 s1
JOIN stream2 s2
WITHIN (5 MINUTES BEFORE, 10 MINUTES AFTER)
ON s1.id = s2.id
EMIT CHANGES;Join s1 avec s2 si s2 arrive entre 5 min avant et 10 min après s1.