Cómo buscar el linaje multirregión con la automatización del servidor

La API de searchLineageStreaming te permite buscar el linaje de datos de varios niveles y entre regiones, y recibir un grafo unificado como un flujo en tiempo real. Puedes compilar herramientas que recorran arquitecturas de datos amplias, profundas o de varios proyectos sin tiempos de espera de solicitudes. Para obtener más información, consulta Acerca de la búsqueda de linaje multirregional.

Funciones clave

La API de searchLineageStreaming incluye las siguientes funciones:

  • Búsqueda en amplitud: Recorre el grafo de linaje capa por capa en sentido ascendente o descendente desde un conjunto definido de entidades raíz, lo que calcula con precisión la profundidad de cada recurso conectado.

  • Respuesta de transmisión: Ofrece respuestas fragmentadas en tiempo real que contienen subgrafos y vínculos de linaje a medida que el sistema de backend los descubre. A diferencia de las APIs de búsqueda de linaje estándar que pueden agotar el tiempo de espera en grafos grandes de varios proyectos, la transmisión evita que se agote el tiempo de espera de las solicitudes en grafos amplios o profundos.

  • Recorrido de varias ubicaciones y proyectos: Aunque especifiques solo un proyecto de facturación en la ruta de la solicitud, la API descubre y recorre automáticamente los vínculos de linaje en varios proyectos de Google Cloud y ubicaciones geográficas, siempre que tengas los permisos necesarios.

  • Linaje detallado a nivel de columna: Admite la búsqueda de dependencias a nivel de columna entre recursos.

  • Búsquedas con comodines: Te permite recuperar todo el linaje a nivel de columna para una entidad específica agregando el sufijo * al nombre completamente calificado (FQN).

  • Estadísticas de canalización: De manera opcional, recupera metadatos sobre las canalizaciones de transformación (procesos) que crearon los vínculos de linaje.

Antes de comenzar

Antes de realizar solicitudes a la API, asegúrate de cumplir con los siguientes requisitos de seguridad y entorno:

Roles obligatorios

Para obtener los permisos que necesitas para buscar vínculos de linaje de datos, pídele a tu administrador que te otorgue el rol de IAM de Visualizador de linaje de datos (roles/datalineage.viewer) en los proyectos en los que se almacenan los vínculos y procesos de linaje. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para buscar vínculos de linaje de datos. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para buscar vínculos de linaje de datos:

  • Buscar linaje a nivel de entidad: datalineage.events.get en el proyecto en el que se almacena el vínculo
  • Buscar linaje a nivel de columna: datalineage.events.getFields en el proyecto en el que se almacena el vínculo
  • Recupera los detalles completos del proceso de canalización: datalineage.processes.get en el proyecto en el que se almacena el proceso

También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.

Alcance de los recursos

Cuando configures tu solicitud a la API, debes distinguir entre el recurso que se usa para la facturación administrativa y las ubicaciones reales que analiza la API:

  • Ruta de acceso superior de facturación: La ruta de acceso parent en la solicitud de URL debe usar el formato projects/project/locations/location. Este par de proyecto y ubicación específico se usa solo para evaluar las cuotas de facturación y los límites de frecuencia de la API.

  • Ubicaciones de segmentación: Define de forma explícita las regiones que deseas que el backend analice en el array locations dentro del cuerpo de la solicitud.

Configuración de la autenticación

Inicializa una variable de entorno con un token de acceso de Google Cloud para autenticar tus comandos decurl:

export ACCESS_TOKEN=$(gcloud auth print-access-token)

Ejemplos de uso

En los siguientes ejemplos, se usa el extremo datalineage.googleapis.com.

Busca linaje de varios niveles y proyectos

Para ejecutar una búsqueda de linaje profunda que recorra varias profundidades del grafo y analice distintos proyectos de Google Cloud , define las siguientes variables:

  • Establece limits.maxDepth en la profundidad de recorrido objetivo (acepta valores de 1 a 100).

  • Completa el array locations con las regiones de destino que deseas que el backend compare datos mediante referencia cruzada (por ejemplo, ["us", "us-east1"]).

C#

C#

Antes de probar este ejemplo, sigue las instrucciones de configuración para C# que encontrarás en la guía de inicio rápido sobre el linaje de datos con bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Data Lineage para C#.

Para autenticarte en el linaje de datos, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

using Google.Api.Gax.Grpc;
using Google.Api.Gax.ResourceNames;
using Google.Cloud.DataCatalog.Lineage.V1;
using System.Threading.Tasks;

public sealed partial class GeneratedLineageClientSnippets
{
    /// <summary>Snippet for SearchLineageStreaming</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 async Task SearchLineageStreamingRequestObject()
    {
        // Create client
        LineageClient lineageClient = LineageClient.Create();
        // Initialize request argument(s)
        SearchLineageStreamingRequest request = new SearchLineageStreamingRequest
        {
            ParentAsLocationName = LocationName.FromProjectLocation("[PROJECT]", "[LOCATION]"),
            Locations = { "", },
            RootCriteria = new SearchLineageStreamingRequest.Types.RootCriteria(),
            Direction = SearchLineageStreamingRequest.Types.SearchDirection.Unspecified,
            Filters = new SearchLineageStreamingRequest.Types.SearchFilters(),
            Limits = new SearchLineageStreamingRequest.Types.SearchLimits(),
        };
        // Make the request, returning a streaming response
        using LineageClient.SearchLineageStreamingStream response = lineageClient.SearchLineageStreaming(request);

        // Read streaming responses from server until complete
        // Note that C# 8 code can use await foreach
        AsyncResponseStream<SearchLineageStreamingResponse> responseStream = response.GetResponseStream();
        while (await responseStream.MoveNextAsync())
        {
            SearchLineageStreamingResponse responseItem = responseStream.Current;
            // Do something with streamed response
        }
        // The response stream has completed
    }
}

Java

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java que encontrarás en la guía de inicio rápido sobre el linaje de datos con bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Data Lineage para Java.

Para autenticarte en el linaje de datos, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

import com.google.api.gax.rpc.ServerStream;
import com.google.cloud.datacatalog.lineage.v1.LineageClient;
import com.google.cloud.datacatalog.lineage.v1.LocationName;
import com.google.cloud.datacatalog.lineage.v1.SearchLineageStreamingRequest;
import com.google.cloud.datacatalog.lineage.v1.SearchLineageStreamingResponse;
import java.util.ArrayList;

public class AsyncSearchLineageStreaming {

  public static void main(String[] args) throws Exception {
    asyncSearchLineageStreaming();
  }

  public static void asyncSearchLineageStreaming() throws Exception {
    // 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_library
    try (LineageClient lineageClient = LineageClient.create()) {
      SearchLineageStreamingRequest request =
          SearchLineageStreamingRequest.newBuilder()
              .setParent(LocationName.of("[PROJECT]", "[LOCATION]").toString())
              .addAllLocations(new ArrayList<String>())
              .setRootCriteria(SearchLineageStreamingRequest.RootCriteria.newBuilder().build())
              .setFilters(SearchLineageStreamingRequest.SearchFilters.newBuilder().build())
              .setLimits(SearchLineageStreamingRequest.SearchLimits.newBuilder().build())
              .build();
      ServerStream<SearchLineageStreamingResponse> stream =
          lineageClient.searchLineageStreamingCallable().call(request);
      for (SearchLineageStreamingResponse response : stream) {
        // Do something when a response is received.
      }
    }
  }
}

Node.js

Node.js

Antes de probar este ejemplo, sigue las instrucciones de configuración para Node.js que encontrarás en la guía de inicio rápido sobre el linaje de datos con bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Data Lineage para Node.js.

Para autenticarte en el linaje de datos, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

/**
 * 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 project and location to initiate the search from.
 */
// const parent = 'abc123'
/**
 *  Required. The locations to search in.
 */
// const locations = ['abc','def']
/**
 *  Required. Criteria for the root of the search.
 */
// const rootCriteria = {}
/**
 *  Required. Direction of the search.
 */
// const direction = {}
/**
 *  Optional. Filters for the search.
 */
// const filters = {}
/**
 *  Optional. Limits for the search.
 */
// const limits = {}

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

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

async function callSearchLineageStreaming() {
  // Construct request
  const request = {
    parent,
    locations,
    rootCriteria,
    direction,
  };

  // Run request
  const stream = await lineageClient.searchLineageStreaming(request);
  stream.on('data', (response) => { console.log(response) });
  stream.on('error', (err) => { throw(err) });
  stream.on('end', () => { /* API call completed */ });
}

callSearchLineageStreaming();

Python

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python que encontrarás en la guía de inicio rápido sobre el linaje de datos con bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Data Lineage para Python.

Para autenticarte en el linaje de datos, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

# 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_search_lineage_streaming():
    # Create a client
    client = datacatalog_lineage_v1.LineageClient()

    # Initialize request argument(s)
    request = datacatalog_lineage_v1.SearchLineageStreamingRequest(
        parent="parent_value",
        locations=["locations_value1", "locations_value2"],
        direction="UPSTREAM",
    )

    # Make the request
    stream = client.search_lineage_streaming(request=request)

    # Handle the response
    for response in stream:
        print(response)

Ruby

Ruby

Antes de probar este ejemplo, sigue las instrucciones de configuración para Ruby que encontrarás en la guía de inicio rápido sobre el linaje de datos con bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Data Lineage para Ruby.

Para autenticarte en el linaje de datos, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

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

##
# Snippet for the search_lineage_streaming 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#search_lineage_streaming.
#
def search_lineage_streaming
  # 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::SearchLineageStreamingRequest.new

  # Call the search_lineage_streaming method to start streaming.
  output = client.search_lineage_streaming request

  # The returned object is a streamed enumerable yielding elements of type
  # ::Google::Cloud::DataCatalog::Lineage::V1::SearchLineageStreamingResponse
  output.each do |current_response|
    p current_response
  end
end

REST

Para buscar el linaje de datos, usa el método searchLineageStreaming.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Es el ID del proyecto de Google Cloud que se usa para la evaluación de cuotas y la facturación administrativa.
  • LOCATION_ID: Es la ubicación de Google Cloud , como us-central1.
  • SOURCE_PROJECT_ID: Es el ID del proyecto de Google Cloud en el que se encuentra la tabla de origen.
  • DATASET_ID: el ID del conjunto de datos de BigQuery.
  • TABLE_ID: Es el ID de la tabla de BigQuery.

Método HTTP y URL:

POST https://datalineage.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID:searchLineageStreaming

Cuerpo JSON de la solicitud:

{
  "parent": "projects/PROJECT_ID/locations/LOCATION_ID",
  "locations": [
    "LOCATION_ID",
    "us-east1",
    "us-central1"
  ],
  "rootCriteria": {
    "entities": {
      "entities": [
        {
          "fullyQualifiedName": "bigquery:SOURCE_PROJECT_ID.DATASET_ID.TABLE_ID"
        }
      ]
    }
  },
  "direction": "DOWNSTREAM",
  "limits": {
    "maxDepth": 10,
    "maxResults": 5000
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "links": [
    {
      "source": {
        "fullyQualifiedName": "bigquery:project-prod.dataset.source_table"
      },
      "target": {
        "fullyQualifiedName": "bigquery:project-prod.dataset.target_table"
      },
      "depth": 1,
      "location": "us"
    }
  ]
}

Busca varias ubicaciones geográficas

Puedes limitar o expandir el análisis del gráfico de linaje modificando las regiones geográficas que se pasan dentro del campo de array repetido locations.

C#

C#

Antes de probar este ejemplo, sigue las instrucciones de configuración para C# que encontrarás en la guía de inicio rápido sobre el linaje de datos con bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Data Lineage para C#.

Para autenticarte en el linaje de datos, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

using Google.Api.Gax.Grpc;
using Google.Api.Gax.ResourceNames;
using Google.Cloud.DataCatalog.Lineage.V1;
using System.Threading.Tasks;

public sealed partial class GeneratedLineageClientSnippets
{
    /// <summary>Snippet for SearchLineageStreaming</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 async Task SearchLineageStreamingRequestObject()
    {
        // Create client
        LineageClient lineageClient = LineageClient.Create();
        // Initialize request argument(s)
        SearchLineageStreamingRequest request = new SearchLineageStreamingRequest
        {
            ParentAsLocationName = LocationName.FromProjectLocation("[PROJECT]", "[LOCATION]"),
            Locations = { "", },
            RootCriteria = new SearchLineageStreamingRequest.Types.RootCriteria(),
            Direction = SearchLineageStreamingRequest.Types.SearchDirection.Unspecified,
            Filters = new SearchLineageStreamingRequest.Types.SearchFilters(),
            Limits = new SearchLineageStreamingRequest.Types.SearchLimits(),
        };
        // Make the request, returning a streaming response
        using LineageClient.SearchLineageStreamingStream response = lineageClient.SearchLineageStreaming(request);

        // Read streaming responses from server until complete
        // Note that C# 8 code can use await foreach
        AsyncResponseStream<SearchLineageStreamingResponse> responseStream = response.GetResponseStream();
        while (await responseStream.MoveNextAsync())
        {
            SearchLineageStreamingResponse responseItem = responseStream.Current;
            // Do something with streamed response
        }
        // The response stream has completed
    }
}

Java

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java que encontrarás en la guía de inicio rápido sobre el linaje de datos con bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Data Lineage para Java.

Para autenticarte en el linaje de datos, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

import com.google.api.gax.rpc.ServerStream;
import com.google.cloud.datacatalog.lineage.v1.LineageClient;
import com.google.cloud.datacatalog.lineage.v1.LocationName;
import com.google.cloud.datacatalog.lineage.v1.SearchLineageStreamingRequest;
import com.google.cloud.datacatalog.lineage.v1.SearchLineageStreamingResponse;
import java.util.ArrayList;

public class AsyncSearchLineageStreaming {

  public static void main(String[] args) throws Exception {
    asyncSearchLineageStreaming();
  }

  public static void asyncSearchLineageStreaming() throws Exception {
    // 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_library
    try (LineageClient lineageClient = LineageClient.create()) {
      SearchLineageStreamingRequest request =
          SearchLineageStreamingRequest.newBuilder()
              .setParent(LocationName.of("[PROJECT]", "[LOCATION]").toString())
              .addAllLocations(new ArrayList<String>())
              .setRootCriteria(SearchLineageStreamingRequest.RootCriteria.newBuilder().build())
              .setFilters(SearchLineageStreamingRequest.SearchFilters.newBuilder().build())
              .setLimits(SearchLineageStreamingRequest.SearchLimits.newBuilder().build())
              .build();
      ServerStream<SearchLineageStreamingResponse> stream =
          lineageClient.searchLineageStreamingCallable().call(request);
      for (SearchLineageStreamingResponse response : stream) {
        // Do something when a response is received.
      }
    }
  }
}

Node.js

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java que encontrarás en la guía de inicio rápido sobre el linaje de datos con bibliotecas cliente.

Para autenticarte en el linaje de datos, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

/**
 * 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 project and location to initiate the search from.
 */
// const parent = 'abc123'
/**
 *  Required. The locations to search in.
 */
// const locations = ['abc','def']
/**
 *  Required. Criteria for the root of the search.
 */
// const rootCriteria = {}
/**
 *  Required. Direction of the search.
 */
// const direction = {}
/**
 *  Optional. Filters for the search.
 */
// const filters = {}
/**
 *  Optional. Limits for the search.
 */
// const limits = {}

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

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

async function callSearchLineageStreaming() {
  // Construct request
  const request = {
    parent,
    locations,
    rootCriteria,
    direction,
  };

  // Run request
  const stream = await lineageClient.searchLineageStreaming(request);
  stream.on('data', (response) => { console.log(response) });
  stream.on('error', (err) => { throw(err) });
  stream.on('end', () => { /* API call completed */ });
}

callSearchLineageStreaming();

Python

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python que encontrarás en la guía de inicio rápido sobre el linaje de datos con bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Data Lineage para Python.

Para autenticarte en el linaje de datos, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

# 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_search_lineage_streaming():
    # Create a client
    client = datacatalog_lineage_v1.LineageClient()

    # Initialize request argument(s)
    request = datacatalog_lineage_v1.SearchLineageStreamingRequest(
        parent="parent_value",
        locations=["locations_value1", "locations_value2"],
        direction="UPSTREAM",
    )

    # Make the request
    stream = client.search_lineage_streaming(request=request)

    # Handle the response
    for response in stream:
        print(response)

Ruby

Ruby

Antes de probar este ejemplo, sigue las instrucciones de configuración para Ruby que encontrarás en la guía de inicio rápido sobre el linaje de datos con bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Data Lineage para Ruby.

Para autenticarte en el linaje de datos, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

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

##
# Snippet for the search_lineage_streaming 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#search_lineage_streaming.
#
def search_lineage_streaming
  # 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::SearchLineageStreamingRequest.new

  # Call the search_lineage_streaming method to start streaming.
  output = client.search_lineage_streaming request

  # The returned object is a streamed enumerable yielding elements of type
  # ::Google::Cloud::DataCatalog::Lineage::V1::SearchLineageStreamingResponse
  output.each do |current_response|
    p current_response
  end
end

REST

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Es el ID del proyecto de Google Cloud que se usa para la facturación administrativa y la evaluación de cuotas.
  • LOCATION_ID: Es la ubicación de Google Cloud , como us-central1.
  • SOURCE_PROJECT_ID: Es el ID del proyecto de Google Cloud en el que se encuentra la tabla de origen.
  • DATASET_ID: el ID del conjunto de datos de BigQuery.
  • TABLE_ID: Es el ID de la tabla de BigQuery.

Método HTTP y URL:

POST https://datalineage.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID:searchLineageStreaming

Cuerpo JSON de la solicitud:

{
  "parent": "projects/PROJECT_ID/locations/LOCATION_ID",
  "locations": [
    "LOCATION_ID",
    "us-east1",
    "us-central1"
  ],
  "rootCriteria": {
    "entities": {
      "entities": [
        {
          "fullyQualifiedName": "bigquery:SOURCE_PROJECT_ID.DATASET_ID.TABLE_ID"
        }
      ]
    }
  },
  "direction": "DOWNSTREAM",
  "limits": {
    "maxDepth": 10,
    "maxResults": 5000
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "links": [
    {
      "source": {
        "fullyQualifiedName": "bigquery:project-prod.dataset.source_table"
      },
      "target": {
        "fullyQualifiedName": "bigquery:project-prod.dataset.target_table"
      },
      "depth": 1,
      "location": "us"
    }
  ]
}

De forma predeterminada, la API omite la información del proceso (maxProcessPerLink se establece de forma predeterminada en 0). Para recuperar los nombres de los recursos de las canalizaciones que crearon tus vínculos de datos, configura limits.maxProcessPerLink como un número entero positivo distinto de cero.

Por ejemplo:

Java

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java que encontrarás en la guía de inicio rápido sobre el linaje de datos con bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Data Lineage para Java.

Para autenticarte en el linaje de datos, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

import com.google.cloud.datacatalog.lineage.v1.LineageClient;
import com.google.cloud.datacatalog.lineage.v1.Process;
import com.google.cloud.datacatalog.lineage.v1.ProcessName;

public class SyncGetProcessProcessname {

  public static void main(String[] args) throws Exception {
    syncGetProcessProcessname();
  }

  public static void syncGetProcessProcessname() throws Exception {
    // 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_library
    try (LineageClient lineageClient = LineageClient.create()) {
      ProcessName name = ProcessName.of("[PROJECT]", "[LOCATION]", "[PROCESS]");
      Process response = lineageClient.getProcess(name);
    }
  }
}

REST

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • BILLING_PROJECT_ID: Es el proyecto de Google Cloud que se usa para la facturación administrativa y la evaluación de cuotas. Proporciona un número o ID del proyecto.
  • LOCATION_ID: Es la ubicación de Google Cloud en la que se realiza la búsqueda de linaje.
  • FULLY_QUALIFIED_NAME: Es el nombre completamente calificado (FQN) de la entidad de destino, en el formato bigquery:PROJECT_ID.DATASET_ID.TABLE_ID.

Método HTTP y URL:

POST https://datalineage.googleapis.com/v1/projects/BILLING_PROJECT_ID/locations/LOCATION_ID:searchLineageStreaming

Cuerpo JSON de la solicitud:

{
  "parent": "projects/BILLING_PROJECT_ID/locations/LOCATION_ID",
  "locations": [
    "LOCATION_ID"
  ],
  "rootCriteria": {
    "entities": {
      "entities": [
        {
          "fullyQualifiedName": "FULLY_QUALIFIED_NAME"
        }
      ]
    }
  },
  "direction": "UPSTREAM",
  "limits": {
    "maxProcessPerLink": 5
  }
}

Para enviar tu solicitud, expande una de estas opciones:

 

Comportamiento de la respuesta: El flujo resultante propaga el campo links[].processes con mensajes de proceso que contienen solo su nombre de recurso del sistema absoluto (como projects/my-project/locations/us/processes/my-process).

Recupera los detalles completos del proceso con una FieldMask

Si necesitas metadatos estructurales completos sobre una canalización (como su displayName, attributes del sistema o origin de ejecución) en lugar de solo su nombre de recurso, debes usar una FieldMask de la API:

  1. Proporciona un valor distinto de cero para limits.maxProcessPerLink.

  2. Agrega un parámetro de consulta fields a la ruta de URL y especifica links.processes.process junto con otros campos obligatorios.

Por ejemplo:

curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-X POST "https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming?fields=links.processes.process,links.source,links.target,links.depth" \
--data '{
  "parent": "projects/my-billing-project/locations/us",
  "locations": ["us"],
  "rootCriteria": {
    "entities": {
      "entities": [{
        "fullyQualifiedName": "bigquery:my-project.dataset.target_table"
      }]
    }
  },
  "direction": "UPSTREAM",
  "limits": {
    "maxProcessPerLink": 5
  }
}'

Busca linajes a nivel de tabla y de columna

Puedes buscar el linaje a nivel de tabla (nivel de recurso) y a nivel de columna (nivel de campo) en una sola solicitud proporcionando varias entidades en la lista rootCriteria.entities.entities:

  • Para el linaje a nivel de tabla, omite el array field.

  • Para el linaje a nivel de columna, especifica una sola columna en el array field.

Por ejemplo:

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     -X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
     --data '{
       "parent": "projects/my-billing-project/locations/us",
       "locations": ["us"],
       "rootCriteria": {
         "entities": {
           "entities": [
             {
               "fullyQualifiedName": "bigquery:my-project.dataset.table_a"
             },
             {
               "fullyQualifiedName": "bigquery:my-project.dataset.table_b",
               "field": ["email"]
             }
           ]
         }
       },
       "direction": "DOWNSTREAM"
     }'

Usa comodines para el linaje a nivel de columna

Para buscar todo el linaje a nivel de columna disponible para una tabla específica sin enumerar cada columna de forma individual, usa el carácter comodín * como el único valor en el array field.

Por ejemplo:

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     -X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
     --data '{
       "parent": "projects/my-billing-project/locations/us",
       "locations": ["us"],
       "rootCriteria": {
         "entities": {
           "entities": [{
             "fullyQualifiedName": "bigquery:my-project.dataset.my_table",
             "field": ["*"]
           }]
         }
       },
       "direction": "DOWNSTREAM"
     }'

Filtra los resultados del linaje

Puedes definir mejor los resultados de la búsqueda de linaje con el bloque filters en el cuerpo de la solicitud.

Filtrar por tipo de dependencia

Para restringir los resultados a tipos de dependencia específicos, como copias directas (EXACT_COPY) o transformaciones como el filtrado y la agrupación (OTHER), usa el filtro dependencyTypes.

Por ejemplo:

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     -X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
     --data '{
       "parent": "projects/my-billing-project/locations/us",
       "locations": ["us"],
       "rootCriteria": {
         "entities": {
           "entities": [{
             "fullyQualifiedName": "bigquery:my-project.dataset.my_table"
           }]
         }
       },
       "direction": "DOWNSTREAM",
       "filters": {
         "dependencyTypes": ["EXACT_COPY"]
       }
     }'

Para asegurarte de que la búsqueda solo devuelva el linaje a nivel de tabla y excluya por completo el linaje a nivel de columna, establece el filtro entitySet en ENTITIES.

Por ejemplo:

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     -X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
     --data '{
       "parent": "projects/my-billing-project/locations/us",
       "locations": ["us"],
       "rootCriteria": {
         "entities": {
           "entities": [{
             "fullyQualifiedName": "bigquery:my-project.dataset.my_table"
           }]
         }
       },
       "direction": "DOWNSTREAM",
       "filters": {
         "entitySet": "ENTITIES"
       }
     }'

Filtrar por intervalo de tiempo

Puedes restringir los resultados de la búsqueda de linaje a un intervalo de tiempo específico.

Por ejemplo, para buscar datos de linaje creados después de una marca de tiempo específica, usa la siguiente solicitud:

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     -X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
     --data '{
       "parent": "projects/my-billing-project/locations/us",
       "locations": ["us"],
       "rootCriteria": {
         "entities": {
           "entities": [{
             "fullyQualifiedName": "bigquery:my-project.dataset.my_table"
           }]
         }
       },
       "direction": "DOWNSTREAM",
       "filters": {
         "timeRange": {
           "startTime": "2026-01-01T00:00:00Z"
         }
       }
     }'

Solución de problemas: Controla las ubicaciones inaccesibles y los gráficos parciales

Debido a que la API de transmisión analiza un conjunto distribuido de proyectos y ubicaciones de forma simultánea, es posible que algunas regiones remotas estén inactivas, no se comuniquen o estén mal configuradas durante la ejecución.

  • Síntoma: El diseño del gráfico de linaje que se muestra parece incompleto o faltan los saltos regionales esperados.

  • Diagnóstico: Para proteger la integridad de los datos, el flujo searchLineageStreamingResponse propaga un campo unreachable dedicado (cadena repetida) con ubicaciones problemáticas, con el formato projects/PROJECT_NUMBER/locations/LOCATION (por ejemplo, projects/123456789/locations/us-east1).

  • Práctica recomendada: Siempre compila tus aplicaciones cliente para inspeccionar el campo unreachable y verificar que los datos estén completos antes de procesar el grafo.

¿Qué sigue?