Skip to main content

Connect a data source

This is usually the first real thing anyone does. The question behind it is whether your data has to move, and for most sources the answer is no.

Pick the shape first​

You haveUseDoes data move?
A warehouse or lakehouse (Databricks, Snowflake, Fabric, BigQuery)A federated connectionNo. Read in place, with query pushdown
An object store (S3, Azure, Google Cloud Storage)A federated connectionNo. Read in place, in open formats
A database (PostgreSQL, MySQL, SQL Server)A federated connectionNo
A live feed (Kafka, MQTT, a sensor protocol, a webhook)A stream connectorYes. It is a stream; it lands
Files, documents, mailboxes, mediaAn object or file connectionCatalogued always; parsed only if you turn extraction on
A websiteThe web crawlerYes, bounded by depth, page count and robots

Federate first. A connection you do not have to copy is a connection you do not have to keep in sync, re-secure, or explain to an auditor.

What you need​

A workspaceThe connection is scoped to it, not to the node
Credentials stored as a secretYou supply a reference. See below
PermissionTo create a connection in that workspace
The credential never passes through your hands twice

A connection stores a secret reference, not a secret value. The resolution happens inside the service that owns the data path, and the resolved value never comes back.

Anything credential-shaped in a scan descriptor is rejected at any depth: password, secret, token, API key, access key, private key, client secret. If you find yourself pasting a password into a connection body, you are on the wrong path.

Connect a warehouse or lakehouse​

Create the connection with its provider, endpoint and a secret reference, then sync metadata. Schemas, tables and columns land in the catalog. The data does not.

Per-platform specifics, including what each one reads and the caveats worth knowing before you promise anything, are in scanning external platforms. The short version:

  • Databricks takes a personal access token or an OAuth service principal, and reads Unity Catalog. Without Unity Catalog it falls back to information-schema queries rather than reporting an empty estate. Full SQL pushdown.
  • Snowflake takes account, user, warehouse and role. It also supports a nine-source security-posture extraction, which no other connector does.
  • Fabric takes an access token. There is no token exchange, so mint the token yourself, and plan the query path deliberately.

Confirm the connection is real​

Do this before you build anything on it:

  1. Health-checks on create. A connection that fails here is telling you now rather than at query time.
  2. List schemas. Proves authentication and read scope.
  3. Run an actual query. This is the step to insist on. A healthy connection is a handshake; only a query proves the data path.

Connect an object store​

Same shape: provider, bucket or container, and a secret reference. The store is read in place, with format detection for Parquet, CSV, JSON, Avro, ORC, and Iceberg and Delta metadata.

An object store connection is also what a discovery scan runs against today.

Connect a stream​

A stream connector is a running driver, not a query. Configure it, and a worker polls or receives on a schedule.

Over a hundred protocol drivers ship, from Kafka and MQTT through industrial protocols to healthcare, finance and tactical formats. See connectors and ingestion for the inventory.

Two things to set deliberately:

  • Push or pull. A pull connector polls; a push connector is verified per connector at ingress rather than accepting whatever arrives.
  • Where it lands. A stream becomes a governed subject, so classification and workspace scope apply from the first message.

Crawl a website​

Give it seed URLs, a maximum depth and a maximum page count. Both bounds apply, so a site's own link graph cannot run away with your budget.

What you cannot turn off: robots directives are honoured with no override path. A disallow stops the crawl. Politeness is enforced per workspace and per host across the whole estate, so one workspace cannot exhaust another's budget for a domain.

Fetched pages enter the same funnel as any other document, and every fetch lands on an append-only, hash-chained ledger you can read back: pages fetched, bytes, robots skips, rate-limit hits, per domain.

An external-trust source cannot enter a clean room

Crawled content is labelled at ingest, and that label escalates but never downgrades. A source marked external trust is refused entry to a clean room, fail-closed. Plan a crawl into a workspace, not a room.

Turn on extraction, deliberately​

Discovering a file always catalogues it. Understanding it is a separate decision, because cataloguing costs storage and extraction costs inference.

With extraction off, documents, audio and video land as catalog assets and nothing is inferred. With it on, transcripts and entities become signed observations. See unstructured and media ingestion.

Verify it worked​

#CheckWhy this one
1The connection health-checksProves credentials and reachability
2Schemas and tables appear in the catalogProves read scope
3A real query returns rowsProves the data path. Nothing before this does
4Policy appliesQuery as a less-privileged principal and confirm you see less
5Lineage capturedThe read appears on the asset rather than needing reconstruction
6For a stream, messages are arrivingCheck subscription lag and the age of the oldest message, not just that the connector is running

When it does not work​

SymptomMost likely causeWhat to do
Create is rejected for a credentialYou supplied a value, not a referenceStore the secret and reference it. The guard rejects credential-shaped fields at any depth
Health check passes, queries failReachable but not authorised for the objectsCheck the role or grant on the source side, not the connection
A Databricks query is refused by nameThe connection has no SQL warehouseIt refuses rather than posting a statement that cannot succeed. Add a warehouse
Fabric columns come back as an errorDeliberate. It refuses rather than returning an empty column listAn empty schema would read as a valid table with zero columns and sync a wrong schema silently
A connector family answers "unavailable"No backend for that kind on this cellIt names the kind rather than reporting an empty estate. That distinction is the point
A stream connector runs but nothing landsWrong subject, or the push ingress rejected itCheck the oldest-message age. A lag count says how many; the age says how stale
A crawl stops earlyRobots, a bound, or backpressureAll three are visible in the fetch ledger. Robots has no override
Documents catalogue but produce no entitiesExtraction is offThat is the default. It is a separate switch from cataloguing