# Stream join

## Overview

The join operation in stream processing is a powerful function that **accelerates time-to-insight** by correlating multiple event streams into a cohesive, meaningful flow. This is essential for scenarios requiring **real-time data analysis**.

Unlike real-time data enrichment, which supplements data with computed or static data sets, stream joining focuses on combining live events for immediate insights and improve customer engagement.

<figure><img src="/files/XwfeeuwTpeXR5ct5Mpg1" alt="" width="375"><figcaption><p>Real-time customer promo example</p></figcaption></figure>

## Use cases

* <mark style="color:green;">**Ad Performance tracking in real-time**</mark>\
  Track ad clicks, impressions, and user actions in real-time to refine ad spend and gather customer insights.
* <mark style="color:green;">**Dynamic promotions**</mark>\
  Detect new leads on your site, track product interactions, and apply promotional rules to deliver tailored promotions.
* <mark style="color:green;">**Product recommendations**</mark>\
  Combine user sessions, viewed ads, and clicks to generate personalised product suggestions, with feedback loops for ongoing improvement.
* <mark style="color:green;">**Customer 360 proactive support**</mark>\
  Analyse multiple customer telemetry streams to provide proactive, personalised support and enhance the customer experience.
* <mark style="color:green;">**Platform anomaly detection**</mark>\
  Monitor and analyse telemetry from devices to detect unusual compute or network usage patterns, supporting operational efficiency and reliability.

## Available stream join options

On the Joule platform, there are two types of joins available.

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th><th data-hidden></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><mark style="color:orange;"><strong>Inner stream joins</strong></mark></td><td>Strict join between two event streams</td><td></td><td><a href="/pages/iyqT32qylAAfon84rN28">/pages/iyqT32qylAAfon84rN28</a></td></tr><tr><td><mark style="color:orange;"><strong>Outer stream joins</strong></mark></td><td>Immediately pass the first event received and initialised downstream processors</td><td></td><td><a href="/pages/NXL11sNTvumIzKx0ftXR">/pages/NXL11sNTvumIzKx0ftXR</a></td></tr><tr><td><mark style="color:orange;"><strong>Join attributes &#x26; policy</strong></mark></td><td>Join attributes to control and optimise performance</td><td></td><td><a href="/pages/TAbLVEHVrIIorWcoOPn2">/pages/TAbLVEHVrIIorWcoOPn2</a></td></tr></tbody></table>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.fractalworks.io/joule/components/processors/stream-join.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
