Metadata Is Operational State: Building a Catalog People Can Trust
Important
DISCOVERY CHECK FAILED: Dataset found. Owner missing. Freshness unknown. Last successful quality check unavailable. Publication blocked until the catalog can answer basic operational questions.
“We have a data catalog” can mean two very different things.
It can mean there is a searchable list of tables with descriptions written six months ago. Or it can mean an operator can answer, in a few seconds:
- What is this dataset for?
- Who owns it?
- When was it last updated?
- Can I trust it for this decision?
- What will break if it changes?
The second one is not a documentation project. It is an operational metadata system.
This is the fourth post in the current Data Engineering run. The previous post described the table state. Now we add the context that lets people use that state safely.
Four Metadata Planes
Metadata becomes useful when its sources and freshness are explicit.
| Plane | Examples | Best source |
|---|---|---|
| Technical | Columns, types, partitions, table format | Catalog or warehouse introspection |
| Operational | Last run, freshness, row count, quality checks | Orchestrator and test results |
| Business | Definition, grain, sensitivity, owner | Data product contract |
| Usage | Queries, dashboards, consumers, popularity | Query history and lineage |
No single system knows all four planes. A reliable catalog joins them by stable dataset identifiers.
|
|
If a field is manually copied from a pipeline log into a wiki, it will become stale at the exact moment an incident needs it.
The Minimum Data Product Card
A catalog record should be small enough to maintain and rich enough to make a decision.
|
|
The record describes the interface, not the implementation. A user should not need to know whether it is built with dbt, Spark, Flink, or a SQL script to understand whether it is appropriate for a decision.
Make Updates Event-Driven
The catalog is trustworthy when pipeline activity updates it automatically.
|
|
A catalog does not need to store every raw event forever. It can project the latest operational state while keeping links to the underlying run, contract, and lineage records.
OpenLineage’s model is useful here because it separates the Job, Run, and Dataset entities and allows facets to carry additional metadata. A data-quality result can be attached to the run. A schema can be attached to a dataset. An ownership record can be associated with the job or dataset. The graph remains interoperable while the catalog adds a human-facing view.
Freshness Is a Claim With Evidence
Never show “fresh” as a static label.
Show the evidence:
|
|
Separate source freshness from warehouse freshness. A table can be loaded successfully while the source has stopped producing data. The distinction was central to the data observability vital signs article.
Trust Should Be a Scorecard, Not a Badge
A green “certified” badge tends to outlive the conditions that justified it. Use a scorecard with explicit evidence instead.
| Dimension | Current evidence | Status |
|---|---|---|
| Ownership | Named team and escalation path | PASS |
| Freshness | Last publication 22 minutes ago | PASS |
| Schema | Contract version 3, no breaking diff | PASS |
| Quality | 8/8 required checks passed | PASS |
| Lineage | 100% table-level, 74% column-level | REVIEW |
| Usage | Two known dashboards, one unknown query pattern | REVIEW |
This avoids confusing “the table exists” with “the table is suitable for every use.”
The Five-Minute Discovery Workflow
When a consumer asks, “Can I use this table?” the catalog should support a repeatable path:
- Read the dataset purpose and grain.
- Check the owner and escalation route.
- Inspect freshness and recent run evidence.
- Review required quality checks and current failures.
- Follow upstream lineage to verify source meaning.
- Follow downstream lineage before proposing a schema change.
- Confirm the contract version and deprecation policy.
If the user must open seven disconnected tools to do this, the information may exist but the system still has a discovery problem.
Ownership Is a Data Field
Ownership cannot be an optional profile photo or an implicit Slack search.
Require it at publication time. Block a production dataset from being marked “trusted” when it has no accountable team, no definition of freshness, or no recovery contact. The goal is not bureaucracy. It is to prevent the data platform from silently assigning every unknown problem to the central data team.
The Metadata Rule
Catalogs earn trust by showing current evidence, not by displaying more fields.
Ingest technical facts from systems, operational facts from runs, business meaning from contracts, and usage from lineage and query history. Make each claim timestamped, attributable, and easy to challenge.
References: OpenLineage overview, OpenLineage facets, and BigQuery INFORMATION_SCHEMA metadata views.
Next: how query shape, pipeline design, and ownership determine the warehouse bill.