Quickstart
This page builds a Rocky pipeline that copies Fivetran-landed source tables into Databricks. It takes about five minutes.
There are two ways to reach the warehouse. Both start the same way.
Shared setup ──────────── rocky init scaffold the project rocky validate check config + adapter wiring, no network rocky discover ask the source which tables exist │ ├───────────────────────────┐ │ PR-gated deploy │ Local iteration ▼ ▼ rocky plan rocky run │ writes │ plans and applies ▼ .rocky/plans/<id>.json │ in one step you review the SQL and drift │ │ │ ▼ │ rocky apply <id> │ │ │ └────────────┬──────────────┘ ▼ warehouseSteps 1 to 4 below are the shared setup. Steps 5 and 6 are the PR-gated path. The local path is one command, covered after the steps. Step 7 inspects what the run stored.
-
Scaffold the project.
Terminal window rocky init my-pipelinecd my-pipelineThis writes a runnable DuckDB starter project. You get a
rocky.toml, amodels/directory holding_defaults.tomland a samplestg_ordersmodel, and aseeds/seed.sql. Step 2 replaces the generatedrocky.tomlwith the Fivetran to Databricks config below. -
Configure a source, a target, and the pipeline that wires them together.
[adapter.fivetran]type = "fivetran"kind = "discovery"destination_id = "${FIVETRAN_DESTINATION_ID}"api_key = "${FIVETRAN_API_KEY}"api_secret = "${FIVETRAN_API_SECRET}"[adapter.prod]type = "databricks"host = "${DATABRICKS_HOST}"http_path = "${DATABRICKS_HTTP_PATH}"token = "${DATABRICKS_TOKEN}"[pipeline.bronze]type = "replication"strategy = "incremental"timestamp_column = "_fivetran_synced"[pipeline.bronze.source]adapter = "prod"[pipeline.bronze.source.discovery]adapter = "fivetran"[pipeline.bronze.source.schema_pattern]prefix = "src__"separator = "__"components = ["source"][pipeline.bronze.target]adapter = "prod"catalog_template = "warehouse"schema_template = "stage__{source}"[pipeline.bronze.target.governance]auto_create_catalogs = trueauto_create_schemas = true[pipeline.bronze.checks]enabled = truerow_count = truecolumn_match = truefreshness = { threshold_seconds = 86400 }[state]backend = "local"An
[adapter.*]block defines one connection. A[pipeline.*]block ties adapters together into a unit of work. Select between pipelines with--pipeline NAME. Export the environment variables this config references (DATABRICKS_HOST,FIVETRAN_API_KEY, and the rest) before you run Rocky. -
Validate the config.
Terminal window rocky validateChecks config syntax and adapter wiring. It does not call external APIs.
-
Discover the sources.
Terminal window rocky -o table discoverCalls the Fivetran API and lists connectors matching the schema pattern.
-
Build a plan.
Terminal window plan_id=$(rocky plan --filter tenant=acme --output json | jq -r .plan_id)Rocky compiles the pipeline, detects drift, and records a plan keyed by
plan_id. A plan is the exact work Rocky will do, written down before it does any of it. The same inputs always produce the same plan. Read the SQL, the drift actions, and the checks before you commit to a run. See the glossary. -
Apply the plan.
Terminal window rocky apply "$plan_id"Rocky executes the plan in order: discover, create catalogs and schemas, apply drift, copy data, run checks. It prints a versioned JSON result holding the materializations, check results, drift actions, and permissions.
-
Inspect the state.
Terminal window rocky stateShows the stored watermark for every table. A watermark is the timestamp of the newest row Rocky has already loaded. See the glossary.
The one-command path
Section titled “The one-command path”rocky run does the work of steps 5 and 6 in one command. Use it for local iteration and for automation.
rocky run --filter tenant=acmeEither path resumes from the last checkpoint after a failure. Add --resume-latest:
rocky run --filter tenant=acme --resume-latestNext steps
Section titled “Next steps”- Playground: the credential-free DuckDB version of this flow.
- Schema patterns: customize source-to-target mapping.
- Silver layer: add transformation models on top of the bronze copy.
- Data quality checks: assertions that run inline with the load.
- Dagster integration: run Rocky as Dagster assets.