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
- Lookups: Enrich events with reference data
- Dimensions: Add dimensional attributes
- Real-Time: Always uses latest table state
Key Takeaways
- Stream-Table Join: Enrichment pattern
- No Time Window: Uses current table state
- LEFT JOIN: Most common (preserve all stream events)
What's Next?
Next Module: 10.7.3 – Enrichment Patterns