Skip to main content
 print this page

Ingest Spark/OpenLineage execution plans

POST 

/jobs/lineage/execution-plans

Spark agent callback that stores job-run lineage. Glue OpenLineage transport posts here (jobLauncher / jobExecutions set spark.openlineage.transport.endpoint to {env}jobs/lineage/execution-plans). The older Spline agent posts a plan object to the same path. Branching is by body shape, not a query param: if producer is present and contains the substring OpenLineage, handle_openlineage_execution_events writes the event JSON under {jobId}/execution-lineage/{executionId}/{lambdaRequestId}.json and, on eventType=COMPLETE, updates execution observability. Job name and execution id are parsed from run.facets.parent.root.job.name or spark.app.name (nativespark-{JobName}-{ExecutionId}). If those cannot be resolved, or the JobName is unknown, the handler logs and still returns HTTP 200. Otherwise handle_execution_plans treats the body as a Spline plan: extraInfo.appName is split on hyphen and the last token is the Glue JobRun id; operations.write / reads / other become Lineage vertices on the executions item; a 30-day metrics row is written; the job access token is deleted. Success Message is always "Updated lineage successfully". The handler has a single except Exception: typed failures (KeyError, GE-1018 metadata update, invalid JSON) surface as HTTP 500 GE-1008, not 400. role_id is read for audit logs only and is not validated.

Request

Responses

Lineage accepted. Message is "Updated lineage successfully" even when the OpenLineage job name cannot be resolved (handler returns early after logging).

Response Headers
    Access-Control-Allow-Origin
    Access-Control-Allow-Methods
    Access-Control-Allow-Headers