Skip to main content
This example moves public.orders into analytics.orders_live.

1. Prepare the destination

Create the destination table before configuring the pipeline:
CREATE SCHEMA IF NOT EXISTS analytics;

CREATE TABLE IF NOT EXISTS analytics.orders_live (
  id bigint PRIMARY KEY,
  customer_id bigint,
  order_status text,
  total_amount numeric,
  created_at timestamptz,
  updated_at timestamptz
);

2. Create connections

Create and test:
  • PostgreSQL source connection with read access to public.orders
  • PostgreSQL destination connection with write access to analytics.orders_live

3. Create the pipeline

  1. Open Data Pipelines.
  2. Create a new pipeline named Orders to Analytics.
  3. Select the source connection.
  4. Open the builder.

4. Configure Source

  1. Open the Source node.
  2. Discover schema or refresh tables.
  3. Include public.orders.
  4. Preview source rows.

5. Configure Destination

  1. Open the Destination node.
  2. Select the destination connection.
  3. Keep sync mode as FULL_TABLE for the first run.
  4. Keep write mode as Upsert.
Optional Normalisation rules:
RuleTableColumnTarget
Renamepublic.ordersstatusorder_status
Castpublic.orderstotal_amountnumeric

6. Write the SQL model

In the SQL Layer tab, set final delivery table to analytics.orders_live and use:
SELECT
  id,
  customer_id,
  order_status,
  total_amount,
  created_at,
  updated_at
FROM {{ source('raw', 'public__orders') }}
WHERE order_status IS NOT NULL
Validate SQL, preview output, and save the destination.

7. Run and verify

Run manually from the Destination node. Then check run history for:
  • success status
  • rows written
  • delivery target analytics.orders_live
  • warnings
Query the destination table directly if you want an external verification.

8. Move to Incremental

After the manual Full Table run succeeds:
  1. Switch sync mode to INCREMENTAL.
  2. Enter replication key updated_at.
  3. Save.
  4. Run manually again.
  5. Add a schedule.