As of April 10, 2026, Dataplex Universal Catalog is now called Knowledge Catalog. The API, client library, CLI, and IAM names remain unchanged. For more information, seeIntroducing the Google Cloud Knowledge Catalog.
Manage data productsStay organized with collectionsSave and categorize content based on your preferences.
This document is intended for data product owners who want to update, delete,
and grant access to data products in Knowledge Catalog (formerly Dataplex Universal Catalog).
For more information about the architecture and key concepts of
data products, seeAbout data products.
Before you begin
Enable the Dataplex, BigQuery APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM
role (roles/serviceusage.serviceUsageAdmin), which
contains theserviceusage.services.enablepermission.Learn how to grant
roles.
These predefined roles contain
the permissions required to manage data products. To see the exact permissions that are
required, expand theRequired permissionssection:
Required permissions
The following permissions are required to manage data products:
Access to BigQuery models within a data product is managed
throughIAM conditionsapplied
to the parent dataset's IAM policy.
If you delete and then recreate a BigQuery model using the
same name, Knowledge Catalog restores the permissions previously
granted to Google Groups or service accounts through the data product.
Set permissions to make data product discoverable
To enable potential consumers to search for, view, and request access to a data
product, data product owners must ensure the product is discoverable by
granting the appropriate IAM roles on the data product resource:
Search for, view, and request access to data products:
Dataplex Data Product Consumer (dataplex.dataProductsConsumer)
View data product definitions and metadata (read-only access):
Dataplex Data Product Viewer (dataplex.dataProductsViewer)
Manage data product access requests
When a data product consumer requests access, the data product owner receives
an email notification. Owners can review, approve, or reject these requests
using either the Google Cloud console or the API.
You can update the basic details (for example, data product name, description,
owner details), assets, access groups, permissions, contract, aspects, and
additional documentation for an existing data product.
//go:build examplespackagemainimport("context"dataplex"cloud.google.com/go/dataplex/apiv1"dataplexpb"cloud.google.com/go/dataplex/apiv1/dataplexpb")funcmain(){ctx:=context.Background()// This snippet has been automatically generated and should be regarded as a code template only.// It will require modifications to work:// - It may require correct/in-range values for request initialization.// - It may require specifying regional endpoints when creating the service client as shown in:// https://pkg.go.dev/cloud.google.com/go#hdr-Client_Optionsc,err:=dataplex.NewDataProductClient(ctx)iferr!=nil{// TODO: Handle error.}deferc.Close()req:=&dataplexpb.UpdateDataProductRequest{// TODO: Fill request struct fields.// See https://pkg.go.dev/cloud.google.com/go/dataplex/apiv1/dataplexpb#UpdateDataProductRequest.}op,err:=c.UpdateDataProduct(ctx,req)iferr!=nil{// TODO: Handle error.}resp,err:=op.Wait(ctx)iferr!=nil{// TODO: Handle error.}// TODO: Use resp._=resp}
importcom.google.cloud.dataplex.v1.DataProduct;importcom.google.cloud.dataplex.v1.DataProductServiceClient;importcom.google.cloud.dataplex.v1.UpdateDataProductRequest;importcom.google.protobuf.FieldMask;publicclassSyncUpdateDataProduct{publicstaticvoidmain(String[]args)throwsException{syncUpdateDataProduct();}publicstaticvoidsyncUpdateDataProduct()throwsException{// This snippet has been automatically generated and should be regarded as a code template only.// It will require modifications to work:// - It may require correct/in-range values for request initialization.// - It may require specifying regional endpoints when creating the service client as shown in// https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_librarytry(DataProductServiceClientdataProductServiceClient=DataProductServiceClient.create()){UpdateDataProductRequestrequest=UpdateDataProductRequest.newBuilder().setDataProduct(DataProduct.newBuilder().build()).setUpdateMask(FieldMask.newBuilder().build()).setValidateOnly(true).build();DataProductresponse=dataProductServiceClient.updateDataProductAsync(request).get();}}}
/*** This snippet has been automatically generated and should be regarded as a code template only.* It will require modifications to work.* It may require correct/in-range values for request initialization.* TODO(developer): Uncomment these variables before running the sample.*//*** Required. The data product to update.* The data product's `name` field is used to identify the data product to* update.*/// const dataProduct = {}/*** Optional. The list of fields to update.* If this is empty or not set, then all the fields will be updated.*/// const updateMask = {}/*** Optional. Validates the request without actually updating the data product.* Default: false.*/// const validateOnly = true// Imports the Dataplex libraryconst{DataProductServiceClient}=require('@google-cloud/dataplex').v1;// Instantiates a clientconstdataplexClient=newDataProductServiceClient();asyncfunctioncallUpdateDataProduct(){// Construct requestconstrequest={dataProduct,};// Run requestconst[operation]=awaitdataplexClient.updateDataProduct(request);const[response]=awaitoperation.promise();console.log(response);}callUpdateDataProduct();
# This snippet has been automatically generated and should be regarded as a# code template only.# It will require modifications to work:# - It may require correct/in-range values for request initialization.# - It may require specifying regional endpoints when creating the service# client as shown in:# https://googleapis.dev/python/google-api-core/latest/client_options.htmlfromgoogle.cloudimportdataplex_v1defsample_update_data_product():# Create a clientclient=dataplex_v1.DataProductServiceClient()# Initialize request argument(s)data_product=dataplex_v1.DataProduct()data_product.display_name="display_name_value"data_product.owner_emails=["owner_emails_value1","owner_emails_value2"]request=dataplex_v1.UpdateDataProductRequest(data_product=data_product,)# Make the requestoperation=client.update_data_product(request=request)print("Waiting for operation to complete...")response=operation.result()# Handle the responseprint(response)
REST
To update the basic details of a data product, use thedataProducts.patchmethod.
For example, to update the description of a data product, send the followingPATCHrequest:
When you delete a Google Cloud project that contains data products, the
associated resources follow the standard Google Cloud deletion lifecycle,
also referred to as a wipeout. For a detailed overview of the technical
processes and timelines governing this behavior, seeData deletion on Google Cloud.
Resource lifecycle during project deletion
The lifecycle of your data products and data assets is managed in two primary
stages following a project deletion request:
Soft deletion (Hiddenstate): Immediately upon initiating project deletion,
all data products and data assets within the project are marked asHidden.
During this 30-day grace period, the metadata is preserved but is no longer
accessible through Dataplex APIs or the Google Cloud console. You can
restore the project and its resources at any point during this window.
Permanent purge (Purgedstate): After the 30-day grace period expires, the
project and all its Knowledge Catalog metadata are permanently
deleted. Knowledge Catalog utilizes an internal row deletion policy to
verifiably purge these records from storage.
Behavior of IAM policies on cross-project resources
A critical operational distinction exists between Knowledge Catalog
metadata and the IAM policies enforced on your underlying
physical data (such as BigQuery datasets or Cloud Storage
buckets).
While Knowledge Catalog metadata within the project is automatically
purged, any IAM bindings applied to data resources located in a
different project (Project B) aren't automatically revoked when the data
product owner project (Project A) is deleted.
Orphaned bindings: Because the physical resources in the target project
remain active, the IAM system doesn't automatically remove the
principal identifiers associated with the deleted project.
Prevent zombie permissions: To ensure complete decommissioning of data
access, manually delete data assets from your data products, or explicitly
strip the associated IAM bindings from your cross-project
resources, before you initiate a project deletion.
Project restoration (Undelete)
If you restore a deleted project within the 30-day grace period,
Knowledge Catalog attempts to restore your resources and their visibility
in the catalog. For cross-project assets, because the underlying
IAM bindings weren't automatically revoked during the deletion
process, data access typically resumes immediately for the restored project.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2026-06-25 UTC."],[],[]]