From drt-hub
Migrates existing Reverse ETL syncs from Census, Hightouch, Polytomic, or custom scripts to drt. Maps sync modes, auth, and field mappings to drt equivalents.
How this skill is triggered — by the user, by Claude, or both
Slash command
/drt-hub:drt-migrateThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Help the user migrate from an existing Reverse ETL tool (Census, Hightouch, Polytomic, or custom scripts) to drt.
Help the user migrate from an existing Reverse ETL tool (Census, Hightouch, Polytomic, or custom scripts) to drt.
Ask the user to share their existing sync configuration (screenshot, YAML, JSON, or description).
Map their existing config to drt equivalents using the tables below.
Generate a valid syncs/<name>.yml for each sync.
Note any features that need manual setup (auth env vars, profiles.yml).
| Census / Hightouch concept | drt equivalent |
|---|---|
| Source (BigQuery model) | model: ref('table') or raw SQL |
| Destination connection | destination.type + auth config |
| Sync behavior: Full | sync.mode: full (every run, no dedup) |
| Sync behavior: Append (incremental) | sync.mode: incremental + cursor_field |
| Sync behavior: Mirror (upsert + delete-removed) | sync.mode: mirror (v0.7.7+) + upsert_key — supported on postgres / mysql / clickhouse / snowflake |
| Sync behavior: Replace (overwrite table) | sync.mode: replace (TRUNCATE + INSERT, zero-downtime via replace_strategy: swap on supported DWHs) |
| Field mappings (UI column picker) | body_template / properties_template (Jinja2) |
| Run schedule | drt run via cron, CI, Dagster, Airflow, or Prefect |
| Error notifications | failure_alerts (Slack / webhook, v0.7.0+) — fires on sync-level failures |
| Per-row error policy | on_error: skip (continue past failures) vs on_error: fail (stop at first) |
sync.mode matches the source semantic)| User wants | drt mode | Notes |
|---|---|---|
| "Re-send everything every run" | full | Default. Idempotent destinations only — REST API / Slack / file outputs. |
| "Append new rows since last run" | incremental + cursor_field | Watermark-based. --cursor-value overrides for backfill. |
| "Upsert by key" | upsert + upsert_key | Census's most common "Update" shape. |
| "Upsert by key AND delete rows removed from source" | mirror + upsert_key | Census's "Full Sync with Deletion" / Hightouch's "Mirror" semantic. v0.7.7+, SQL destinations. Source key cardinality fits in memory. |
| "Overwrite the destination table each run" | replace | TRUNCATE + INSERT. Set replace_strategy: swap (Postgres / Snowflake) for zero-downtime via staging-table swap. |
| Old tool style | drt equivalent |
|---|---|
| Stored API key in UI | token_env: MY_TOKEN + export MY_TOKEN=... (never hardcode — drt validate flags hardcoded secrets) |
| OAuth app | Use token from OAuth flow → token_env |
| Service account JSON | Set GOOGLE_APPLICATION_CREDENTIALS for BigQuery source |
| Connection string | Source profile field in ~/.drt/profiles.yml (env-var-substituted via ${VAR}) |
For each sync, output:
# syncs/<name>.yml
name: <name>
description: "Migrated from <tool>"
model: ref('<table>') # or raw SQL
destination:
type: <type>
# ... fields
sync:
mode: full # or incremental / upsert / mirror / replace
# ...
Then summarize:
~/.drt/profiles.yml)mirror is the same shape; Census "Full Sync without Deletion" → drt full keeps stale rows in the destination, so the user may want upsert instead)docs/llm/API_REFERENCE.md — all destination types and fieldsdocs/connectors/ — per-destination details (auth, supported modes)examples/postgres_to_postgres_mirror/ — runnable example for the mirror mode shapenpx claudepluginhub drt-hub/drtMigrates Reverse ETL syncs from Census, Hightouch, Polytomic, or custom scripts to drt by mapping sources, destinations, schedules, and generating sync YAML configs.
Generates a drt sync YAML configuration to connect a data warehouse table to an external service (Slack, REST API, HubSpot, Google Sheets, etc.) or set up a Reverse ETL pipeline.
Changes sync configuration of an existing data warehouse schema: sync_type, incremental_field, primary_key_columns, CDC mode, or sync_frequency. Use when switching from full refresh to incremental, fixing failing sync diagnoses, or adjusting sync cadence.