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.