KafkaIQ

10.7.2 – Stream-Table Joins

Module: Section 10 – Kafka Ecosystem & Tools
Section: 10.7 – Joins & Enrichment with ksqlDB
Goal: Master stream-table joins for enrichment patterns


Stream-Table Join Syntax

SELECT *
FROM stream s
LEFT JOIN table t
  ON s.foreign_key = t.primary_key
EMIT CHANGES;

No WITHIN clause needed (table represents current state)


Example: Enrich Orders with User Data

CREATE STREAM orders (
  order_id VARCHAR,
  user_id BIGINT,
  amount DOUBLE
) WITH (...);

CREATE TABLE users (
  user_id BIGINT PRIMARY KEY,
  username VARCHAR,
  email VARCHAR,
  tier VARCHAR
) WITH (...);

CREATE STREAM enriched_orders AS
SELECT
  o.order_id,
  o.amount,
  u.username,
  u.email,
  u.tier
FROM orders o
LEFT JOIN users u ON o.user_id = u.user_id
EMIT CHANGES;

Result: Every order enriched with current user data


Use Cases

  1. Lookups: Enrich events with reference data
  2. Dimensions: Add dimensional attributes
  3. Real-Time: Always uses latest table state

Key Takeaways

  1. Stream-Table Join: Enrichment pattern
  2. No Time Window: Uses current table state
  3. LEFT JOIN: Most common (preserve all stream events)

What's Next?

Next Module: 10.7.3 – Enrichment Patterns