Skip to main content

Ingestion & Connectors

Four hard breaks here — the pipelineStatuses shape, the Databricks Pipeline connection, the log-stream payload and the progress payload — plus a Great Expectations major-version jump.

pipelineStatuses is now an array

Breaking. Affects every client reading ingestion pipelines: dashboards, health checks and SDK users.
The list endpoint now returns the last five statuses per pipeline, which also removes an N+1 query.
Strongly-typed clients throw on the type change. Loosely-typed scripts reading pipelineStatuses.pipelineState silently get undefined or None. The migration also strips any stale single-object pipelineStatuses value that a GET → PUT round-trip may have persisted into stored entity JSON.
Read pipelineStatuses[0] for the latest run, and regenerate SDK models.

Databricks Pipeline connection requires authType

Breaking. Affects Databricks Pipeline services created via API or infrastructure-as-code.
authType accepts three variants: Personal Access Token, DatabricksOAuth and Azure AD.
Stored service configurations are migrated automatically. External ingestion YAMLs are not — any YAML you keep in source control, in a CI job, or on a hybrid runner must be updated by hand or the run fails validation.
Update Terraform, Ansible and scripted service creation, plus any ingestion YAML that sets token at the top level.

Log stream payload changed

Breaking. GET /v1/services/ingestionPipelines/logs/{fqn}/stream/{runId} now emits one JSON event per frame instead of one raw log line.
  • after is an opaque resume cursor — pass it back as the after query parameter to resume without re-reading delivered content.
  • endReason is set only on a complete event. A stream that ends without one was cut short — reconnect from the last cursor.
  • replay: true marks chunks replayed from the server buffer because the stream was already running when the client connected.
  • The path now accepts an id or fully qualified name, and runId is a free-form string, so Airflow’s scheduled__<ts> run ids no longer 404.
Clients parsing data: as log text must parse it as JSON and read event.logs.

Ingestion progress payload changed

Breaking. Affects consumers of GET /v1/services/ingestionPipelines/progress/{fqn}/stream/{runId}.
Progress changes from a flat per-entity-type map to a hierarchical tree. Each node counts its direct children — the root counts databases, a database counts schemas, a schema counts tables.
Progress by entity type. Keys are entity types, values contain total, processed and estimatedRemainingSeconds.
A new service-level stream is added at GET /v1/services/ingestionPipelines/progress/service/{serviceType}/{serviceFqn}/stream, so the Services page can show live progress across all agents for a service. Coverage added in 2.0: database connectors generally (plus Databricks and Unity Catalog explicitly), Airflow REST and dbt Cloud pipeline totals, Looker and Tableau via manual progress mode, and the profiler and auto-classification workflows.

Ingestion images move to Python 3.12

Breaking. Affects anyone who builds a custom ingestion image or installs the ingestion package into their own Python environment.
cp310 wheels will not load. Any custom connector, driver or dependency pinned to a CPython 3.10 wheel must be rebuilt or repinned for CPython 3.12.
Rebuild every custom ingestion image, and re-resolve any private requirements file, before pointing agents at 2.0. If you run the ingestion package directly, move the virtualenv to Python 3.12.
The 3.12 move was also backported into the 1.13 maintenance line after 1.13.3. If you are already running a 1.13.4 build you have made this jump; upgrading from 1.13.0 – 1.13.3 you have not.

Great Expectations 1.3 or later is required

Breaking. Affects the great-expectations plugin.
Great Expectations 0.x is no longer supported, and the separate great-expectations-1xx extra is removed. 1.3 is the floor because Great Expectations only gained the validation-action registry there — on 1.0–1.2 Checkpoint.actions is a closed union that rejects the OpenMetadata action outright. If you adopted the interim 1.x module during 1.13, rename it in your checkpoint — metadata.great_expectations.action1xx and OpenMetadataValidationAction1xx have been removed:
Checkpoints that already reference metadata.great_expectations.action and OpenMetadataValidationAction keep those names, but the surrounding checkpoint definition still has to move to the 1.x API: pass actions as objects to Checkpoint(actions=[...]) rather than as an action_list of dictionaries, and call checkpoint.run() instead of great_expectations checkpoint run.
Test case results now report row counts onlyunexpected_count, missing_count, element_count and observed_value. The percentage values (unexpected_percent, unexpected_percent_total, missing_percent and success_rate) are no longer sent, because OpenMetadata charts every result value of a test case on a single axis and percentages plotted next to row counts were unreadable. Percentages remain derivable as unexpected_count / element_count.
Replace pip install "openmetadata-ingestion[great-expectations-1xx]" with pip install "openmetadata-ingestion[great-expectations]".

Other dependency floors raised

Behavioural. Affects pinned and air-gapped installations.
New plugin extras: prefect and sftp.

New connectors

Additive.

Connector configuration changes

Default filter patterns now exclude system objects

Behavioural. Applies to existing services too.
If you deliberately catalogued Redshift materialised-view backing tables or Kafka internal topics, set an explicit filter pattern — the next ingestion run will otherwise skip them and, with stale deletion enabled, soft-delete them.

SSIS databaseConnection is now optional

Relaxed requirement, supporting file-only SSIS mode. Existing configurations are unaffected.

Snowflake

Other connector changes

Stale-entity cleanup API

New pattern for connectors.
Entities inside the scope that are not in seenFqns are considered stale and soft-deleted by default. Available on 18 entity types.
A seenFqns list truncated by a partial connector run will mark everything else stale. Always exercise dryRun first when wiring this into custom connectors.

Ingestion pipeline management

Connector framework internals

Behavioural. Affects custom connector authors only.
  • mlmodel, metadata, messaging, storage, search and drive connectors migrated to BaseConnection.
  • get_connection_dict dropped from BaseConnection; data-diff gated via a protocol.
  • Duplicated test-connection helpers consolidated; Athena migrated to the declarative test-connection framework; a shared GetPipelines step added to the pipeline test-connection vertical.
  • A ClassifiableEntityAdapter replaces scattered isinstance checks, and a TagRegistry domain layer is introduced.
  • ConnectionsRouterClassBase enables pluggable connection routing in the UI.
Rebuild and re-test custom connectors against the 2.0 ingestion package before upgrading production agents.