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:
- Call the GraphQL API to PATCH/null out the field
- 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 this — EditableSchemaFieldInfo.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:
- ➕
clearFieldDescription GraphQL mutation + resolver + service method
- ➕ "Restore" button in
DescriptionModal.tsx (wired to new mutation)
- ➕ Upgrade
EditedLabel to a more visible provenance Badge with tooltip (who edited + when)
- ➕ "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! 🦦
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.descriptionis 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: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):
1. Provenance badges on column descriptions
Each column description in the schema table should visually indicate its origin:
✏️ Manually edited— wheneditableSchemaMetadata.descriptionis set🔄 From [Source]— when only the ingested description existsThis 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.tsxtoday). 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
Backend Implementation
The data model already supports this —
EditableSchemaFieldInfo.descriptionis already nullable in the Avro schema. Setting it tonullcauses the rendering layer to fall back toschemaMetadata. The gap is API surface and UI wiring.1. New GraphQL mutation
(Alternative: make
description: Stringnullable in the existingupdateDescriptionmutation, treatingnullas "clear" — but a new dedicated mutation is cleaner and avoids breaking changes.)2. Service layer logic
What Already Exists (Good News!)
The codebase is further along than expected:
isEditedflag already computed per fielduseDescriptionRenderer.tsxEditedLabel "(edited)"already rendered in tableSchemaDescriptionField.tsxDescriptionModal.tsxgetFieldDescriptionDetails.tsreturnsisUiAuthored,isPropagated,attributionutils/getFieldDescriptionDetails.tsalchemy-components/The main work is:
clearFieldDescriptionGraphQL mutation + resolver + service methodDescriptionModal.tsx(wired to new mutation)EditedLabelto a more visible provenanceBadgewith tooltip (who edited + when)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
EditableSchemaMetadata(schema)DescriptionModal.tsx,getFieldDescriptionDetails.ts,useDescriptionRenderer.tsx,SchemaDescriptionField.tsxThis issue was filed based on community feedback and analysis of the existing codebase. The implementation path is well-understood — contributions welcome! 🦦