Knowledge Catalog client libraries

This page shows how to get started with the Cloud Client Libraries for the Knowledge Catalog and Data Lineage API. Client libraries make it easier to access Google Cloud APIs from a supported language. Although you can use Google Cloud APIs directly by making raw requests to the server, client libraries provide simplifications that significantly reduce the amount of code you need to write.

Read more about the Cloud Client Libraries and the older Google API Client Libraries in Client libraries explained.

Install the client library

C#

Knowledge Catalog

Install-Package Google.Cloud.Dataplex.V1

Data Lineage

Install-Package Google.Cloud.DataCatalog.Lineage.V1

For more information, see Setting Up a C# Development Environment.

Go

Knowledge Catalog

go get cloud.google.com/go/dataplex/apiv1

Data Lineage

go get cloud.google.com/go/datacatalog/lineage/apiv1

For more information, see Setting Up a Go Development Environment.

Java

Knowledge Catalog

If you are using Maven, add the following to your pom.xml file:

<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-dataplex</artifactId>
    <version>DATAPLEX_LIBRARY_VERSION</version>
</dependency>

If you are using Gradle, add the following to your dependencies:

compile group: 'com.google.cloud', name: 'google-cloud-dataplex', version: 'DATAPLEX_LIBRARY_VERSION'

Data Lineage

If you are using Maven, add the following to your pom.xml file:

<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-datalineage</artifactId>
    <version>DATALINEAGE_LIBRARY_VERSION</version>
</dependency>

If you are using Gradle, add the following to your dependencies:

compile group: 'com.google.cloud', name: 'google-cloud-datalineage', version: 'DATALINEAGE_LIBRARY_VERSION'

For more information, see Setting Up a Java Development Environment.

Node.js

Knowledge Catalog

npm install @google-cloud/dataplex

Data Lineage

npm install @google-cloud/lineage

For more information, see Setting Up a Node.js Development Environment.

PHP

Knowledge Catalog

composer require google/cloud-dataplex

Data Lineage

composer require google/cloud-datacatalog-lineage

For more information, see Using PHP on Google Cloud.

Python

Knowledge Catalog

pip install --upgrade google-cloud-dataplex

Data Lineage

pip install --upgrade google-cloud-datacatalog-lineage

For more information, see Setting Up a Python Development Environment.

Ruby

Knowledge Catalog

gem install google-cloud-dataplex

Data Lineage

gem install google-cloud-data_catalog-lineage

For more information, see Setting Up a Ruby Development Environment.

Set up authentication

To authenticate calls to Google Cloud APIs, client libraries support Application Default Credentials (ADC); the libraries look for credentials in a set of defined locations and use those credentials to authenticate requests to the API. With ADC, you can make credentials available to your application in a variety of environments, such as local development or production, without needing to modify your application code.

For production environments, the way you set up ADC depends on the service and context. For more information, see Set up Application Default Credentials.

For a local development environment, you can set up ADC with the credentials that are associated with your Google Account:

  1. Install the Google Cloud CLI. After installation, initialize the Google Cloud CLI by running the following command:

    gcloud init

    If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  2. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

    If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    A sign-in screen appears. After you sign in, your credentials are stored in the local credential file used by ADC.

Use the client library

The following example shows how to use the client library.

C#

Data Lineage

using Google.Cloud.DataCatalog.Lineage.V1;
using Google.Protobuf.WellKnownTypes;

public sealed partial class GeneratedLineageClientSnippets
{
    /// <summary>Snippet for ProcessOpenLineageRunEvent</summary>
    /// <remarks>
    /// 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/dotnet/docs/reference/help/client-configuration#endpoint.
    /// </remarks>
    public void ProcessOpenLineageRunEventRequestObject()
    {
        // Create client
        LineageClient lineageClient = LineageClient.Create();
        // Initialize request argument(s)
        ProcessOpenLineageRunEventRequest request = new ProcessOpenLineageRunEventRequest
        {
            Parent = "",
            OpenLineage = new Struct(),
        };
        // Make the request
        ProcessOpenLineageRunEventResponse response = lineageClient.ProcessOpenLineageRunEvent(request);
    }
}

Go

Data Lineage


//go:build examples

package main

import (
	"context"

	lineage "cloud.google.com/go/datacatalog/lineage/apiv1"
	lineagepb "cloud.google.com/go/datacatalog/lineage/apiv1/lineagepb"
)

func main() {
	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_Options
	c, err := lineage.NewClient(ctx)
	if err != nil {
		// TODO: Handle error.
	}
	defer c.Close()

	req := &lineagepb.ProcessOpenLineageRunEventRequest{
		// TODO: Fill request struct fields.
		// See https://pkg.go.dev/cloud.google.com/go/datacatalog/lineage/apiv1/lineagepb#ProcessOpenLineageRunEventRequest.
	}
	resp, err := c.ProcessOpenLineageRunEvent(ctx, req)
	if err != nil {
		// TODO: Handle error.
	}
	// TODO: Use resp.
	_ = resp
}

Java

Knowledge Catalog

import com.google.cloud.dataplex.v1.AspectType;
import com.google.cloud.dataplex.v1.CatalogServiceClient;
import com.google.cloud.dataplex.v1.LocationName;
import java.util.List;

public class CreateAspectType {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    // Available locations: https://cloud.google.com/dataplex/docs/locations
    String location = "MY_LOCATION";
    String aspectTypeId = "MY_ASPECT_TYPE_ID";

    AspectType.MetadataTemplate aspectField =
        AspectType.MetadataTemplate.newBuilder()
            // The name must follow regex ^(([a-zA-Z]{1})([\\w\\-_]{0,62}))$
            // That means name must only contain alphanumeric character or dashes or underscores,
            // start with an alphabet, and must be less than 63 characters.
            .setName("name_of_the_field")
            // Metadata Template is recursive structure,
            // primitive types such as "string" or "integer" indicate leaf node,
            // complex types such as "record" or "array" would require nested Metadata Template
            .setType("string")
            .setIndex(1)
            .setAnnotations(
                AspectType.MetadataTemplate.Annotations.newBuilder()
                    .setDescription("description of the field")
                    .build())
            .setConstraints(
                AspectType.MetadataTemplate.Constraints.newBuilder()
                    // Specifies if field will be required in Aspect Type.
                    .setRequired(true)
                    .build())
            .build();
    List<AspectType.MetadataTemplate> aspectFields = List.of(aspectField);
    AspectType createdAspectType =
        createAspectType(projectId, location, aspectTypeId, aspectFields);
    System.out.println("Successfully created aspect type: " + createdAspectType.getName());
  }

  // Method to create Aspect Type located in projectId, location and with aspectTypeId and
  // aspectFields specifying schema of the Aspect Type
  public static AspectType createAspectType(
      String projectId,
      String location,
      String aspectTypeId,
      List<AspectType.MetadataTemplate> aspectFields)
      throws Exception {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (CatalogServiceClient client = CatalogServiceClient.create()) {
      LocationName locationName = LocationName.of(projectId, location);
      AspectType aspectType =
          AspectType.newBuilder()
              .setDescription("description of the aspect type")
              .setMetadataTemplate(
                  AspectType.MetadataTemplate.newBuilder()
                      // The name must follow regex ^(([a-zA-Z]{1})([\\w\\-_]{0,62}))$
                      // That means name must only contain alphanumeric character or dashes or
                      // underscores, start with an alphabet, and must be less than 63 characters.
                      .setName("name_of_the_template")
                      .setType("record")
                      // Aspect Type fields, that themselves are Metadata Templates
                      .addAllRecordFields(aspectFields)
                      .build())
              .build();
      return client.createAspectTypeAsync(locationName, aspectType, aspectTypeId).get();
    }
  }
}

Node.js

Knowledge Catalog

/**
 * 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 resource name of the AspectType, of the form:
 *  projects/{project_number}/locations/{location_id}
 *  where `location_id` refers to a Google Cloud region.
 */
// const parent = 'abc123'
/**
 *  Required. AspectType identifier.
 */
// const aspectTypeId = 'abc123'
/**
 *  Required. AspectType Resource.
 */
// const aspectType = {}
/**
 *  Optional. The service validates the request without performing any
 *  mutations. The default is false.
 */
// const validateOnly = true

// Imports the Dataplex library
const {CatalogServiceClient} = require('@google-cloud/dataplex').v1;

// Instantiates a client
const dataplexClient = new CatalogServiceClient();

async function callCreateAspectType() {
  // Construct request
  const request = {
    parent,
    aspectTypeId,
    aspectType,
  };

  // Run request
  const [operation] = await dataplexClient.createAspectType(request);
  const [response] = await operation.promise();
  console.log(response);
}

callCreateAspectType();

Data Lineage

/**
 * 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 name of the project and its location that should own the
 *  process, run, and lineage event.
 */
// const parent = 'abc123'
/**
 *  Required. OpenLineage message following OpenLineage format:
 *  https://github.com/OpenLineage/OpenLineage/blob/main/spec/OpenLineage.json
 */
// const openLineage = {}
/**
 *  Optional. A unique identifier for this request. Restricted to 36 ASCII
 *  characters. A random UUID is recommended. This request is idempotent only
 *  if a `request_id` is provided.
 */
// const requestId = 'abc123'

// Imports the Lineage library
const {LineageClient} = require('@google-cloud/lineage').v1;

// Instantiates a client
const lineageClient = new LineageClient();

async function callProcessOpenLineageRunEvent() {
  // Construct request
  const request = {
    parent,
    openLineage,
  };

  // Run request
  const response = await lineageClient.processOpenLineageRunEvent(request);
  console.log(response);
}

callProcessOpenLineageRunEvent();

PHP

Knowledge Catalog

use Google\ApiCore\ApiException;
use Google\ApiCore\OperationResponse;
use Google\Cloud\Dataplex\V1\AspectType;
use Google\Cloud\Dataplex\V1\AspectType\MetadataTemplate;
use Google\Cloud\Dataplex\V1\Client\CatalogServiceClient;
use Google\Cloud\Dataplex\V1\CreateAspectTypeRequest;
use Google\Rpc\Status;

/**
 * Creates an AspectType.
 *
 * @param string $formattedParent                The resource name of the AspectType, of the form:
 *                                               projects/{project_number}/locations/{location_id}
 *                                               where `location_id` refers to a Google Cloud region. Please see
 *                                               {@see CatalogServiceClient::locationName()} for help formatting this field.
 * @param string $aspectTypeId                   AspectType identifier.
 * @param string $aspectTypeMetadataTemplateName The name of the field.
 * @param string $aspectTypeMetadataTemplateType The datatype of this field. The following values are supported:
 *
 *                                               Primitive types:
 *
 *                                               * string
 *                                               * int
 *                                               * bool
 *                                               * double
 *                                               * datetime. Must be of the format RFC3339 UTC "Zulu" (Examples:
 *                                               "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z").
 *
 *                                               Complex types:
 *
 *                                               * enum
 *                                               * array
 *                                               * map
 *                                               * record
 */
function create_aspect_type_sample(
    string $formattedParent,
    string $aspectTypeId,
    string $aspectTypeMetadataTemplateName,
    string $aspectTypeMetadataTemplateType
): void {
    // Create a client.
    $catalogServiceClient = new CatalogServiceClient();

    // Prepare the request message.
    $aspectTypeMetadataTemplate = (new MetadataTemplate())
        ->setName($aspectTypeMetadataTemplateName)
        ->setType($aspectTypeMetadataTemplateType);
    $aspectType = (new AspectType())
        ->setMetadataTemplate($aspectTypeMetadataTemplate);
    $request = (new CreateAspectTypeRequest())
        ->setParent($formattedParent)
        ->setAspectTypeId($aspectTypeId)
        ->setAspectType($aspectType);

    // Call the API and handle any network failures.
    try {
        /** @var OperationResponse $response */
        $response = $catalogServiceClient->createAspectType($request);
        $response->pollUntilComplete();

        if ($response->operationSucceeded()) {
            /** @var AspectType $result */
            $result = $response->getResult();
            printf('Operation successful with response data: %s' . PHP_EOL, $result->serializeToJsonString());
        } else {
            /** @var Status $error */
            $error = $response->getError();
            printf('Operation failed with error data: %s' . PHP_EOL, $error->serializeToJsonString());
        }
    } catch (ApiException $ex) {
        printf('Call failed with message: %s' . PHP_EOL, $ex->getMessage());
    }
}

/**
 * Helper to execute the sample.
 *
 * This sample 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,
 *    please see the apiEndpoint client configuration option for more details.
 */
function callSample(): void
{
    $formattedParent = CatalogServiceClient::locationName('[PROJECT]', '[LOCATION]');
    $aspectTypeId = '[ASPECT_TYPE_ID]';
    $aspectTypeMetadataTemplateName = '[NAME]';
    $aspectTypeMetadataTemplateType = '[TYPE]';

    create_aspect_type_sample(
        $formattedParent,
        $aspectTypeId,
        $aspectTypeMetadataTemplateName,
        $aspectTypeMetadataTemplateType
    );
}

Python

Knowledge Catalog

from typing import List

from google.cloud import dataplex_v1


# Method to create Aspect Type located in project_id, location and with aspect_type_id and
# aspect_fields specifying schema of the Aspect Type
def create_aspect_type(
    project_id: str,
    location: str,
    aspect_type_id: str,
    aspect_fields: List[dataplex_v1.AspectType.MetadataTemplate],
) -> dataplex_v1.AspectType:
    """Method to create Aspect Type located in project_id, location and with aspect_type_id and
    aspect_fields specifying schema of the Aspect Type"""

    # Initialize client that will be used to send requests across threads. This
    # client only needs to be created once, and can be reused for multiple requests.
    # After completing all of your requests, call the "__exit__()" method to safely
    # clean up any remaining background resources. Alternatively, use the client as
    # a context manager.
    with dataplex_v1.CatalogServiceClient() as client:
        # The resource name of the Aspect Type location
        parent = f"projects/{project_id}/locations/{location}"
        aspect_type = dataplex_v1.AspectType(
            description="description of the aspect type",
            metadata_template=dataplex_v1.AspectType.MetadataTemplate(
                # The name must follow regex ^(([a-zA-Z]{1})([\\w\\-_]{0,62}))$
                # That means name must only contain alphanumeric character or dashes or underscores,
                # start with an alphabet, and must be less than 63 characters.
                name="name_of_the_template",
                type="record",
                # Aspect Type fields, that themselves are Metadata Templates.
                record_fields=aspect_fields,
            ),
        )
        create_operation = client.create_aspect_type(
            parent=parent, aspect_type=aspect_type, aspect_type_id=aspect_type_id
        )
        return create_operation.result(60)


if __name__ == "__main__":
    # TODO(developer): Replace these variables before running the sample.
    project_id = "MY_PROJECT_ID"
    # Available locations: https://cloud.google.com/dataplex/docs/locations
    location = "MY_LOCATION"
    aspect_type_id = "MY_ASPECT_TYPE_ID"
    aspect_field = dataplex_v1.AspectType.MetadataTemplate(
        # The name must follow regex ^(([a-zA-Z]{1})([\\w\\-_]{0,62}))$
        # That means name must only contain alphanumeric character or dashes or underscores,
        # start with an alphabet, and must be less than 63 characters.
        name="name_of_the_field",
        # Metadata Template is recursive structure,
        # primitive types such as "string" or "integer" indicate leaf node,
        # complex types such as "record" or "array" would require nested Metadata Template
        type="string",
        index=1,
        annotations=dataplex_v1.AspectType.MetadataTemplate.Annotations(
            description="description of the field"
        ),
        constraints=dataplex_v1.AspectType.MetadataTemplate.Constraints(
            # Specifies if field will be required in Aspect Type.
            required=True
        ),
    )
    aspect_fields = [aspect_field]

    created_aspect_type = create_aspect_type(
        project_id, location, aspect_type_id, aspect_fields
    )
    print(f"Successfully created aspect type: {created_aspect_type.name}")

Data Lineage

# 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.html
from google.cloud import datacatalog_lineage_v1


def sample_process_open_lineage_run_event():
    # Create a client
    client = datacatalog_lineage_v1.LineageClient()

    # Initialize request argument(s)
    request = datacatalog_lineage_v1.ProcessOpenLineageRunEventRequest(
        parent="parent_value",
    )

    # Make the request
    response = client.process_open_lineage_run_event(request=request)

    # Handle the response
    print(response)

Ruby

Data Lineage

require "google/cloud/data_catalog/lineage/v1"

##
# Snippet for the process_open_lineage_run_event call in the Lineage service
#
# 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/ruby/docs/reference.
#
# This is an auto-generated example demonstrating basic usage of
# Google::Cloud::DataCatalog::Lineage::V1::Lineage::Client#process_open_lineage_run_event.
#
def process_open_lineage_run_event
  # Create a client object. The client can be reused for multiple calls.
  client = Google::Cloud::DataCatalog::Lineage::V1::Lineage::Client.new

  # Create a request. To set request fields, pass in keyword arguments.
  request = Google::Cloud::DataCatalog::Lineage::V1::ProcessOpenLineageRunEventRequest.new

  # Call the process_open_lineage_run_event method.
  result = client.process_open_lineage_run_event request

  # The returned object is of type Google::Cloud::DataCatalog::Lineage::V1::ProcessOpenLineageRunEventResponse.
  p result
end

Additional resources

C#

The following list contains links to more resources related to the client libraries for C#:

Go

The following list contains links to more resources related to the client libraries for Go:

Java

The following list contains links to more resources related to the client libraries for Java:

Node.js

The following list contains links to more resources related to the client libraries for Node.js:

PHP

The following list contains links to more resources related to the client libraries for PHP:

Python

The following list contains links to more resources related to the client libraries for Python:

Ruby

The following list contains links to more resources related to the client libraries for Ruby: