Skip to content
42 changes: 42 additions & 0 deletions docs/web-console-docs/warehouse-native/modes.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,25 @@ In Hybrid mode, you keep ABsmartly's managed ClickHouse as the default data sour
- **Goals and metrics** are assigned a data source per goal. A goal can be sourced from an external warehouse — where your business data already lives, so results line up with what your BI and finance teams report — or from ABsmartly's managed ClickHouse. You can mix both: some goals stay in ClickHouse while others come from your warehouse.
- When a goal is sourced from an external warehouse, ABsmartly makes the exposures that live in the default ClickHouse available to that warehouse so the two can be evaluated together. You enable this by pointing ABsmartly at an object store through the **[Exposures import](./get-started#step-4-configure-exposures-import-hybrid-only)** section on each external data source.

```mermaid
flowchart TB
SDK["Your App<br/>(ABsmartly SDK)"]

subgraph ABC["ABsmartly Cloud"]
ENGINE["Assignment, stats &<br/>metric governance"]
CH[("Managed ClickHouse<br/><b>Default data source</b><br/>exposures + goals")]
end

subgraph WH["Your Warehouse (external data source)"]
EXT[("Goals & metrics<br/>sourced from your data")]
end

SDK -->|assignment & exposures| CH
CH -->|"exposures import<br/>(via object store)"| EXT
CH --> ENGINE
EXT --> ENGINE
```

Hybrid lets you bring metrics into your warehouse at your own pace: you keep ABsmartly's battle-tested assignment and exposure pipeline, and move as many (or as few) of your goals into your warehouse as you like.

## Fully Warehouse Native
Expand All @@ -45,6 +64,29 @@ Because exposures come from the default data source, going Fully unlocks two thi
- **Filter exposures yourself.** You control the exposures table, so you can strip out bots, scrapers, internal traffic, or any other unwanted exposures before ABsmartly analyzes them — using your own logic in your own warehouse.
- **Enrich exposures with your own attributes.** You can join in an external **attributes** table to add segmentation dimensions that ABsmartly never sees in Hybrid mode, then slice experiment results by those attributes.

```mermaid
flowchart TB
SDK["Your App<br/>(ABsmartly SDK)"]

subgraph ABC["ABsmartly Cloud"]
ENGINE["Assignment logic, stats &<br/>metric governance<br/><i>(no user-level data stored)</i>"]
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
end

subgraph WH["Your Warehouse — Default data source"]
EXP[("Exposures")]
GOALS[("Goals")]
ATTR[("Your attributes table")]
FILTER["Your own filtering<br/>(bots, scrapers, internal traffic)"]
end

SDK -->|exposures| EXP
FILTER --> EXP
ATTR -->|enrich| EXP
EXP --> GOALS
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
EXP -->|"queried on your schedule"| ENGINE
GOALS -->|"queried on your schedule"| ENGINE
```

:::info Why the exposure source matters
Exposure-side filtering (robots, scrapers, internal traffic) and attribute enrichment both operate on the exposure stream. Since exposures can only come from the default data source, these capabilities are only available when **your** warehouse is the default — that is, in **Fully Warehouse Native**. If you need either, choose Fully.
:::
Expand Down