scheduled
import spark
features = spark.table(
"analytics.orders")
df = features.select("customer_id")
The notebook someone
scheduled two years ago.
It reads a table by name. It is on nobody’s list.
Callisto maps your estate across platforms, column by column, and flags the systems it can’t read yet.
analytics.orders · customer_id
Warehouse & transform
Pipelines & syncs
Consumers
analytics.ordersraw.ordersstg_ordersfct_revenueload_ordersapp.ordersdaily_rolluporders_to_crmrevenue_dailychurn_features.ipynbUnmapped namespace· not yet mappedOne map across all of them.
01 · The problem
Warehouse lineage covers the warehouse. Plans get scoped from it, and what sits around the warehouse is found late.
scheduled
import spark
features = spark.table(
"analytics.orders")
df = features.select("customer_id")
It reads a table by name. It is on nobody’s list.
orders_to_crmReverse-ETL sync · undocumented
Field map
customer_idAccount ID
amountLifetime value
It copies columns into another system.
Change the source and it loses its input.
revenue_dailyTableau extract · dashboard with readers
customer_id
order_date
amount
field
A dashboard with readers, well past the table
you are moving.
02 · Who it’s for
The architect asks what the estate contains. The data lead asks whether the plan covers all of it.
Data architect
“What does this estate
actually contain?”
What keeps them up
A migration plan built on an incomplete map.
What they get
The estate mapped across platforms, with the gaps labelled.
What reads analytics.orders outside dbt?
These systems read analytics.orders outside dbt:
daily_rollupTableau · revenue_dailyorders_to_crmchurn_features (inferred)1 namespace not yet mapped
Enterprise data lead
“What if a system isn’t covered?”
What keeps them up
Warehouse lineage covers the warehouse. Plans get scoped from it, and what sits around the warehouse is found late.
What they get
Callisto maps your estate across platforms, column by column, and flags the systems it can’t read yet.
What is in the estate?
Systems touching analytics.orders
raw.ordersdbt · stg_ordersload_ordersTableau · revenue_dailyUnmapped namespace · not yet mapped1 namespace not yet mapped
03 · How the map is built
Across platforms, down to the column, with the gaps labelled.
dbt
Snowflake
Avro/S3
Airflow
Catalog
raw.ordersSnowflake
orders.avroAvro/S3
load_ordersAirflow
OpenLineage, Snowflake, Avro/S3 and systems that aren’t dbt, in one cross-platform catalog.
stg_orders.sql
select customer_id, amount as order_total from raw.orders
raw.orders
stg_orders
customer_id
amount
customer_id
order_total
parsed
parsed
Column-level lineage is derived by parsing each job’s SQL, with no manual curation.
analytics.ordersSnowflake
churn_features.ipynbNotebook
inferredmatched by name
Unmapped namespacenot yet mapped
Edges matched by name are marked inferred. Systems Callisto can’t read yet are shown as not yet mapped.
Metadata history is versioned, so you can read the map as it stood at an earlier point.
load_ordersV-oldV-new
Duration
Rows
Bytes
Scanned bytes
Lineage shows what depends on what. Runtime history shows how the jobs ran: duration, rows, bytes and scanned bytes across job versions.
04 · How it works
Once the work reaches a pull request, Callisto checks it against the same map.
Read-only, except for the comments it posts on pull requests.
Estate
analytics.orders · customer_id
Sources read
Systems touching analytics.orders
These systems read analytics.orders outside dbt
Illustrative sampleRead-only
05 · Is this you?
Callisto does not move data or run the migration. It is read-only outside the comments it posts.
For consultancies and SIs →Faster estate discovery, and a tool the client keeps using after handover.
Each tool is right about its own platform. The breaks happen in the edges between them.
06 · FAQ
It is the work of finding out what depends on what before you move it. Callisto supplies the map that work relies on: lineage across platforms, with the gaps labelled.
Join waitlist
Join the waitlist to see the map.
Single-tenant deployment. Callisto reads metadata, lineage and run history. It is read-only outside the comments it posts.