Cómo buscar con el Data Catalog

En este documento, se explica cómo usar Data Catalog para realizar una búsqueda de elementos de datos, como conjuntos de datos, tablas, vistas y temas de Cloud Pub/Sub en tus proyectos de Google Cloud.

Alcance de la búsqueda

Es posible que los resultados de la búsqueda sean distintos para los usuarios con permisos diferentes. El alcance de los resultados de la búsqueda de Data Catalog se define según la función de IAM y los permisos del usuario. Si un usuario tiene acceso de lectura de metadatos de BigQuery a un objeto, ese objeto aparecerá en los resultados de la búsqueda de Data Catalog.

Por ejemplo, a fin de buscar una tabla, necesitas el permiso bigquery.tables.get para esa tabla. Para buscar un conjunto de datos, necesitas el permiso bigquery.datasets.get. La función de visualizador de metadatos de BigQuery (roles/bigquery.metadataViewer) incluye los permisos mínimos de lectura de metadatos necesarios para que un conjunto de datos, una tabla o una vista aparezca en los resultados de la búsqueda.

Tablas fragmentadas por fecha

Data Catalog agrega tablas fragmentadas por fecha en una entrada lógica única. Esta entrada tiene el mismo esquema que la fragmentación de la tabla con la fecha más reciente y contiene información agregada sobre la cantidad total de fragmentos. La entrada deriva su nivel de acceso al conjunto de datos al que pertenece. La búsqueda de Data Catalog solo muestra estas entradas lógicas si el usuario tiene acceso al conjunto de datos que las contiene. Las tablas individuales compartidas por fecha no serán visibles en la búsqueda de Data Catalog, incluso si están presentes en Data Catalog y se pueden etiquetar.

Cómo buscar recursos de datos

Console

  1. Puedes realizar una búsqueda de recursos de datos desde la página principal de Data Catalog en Google Cloud Console. También puedes realizar selecciones desde los paneles de recursos de datos y Sugerencias de búsqueda para filtrar la búsqueda.

  2. Cuando haces clic en Buscar o seleccionas los paneles recursos de datos y Sugerencias de búsqueda en la página principal de Data Catalog, se abre la página de búsqueda. Si seleccionaste un elemento de datos o una sugerencia de búsqueda en la página principal, se transferirá al panel Tipo o a la expresión del cuadro de búsqueda para calificar tu búsqueda.

  3. Para filtrar por tipos de recursos de datos en particular, haz clic en el cuadro Tipos de datos debajo de la barra de búsqueda y selecciona los tipos que quieras buscar.

    Ejemplo: Para enumerar los conjuntos de datos de viajes en taxi públicos, selecciona el tipo de Conjunto de datos (Dataset), ingresa “viajes” en el cuadro de búsqueda y, luego, haz clic en Buscar. Asegúrate de que la opción Incluir conjuntos de datos públicos (Include public datasets) esté marcada para mostrar estos resultados:

  4. Puedes filtrar tu búsqueda si agregas un keyword:value a los términos de búsqueda en el cuadro de búsqueda:

    KeywordDescripción
    name: Nombre del recurso de datos de coincidencia
    column: Nombre de columna de coincidencia
    description: Descripción de la tabla de coincidencias

  5. Para realizar una búsqueda de etiquetas, agrega uno de los siguientes prefijos de palabra clave de la etiqueta a los términos de búsqueda en el cuadro de búsqueda:

    EtiquetaDescripción
    tag:project-name.tag_template_name Nombre de la etiqueta de coincidencia
    tag.project-name.tag_template_name.key Coincidir con una clave de etiqueta
    tag.project-name.tag_template_name.key:value Coincidir con el par de etiqueta key:string value

Python

"""This application demonstrates how to perform search operations with the
Cloud Data Catalog API.

For more information, see the README.md under /datacatalog and the
documentation at https://cloud.google.com/data-catalog/docs.
"""

import argparse

def search(organization_id, search_string):
    """Searches Data Catalog entries for a given organization."""
    from google.cloud import datacatalog_v1

    datacatalog = datacatalog_v1.DataCatalogClient()

    scope = datacatalog_v1.types.SearchCatalogRequest.Scope()
    scope.include_org_ids.append(organization_id)

    # Alternatively, search using project scopes.
    # scope.include_project_ids.append("my_project_id")

    return datacatalog.search_catalog(
        scope=scope,
        query=search_string)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawDescriptionHelpFormatter
    )

    parser.add_argument('organization_id',
                        help='Your Google Cloud organization ID')
    parser.add_argument('query', help='Your custom query')

    args = parser.parse_args()

    search_results = None

    if args.query:
        search_results = search(args.organization_id, args.query)
    else:
        raise Exception('Please provide valid search input.')

    for result in search_results:
        print(result)

Java

/*
This application demonstrates how to perform search operations with the
Cloud Data Catalog API.

For more information, see the README.md under /datacatalog and the
documentation at https://cloud.google.com/data-catalog/docs.
*/

package com.example.datacatalog;

import com.google.cloud.datacatalog.v1.SearchCatalogRequest;
import com.google.cloud.datacatalog.v1.SearchCatalogRequest.Scope;
import com.google.cloud.datacatalog.v1.SearchCatalogResult;
import com.google.cloud.datacatalog.v1.DataCatalogClient;
import com.google.cloud.datacatalog.v1.DataCatalogClient.SearchCatalogPagedResponse;

public class SearchCatalog {

  public static void searchCatalog() {
    // TODO(developer): Replace these variables before running the sample.
    String orgId = "111111000000";
    String query = "type=dataset";
    searchCatalog(orgId, query);
  }

  /**
   * Search Data Catalog entries for a given organization.
   *
   * @param orgId The organization ID to which the search will be scoped, e.g. '111111000000'.
   * @param query The query, e.g. 'type:dataset'.
   */
  public static void searchCatalog(String orgId, String query) {
    // Create a scope object setting search boundaries to the given organization.
    Scope scope = Scope.newBuilder().addIncludeOrgIds(orgId).build();

    // Alternatively, search using project scopes.
    // Scope scope = Scope.newBuilder().addAllIncludeProjectIds("my-project").build();

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (DataCatalogClient dataCatalogClient = DataCatalogClient.create()) {

      // Search the catalog.
      SearchCatalogRequest searchCatalogRequest =
          SearchCatalogRequest.newBuilder().setScope(scope).setQuery(query).build();
      SearchCatalogPagedResponse response = dataCatalogClient.searchCatalog(searchCatalogRequest);

      System.out.println("Search results:");
      for (SearchCatalogResult result : response.iterateAll()) {
        System.out.println(result);
      }

    } catch (Exception e) {
      System.out.print("Error during SearchCatalog:\n" + e.toString());
    }
  }
}

Node.js

.
// This application demonstrates how to perform search operations with the
// Cloud Data Catalog API.

async function search() {

  // -------------------------------
  // Import required modules.
  // -------------------------------
  const { DataCatalogClient } = require('@google-cloud/datacatalog').v1;
  const datacatalog = new DataCatalogClient();

  // -------------------------------
  // Set your Google Cloud Organization ID.
  // -------------------------------
  // TODO: Replace your organization ID in the next line.
  const organizationId = 111111000000;

  // -------------------------------
  // Set your custom query.
  // -------------------------------
  // TODO: If applicable, edit the query string in the next line.
  const query = 'type=dataset'

  // Create request.
  const scope = {
    includeOrgIds: [organizationId],
    // Alternatively, search using project scopes.
    // includeProjectIds: ['my-project'],
  };

  const request = {
    scope: scope,
    query: query,
  };

  const [result] = await datacatalog.searchCatalog(request);
  return result;
}

search().then(response => { console.log(response) });

LÍNEA DE CMD Y REST

Si no tienes acceso a las bibliotecas cliente de Cloud en tu idioma o quieres probar la API con solicitudes de REST, consulta los siguientes ejemplos y la documentación de la API de REST de Data Catalog.

1. Buscar en el catálogo

Antes de usar cualquiera de los datos de solicitud siguientes, realiza los siguientes reemplazos:

Método HTTP y URL:

POST https://datacatalog.googleapis.com/v1/catalog:search

Cuerpo JSON de la solicitud:

{
  "query":"trips",
  "scope":{
    "includeOrgIds":[
      "organization-id"
    ]
  }
}

Para enviar tu solicitud, expande una de estas opciones:

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

{
  "results":[
    {
      "searchResultType":"ENTRY",
      "searchResultSubtype":"entry.table",
"relativeResourceName":"projects/project-id/locations/US/entryGroups/@bigquery/entries/entry1-id",
      "linkedResource":"//bigquery.googleapis.com/projects/project-id/datasets/demo_dataset/tables/taxi_trips"
    },
    {
      "searchResultType":"ENTRY",
      "searchResultSubtype":"entry.table",
      "relativeResourceName":"projects/project-id/locations/US/entryGroups/@bigquery/entries/entry2-id",
      "linkedResource":"//bigquery.googleapis.com/projects/project-id/datasets/demo_dataset/tables/tlc_yellow_trips_2018"
    }
  ]
}