Skip to main content
Version: Preview

Spline

Experimental
Creates:
AssetsLineageRun History

Configure in the UI

This plugin can be configured directly in the Marmot UI with a step-by-step wizard.

View Guide

The Spline plugin discovers Spark applications and their lineage from a Spline server. It reads the Spline consumer API, so it needs no access to the Spark cluster itself.

One Pipeline Per Application

A Pipeline asset is created per Spark application name, not per execution event. A job that runs nightly stays a single asset whose run history grows, instead of producing a new asset on every Spark run. Every run in the window becomes a run history event, with a failed run recorded as FAIL.

Lineage

Spline records the URI Spark read from or wrote to. The plugin resolves those URIs to the assets other Marmot plugins publish, so a Spark job links to the real table or bucket rather than to a copy of it. Each input becomes a Table FEEDS Pipeline edge and the output a Pipeline PRODUCES Table edge.

URIResolves to
jdbc:postgresql://host:port/db:schema.tablePostgreSQL table
jdbc:mysql://host/db:table, jdbc:mariadb://...MySQL or MariaDB table
jdbc:sqlserver://host;databaseName=db:schema.tableSQL Server db.schema.table
jdbc:oracle:thin:@//host:port/service:schema.tableOracle schema.table
jdbc:redshift://..., jdbc:snowflake://...Redshift or Snowflake db.schema.table
s3://bucket/key, s3a://, s3n://S3 bucket
gs://bucket/keyGoogle Cloud Storage bucket
abfss://container@account/...Azure Blob container
hive://db/table or a bare db.tableHive table
delta://path/to/tableDelta Lake table

The table can be appended to a JDBC URI either after a colon or as a table query parameter; both are read. Anything else, including hdfs:// and local file paths, produces no edge. The raw URIs are always kept in the inputs and outputs metadata.

The plugin creates no tables or buckets of its own, so an edge only shows up in Marmot once the plugin that owns the other end has catalogued the asset.

Column Lineage

With include_column_lineage the plugin reads Spline's attribute lineage for every column a run produced and stores it on the pipeline under the column_lineage metadata key as JSON, keyed by the MRN of the table produced. It costs one request per column, capped at 200 columns per execution plan.

Example Configuration


host: "http://spline.internal:8080"
ui_host: "http://spline.internal:9090"
days: 7
max_events: 1000
include_column_lineage: true
tags:
- "spline"
- "spark"

host is the Spline REST gateway root. A /consumer or /producer suffix is stripped, so pasting either API's URL works.

Configuration

The following configuration options are available:

PropertyTypeRequiredDescription
daysintfalseOnly ingest Spark runs from the last N days
external_links[]ExternalLinkfalseExternal links to show on all assets
filterFilterfalseFilter discovered assets by name (regex)
hoststringtrueSpline REST gateway URL, for example http://spline:8080
include_column_lineageboolfalseRead column level lineage for each run
max_eventsintfalseMaximum number of Spark runs to read
page_sizeintfalseNumber of runs to read per request
passwordstringfalsePassword for basic authentication
tagsTagsConfigfalseTags to apply to discovered assets
tokenstringfalseBearer token, as an alternative to basic authentication
ui_hoststringfalseSpline UI URL, used for links back to a run
usernamestringfalseUsername for basic authentication
verify_sslboolfalseVerify the server's TLS certificate

Available Metadata

The following metadata fields are available:

FieldTypeDescription
agent_namestringSpline agent that captured the run
agent_versionstringVersion of the Spline agent
application_ids[]stringRecent Spark application ids, newest first
column_lineagestringColumn level lineage as JSON, keyed by the MRN of the table produced
execution_countintNumber of runs seen in the ingest window
execution_plan_ids[]stringRecent Spline execution plan ids, newest first
frameworkstringFramework that ran the application, for example spark 3.5.0
inputs[]stringRaw data source URIs the application read
last_duration_msint64Duration of the most recent run in milliseconds
last_errorstringError message of the most recent run, when it failed
last_execution_atstringWhen the most recent run finished
last_execution_idstringSpline execution event id of the most recent run
outputs[]stringRaw data source URIs the application wrote
system_namestringSystem that produced the execution plan, for example spark
system_versionstringVersion of that system
urlstringLink to the most recent run in the Spline UI

Each run history event carries these facets:

FieldTypeDescription
appendboolWhether the run appended to the output instead of overwriting it
application_idstringSpark application id of the run
duration_msint64Duration of the run in milliseconds
execution_plan_idstringSpline execution plan the run used
outputstringData source URI the run wrote to