OpenLineage Compatibility
Collate accepts OpenLineageRunEvent payloads and converts their input and output datasets into lineage edges. You can send events directly over HTTP or consume events through the OpenLineage pipeline connector.
Choose an Ingestion Method
Use the method that matches where your producer sends events.
The HTTP API runs in the Collate server. It does not require a Kafka broker, Kinesis stream, or scheduled connector workflow. The connector has its own connection and ingestion settings. The HTTP settings below apply to direct event ingestion.
Prepare Collate
Before you send events, complete these steps:- Create or ingest the database services referenced by the events. Ingest their tables and columns too, unless you rely on table creation for mapped namespaces. Column-level lineage needs the columns.
- Obtain an Collate JSON Web Token (JWT) for a user or bot with
EditLineagepermission on thetableresource. - Configure namespace mappings so each dataset resolves to the intended database service.
- To associate events with pipelines, create or ingest the pipelines under the pipeline service named by
defaultPipelineService. Its default name isopenlineage. The server never creates pipelines.
Match Datasets to Catalog Assets
An OpenLineage dataset has anamespace and a name. The namespace identifies its source system. The name identifies the dataset within that system.
For example, this dataset can resolve to the Collate table prod-postgres.analytics.public.orders:
postgresql://warehouse.example.com:5432 to the existing database service prod-postgres through namespaceToServiceMapping. Use the exact namespace emitted by your producer. Include the database and schema in the dataset name when available.
The resolver tries the namespace mapping, datasource facet information, and table-name suffix matches. A namespace is not automatically a Collate service name. Namespace mappings match the exact namespace first, then the longest matching prefix.
A dataset matches only the database services that hold its table. If the table exists in one of several services of the same type, the dataset resolves to that service. If the table exists in more than one of them, the match is ambiguous. The server uses the first match and logs a warning. Add a namespaceToServiceMapping entry to pin the service.
For more information, see Cross Database Lineage.
Configure HTTP Ingestion Settings
An administrator can read the current configuration withGET /api/v1/system/settings/openLineageSettings. To update it, send a settings object to PUT /api/v1/system/settings.
Preserve existing mappings and other settings when you update the configuration. The following example processes completed runs against assets already in the catalog:
eventTypeFilter is absent or empty, the server processes COMPLETE events. It also treats an omitted eventType as eligible when COMPLETE is allowed. Send an explicit event type to make the producer’s intent clear.
autoCreateEntities defaults to true. When it is enabled, the server creates a missing table only when the dataset’s namespace maps to a database service through namespaceToServiceMapping. The server creates the table with the columns in the event’s schema facet. It creates the database and schema with the table if they are missing. It never creates a table without columns, and it never creates a database service. If the namespace has no mapping, the dataset is reported as unresolved.
The server never creates pipelines. Ingest the pipeline first. If the pipeline is missing, the server writes the lineage edge without a pipeline and reports the job as unresolved.
Configure an HTTP Producer
For the OpenLineage Python client, save this configuration asopenlineage.yml:
OPENLINEAGE_CONFIG to the file path if the file is outside the client’s working directory. The api_key authentication provider sends the Collate JWT in the Authorization: Bearer header.
Set the endpoint explicitly. The client’s default /api/v1/lineage path is the native Collate Lineage API, which expects a different request body.
For more information, see the OpenLineage Python Client Configuration. Other clients and integrations have their own configuration syntax. Configure the same URL, endpoint, and bearer token using that client’s HTTP transport options.
Understand the Supported Metadata
The HTTP mapper uses the following event fields and facets:
For column-level lineage, each
inputFields entry must match an input dataset’s namespace and name. Its field must identify a catalog column. Ingest the input tables and columns before sending column mappings.
The mapper can resolve storage datasets to existing container assets by path. It does not create missing containers. Compatibility depends on the dataset names and facets emitted by your integration. An accepted event does not mean that every custom facet becomes Collate metadata.
Send an Event and Verify Lineage
Use the complete request examples in the OpenLineage Events API to send a single event or a batch. After sending an event, checklineageEdgesCreated. A 200 response with status: success can still contain zero edges for a filtered event or an event without inputs or outputs. Failed edge writes are logged and can also leave the count at zero. A single event with unresolved datasets and no edges returns 400.
If no edges appear, check the event type and dataset names first. Then check namespace mappings, existing catalog assets, and the Collate server logs. Use the Get Lineage API or the asset’s Lineage tab to confirm the resulting graph.