Area: Product Issues
Sub-Area: Metadata Management / Dataset Descriptions
Issue
When a user clears or empties a dataset description in the DataHub UI, the original description that was pulled from the source system during ingestion reappears automatically. This behavior leads users to believe the UI edit did not persist, or that there is a bug preventing descriptions from being set to empty. In reality, this is a consequence of DataHub's two-layer description architecture, and resolving it requires clearing both layers independently.
You Might Be Asking
- Why does my dataset description keep coming back after I delete it in the UI?
- Is it a bug that DataHub restores the original description after I clear it?
- How do I permanently remove a dataset description in DataHub?
- Can I set a dataset description to empty using only the DataHub UI?
- Why does clearing the description in the UI not remove the ingested description?
Solution
To fully remove a dataset description from DataHub, you must clear both description layers: the editable (UI) layer and the ingested layer. Follow the steps below.
Understanding the Two Description Layers
DataHub stores dataset descriptions in two independent metadata aspects:
-
DatasetProperties.description— Written by the ingestion pipeline. Contains the description sourced from the external system (e.g., a database column comment, dbt description, etc.). -
EditableDatasetProperties.description— Written by the DataHub UI or GraphQL API. Contains any description a user manually entered or edited after ingestion.
The UI displays descriptions using the following priority order:
-
EditableDatasetProperties.description— shown if a value exists. -
DatasetProperties.description— shown as a fallback when no user-edited description is present.
When you clear the description in the UI, DataHub removes EditableDatasetProperties.description (layer 1). Because DatasetProperties.description (layer 2) remains untouched, it immediately becomes the displayed value — making the ingested description appear to "recover."
This is expected, by-design behavior, not a bug. The separation exists to prevent ingestion pipeline runs from accidentally overwriting descriptions that users have manually curated in the UI.
Step 1 — Clear the Editable (UI) Description
- Navigate to the dataset in the DataHub UI.
- Click the description field and clear the text.
- Save the change.
This removes the value stored in EditableDatasetProperties.description. After this step, the ingested description from DatasetProperties.description will be shown as a fallback.
Step 2 — Clear the Ingested Description via API
To remove the ingested description, send a PATCH request to the DataHub OpenAPI v3 endpoint to set DatasetProperties.description to null.
Replace <your-instance> with your DataHub host and <encoded-dataset-urn> with the URL-encoded URN of your dataset.
PATCH https://<your-instance>/openapi/v3/entity/dataset/<encoded-dataset-urn>/datasetProperties
Content-Type: application/json
{
"patch": [
{
"op": "remove",
"path": "/description"
}
],
"systemMetadata": null
}
After this request succeeds, neither layer will contain a description, and no description will be displayed for the dataset in the UI.
Alternative: Use the DataHub Python SDK (Bulk Operations)
You can also clear DatasetProperties.description in bulk using the DataHub Python SDK. The following example uses the DatasetPropertiesPatchBuilder to remove the description field:
from datahub.ingestion.graph.client import DatahubClientConfig, DataHubGraph
from datahub.metadata.schema_classes import DatasetPropertiesClass
graph = DataHubGraph(DatahubClientConfig(server="https://<your-instance>"))
dataset_urn = "urn:li:dataset:(urn:li:dataPlatform:<platform>,<dataset-name>,<env>)"
# Retrieve current DatasetProperties and overwrite description with None
current_props = graph.get_aspect(dataset_urn, DatasetPropertiesClass)
if current_props:
current_props.description = None
graph.upsert_aspect(dataset_urn, current_props)
Alternative: Remove the Description at the Source and Re-run Ingestion
If the description originates from a source system (e.g., a database comment or dbt description), you can remove the description in the source system and then re-run ingestion. The next ingestion run will write a null value to DatasetProperties.description, effectively clearing the ingested layer. This is the most durable long-term solution because it prevents the description from returning on future ingestion runs.
- If you use the API PATCH approach but do not update the source, the next ingestion run will re-populate
DatasetProperties.descriptionwith the source value.
Additional Notes
- The UI alone cannot set a dataset description to empty when an ingested description also exists. The UI only controls the
EditableDatasetPropertieslayer. This is a deliberate architectural decision to prevent ingestion from overwriting manual curation. - This behavior applies to all DataHub deployments (cloud-managed and on-premise) and has been part of the metadata model since the dual-aspect architecture was introduced.
- The same two-layer pattern applies to other editable fields beyond descriptions. Be aware that clearing a field in the UI may reveal an underlying ingested value for those fields as well.
- When submitting PATCH requests via the OpenAPI v3 endpoint, ensure you are using the correct URL-encoded dataset URN and that your API token has write permissions for the target entity.
- If you need to suppress source descriptions without modifying the source system, the API PATCH approach is the only option — but it must be re-applied after each ingestion run that re-introduces the value.
Related Documentation
- DataHub OpenAPI Usage Guide
- Managing Descriptions via API
- DataHub Metadata Ingestion Overview
- GraphQL API — Getting Started
- DataHub Python SDK — Graph Client
Tags: dataset-description, description-revert, DatasetProperties, EditableDatasetProperties, ingestion, metadata-aspects, openapi, patch-api, description-clearing, on-premise