Skip to content

Feature Request: UI "Restore to Source" button to revert manually-edited column descriptions back to ingested values #18125

Description

@otto-the-otter-bot

Summary

Once a user edits a column description in the DataHub UI, there is currently no way to revert it back to the ingested (source system) description — not without using the GraphQL API or CLI directly. This is a significant usability gap for teams whose source of truth lives in the data source (e.g. Snowflake, BigQuery, dbt), not in the UI.

This was raised by community members in the DataHub Slack (thread: https://datahubspace.slack.com/archives/CV2KB471C/p1782829544891359) and validated by the DataHub team.


Problem Statement

DataHub stores descriptions in two separate aspects:

  • schemaMetadata — ingested from pipelines (read-only, source-of-truth)
  • editableSchemaMetadata — UI edits (takes rendering precedence when set)

Once editableSchemaMetadata.description is set for a field, the UI always shows the manual edit, even if the user wants to go back to the ingested value. The only escape hatch today is:

  1. Call the GraphQL API to PATCH/null out the field
  2. Use the DataHub CLI

Neither option is viable for typical end users. Teams with an "ingestion-only descriptions" policy have no UI path to enforce or recover from accidental edits.


Proposed Solution

UX Design

Terminology (optimized for non-power users):

  • "Restore source description"
  • "Use [Snowflake / dbt / BigQuery] description" (when source name is available)
  • "Remove my edit"
  • ❌ Avoid: "revert editableSchemaMetadata", "clear UI override", "reset ingested description"

1. Provenance badges on column descriptions

Each column description in the schema table should visually indicate its origin:

  • ✏️ Manually edited — when editableSchemaMetadata.description is set
  • 🔄 From [Source] — when only the ingested description exists

This teaches the concept passively without requiring user action.

2. "Restore" button on hover / in action menu

When a column has a manually edited description, surface a "Restore from [Source] ↩" action alongside the existing edit (pencil) icon. Only shown when a source description exists to restore to.

3. "Use source description" shortcut inside the edit modal

The edit modal already shows the original ingested description as read-only context (it's in DescriptionModal.tsx today). The missing piece: a "Use this instead ↩" button below the original description that populates it into the editable field (or directly triggers the restore).

4. Lightweight confirmation dialog

Restore description from Snowflake?

The column description will be updated to:
"Email of the registered user"

This replaces your current edit. You can edit it again anytime.

[Cancel]  [Restore from Snowflake]

Backend Implementation

The data model already supports thisEditableSchemaFieldInfo.description is already nullable in the Avro schema. Setting it to null causes the rendering layer to fall back to schemaMetadata. The gap is API surface and UI wiring.

1. New GraphQL mutation

mutation clearFieldDescription($input: ClearFieldDescriptionInput!) {
  clearFieldDescription(input: $input)
}

input ClearFieldDescriptionInput {
  resourceUrn: String!       # dataset URN
  subResource: String!       # field path, e.g. "user_email"
  subResourceType: SubResourceType!  # DATASET_FIELD
}

(Alternative: make description: String nullable in the existing updateDescription mutation, treating null as "clear" — but a new dedicated mutation is cleaner and avoids breaking changes.)

2. Service layer logic

1. Fetch current editableSchemaMetadata aspect for the dataset
2. Find the EditableSchemaFieldInfo entry matching fieldPath
3. Set description = null on that entry
4. If the entry has no other editable metadata (no tags, no glossary terms),
   optionally remove the entire EditableSchemaFieldInfo entry
5. Write back via PATCH (not full overwrite, to preserve other fields' edits)
6. Update lastModified AuditStamp for auditability

⚠️ PATCH is important here — a full overwrite of editableSchemaMetadata would wipe edits on other columns in the same dataset.


What Already Exists (Good News!)

The codebase is further along than expected:

Existing capability Location
isEdited flag already computed per field useDescriptionRenderer.tsx
EditedLabel "(edited)" already rendered in table SchemaDescriptionField.tsx
Original ingested description already shown in edit modal DescriptionModal.tsx
getFieldDescriptionDetails.ts returns isUiAuthored, isPropagated, attribution utils/getFieldDescriptionDetails.ts
Alchemy design system has all needed UI primitives (Badge, Tooltip, Icon, Modal) alchemy-components/

The main work is:

  1. clearFieldDescription GraphQL mutation + resolver + service method
  2. ➕ "Restore" button in DescriptionModal.tsx (wired to new mutation)
  3. ➕ Upgrade EditedLabel to a more visible provenance Badge with tooltip (who edited + when)
  4. ➕ "Restore" quick-action on table row hover

Effort Estimate

This is estimated to be a 2–3 day frontend-heavy PR with a small backend piece. The data model requires no changes.


Related


This issue was filed based on community feedback and analysis of the existing codebase. The implementation path is well-understood — contributions welcome! 🦦

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions