> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zwiron.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Reverse ETL

> Push curated warehouse data back into operational databases and tools with Zwiron reverse ETL.

**Reverse ETL** inverts the typical data flow: instead of moving data into the warehouse, you move data out of it — into the operational systems that your team uses day-to-day.

***

## Use cases

| Warehouse source      | Destination                  | Example                                                         |
| --------------------- | ---------------------------- | --------------------------------------------------------------- |
| Snowflake             | PostgreSQL                   | Sync enriched customer segments into an operational Postgres DB |
| BigQuery              | MySQL                        | Push model predictions into a production recommendations DB     |
| Snowflake or BigQuery | PostgreSQL / MySQL / MongoDB | Any computed view → a live operational destination              |

Other warehouse and SaaS destinations are **on demand** — see [More connectors on demand](/connectors/coming-soon).

***

## Creating a Reverse ETL pipeline

1. Go to **Jobs** → **New Job**
2. Select **Reverse ETL** as the job type
3. Follow the same 4-step wizard as ETL:
   * **Source** — choose your warehouse connection (Snowflake or BigQuery today)
   * **Destination** — choose an operational system connection (e.g. PostgreSQL, MySQL, MongoDB)
   * **Tables** — select which tables or views to push
   * **Settings** — sync mode, destination write mode, schedule

***

## Syncing from views and queries

For Reverse ETL, your "source" is typically not a raw table — it's a transformed or aggregated view:

```sql theme={null}
-- Create a view in Snowflake
CREATE OR REPLACE VIEW public.active_customer_segments AS
SELECT
  customer_id,
  segment,
  ltv_score,
  last_updated
FROM analytics.customer_model
WHERE is_active = true;
```

Select this view as your source table in Zwiron. The view runs fresh on every sync.

***

## Write modes for Reverse ETL

**Upsert** is the most common write mode for Reverse ETL — it inserts new rows and updates existing ones based on the primary key, keeping the destination in sync with the warehouse output.

| Scenario                             | Recommended write mode |
| ------------------------------------ | ---------------------- |
| Push all segments, update if changed | Upsert                 |
| Append only (event stream)           | Append                 |
| Replace entire dataset each run      | Overwrite              |

***

## Schedule

Reverse ETL jobs should run on a schedule that matches how frequently your warehouse models are updated. If your dbt models run at 6 AM daily, schedule the Reverse ETL job to run at 6:30 AM.

***

## What Reverse ETL is not

Reverse ETL is not a way to replicate the warehouse back to a second warehouse. For warehouse-to-warehouse syncing, use a standard [ETL pipeline](/pipelines/etl) with a warehouse as source and destination.
