Obtén información sobre los conjuntos de datos

En este documento se describe cómo obtener información o metadatos acerca de los conjuntos de datos en BigQuery.

Puedes obtener información sobre conjuntos de datos de las siguientes maneras:

  • Usa Cloud Console.
  • Usa el comando bq show en la herramienta de línea de comandos de bq.
  • Mediante una llamada al método de la API datasets.get
  • Consulta las vistas INFORMATION_SCHEMA (Beta).
  • Usa bibliotecas cliente.

Permisos necesarios

Como mínimo, para obtener información o metadatos de los conjuntos de datos, debes contar con permisos bigquery.datasets.get. Las siguientes funciones predefinidas de IAM incluyen los permisos bigquery.datasets.get:

  • bigquery.user
  • bigquery.metadataViewer
  • bigquery.dataViewer
  • bigquery.dataOwner
  • bigquery.dataEditor
  • bigquery.admin

Para obtener más información sobre las funciones y permisos de IAM en BigQuery, consulta Control de acceso.

Obtén información sobre conjuntos de datos

Para obtener información sobre los conjuntos de datos en un proyecto:

Console

  1. En el panel Explorador, expande tu proyecto y selecciona un conjunto de datos.

  1. Expande la opción Acciones y haz clic en Abrir. La descripción y los detalles aparecen en el panel de detalles. Las tablas para un conjunto de datos se enumeran con el nombre del conjunto de datos en el panel Explorer.

De forma predeterminada, los conjuntos de datos anónimos se encuentran ocultos de Cloud Console. Para que se muestre información sobre los conjuntos de datos anónimos, usa la herramienta de línea de comandos de bq o la API.

bq

Ejecuta el comando bq show. La marca --format se puede usar para controlar el resultado. Si quieres obtener información sobre un conjunto de datos en un proyecto que no es el predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato: project_id:dataset.

Para mostrar información sobre un conjunto de datos anónimo, usa el comando bq ls --all a fin de hacer una lista de todos los conjuntos de datos y, luego, ingresa el nombre del conjunto de datos anónimo en el comando bq show.

bq show --format=prettyjson project_id:dataset

Reemplaza lo siguiente:

  • project_id es el nombre de tu proyecto.
  • dataset es el nombre del conjunto de datos.

Ejemplos:

Ingresa el siguiente comando para mostrar información sobre mydataset en tu proyecto predeterminado.

bq show --format=prettyjson mydataset

Ingresa el siguiente comando para mostrar información sobre mydataset en myotherproject.

bq show --format=prettyjson myotherproject:mydataset

Ingresa el siguiente comando para mostrar información sobre un conjunto de datos anónimo, _1234abcd56efgh78ijkl1234, en tu proyecto predeterminado.

bq show --format=prettyjson _1234abcd56efgh78ijkl1234

API

Realiza una llamada al método de la API datasets.get y proporciona los parámetros relevantes.

Go

Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Go de BigQuery.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
	"google.golang.org/api/iterator"
)

// printDatasetInfo demonstrates fetching dataset metadata and printing some of it to an io.Writer.
func printDatasetInfo(w io.Writer, projectID, datasetID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	meta, err := client.Dataset(datasetID).Metadata(ctx)
	if err != nil {
		return err
	}

	fmt.Fprintf(w, "Dataset ID: %s\n", datasetID)
	fmt.Fprintf(w, "Description: %s\n", meta.Description)
	fmt.Fprintln(w, "Labels:")
	for k, v := range meta.Labels {
		fmt.Fprintf(w, "\t%s: %s", k, v)
	}
	fmt.Fprintln(w, "Tables:")
	it := client.Dataset(datasetID).Tables(ctx)

	cnt := 0
	for {
		t, err := it.Next()
		if err == iterator.Done {
			break
		}
		cnt++
		fmt.Fprintf(w, "\t%s\n", t.TableID)
	}
	if cnt == 0 {
		fmt.Fprintln(w, "\tThis dataset does not contain any tables.")
	}
	return nil
}

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

import com.google.api.gax.paging.Page;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQuery.TableListOption;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;
import com.google.cloud.bigquery.DatasetId;
import com.google.cloud.bigquery.Table;

public class GetDatasetInfo {

  public static void runGetDatasetInfo() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    getDatasetInfo(projectId, datasetName);
  }

  public static void getDatasetInfo(String projectId, String datasetName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
      DatasetId datasetId = DatasetId.of(projectId, datasetName);
      Dataset dataset = bigquery.getDataset(datasetId);

      // View dataset properties
      String description = dataset.getDescription();
      System.out.println(description);

      // View tables in the dataset
      // For more information on listing tables see:
      // https://javadoc.io/static/com.google.cloud/google-cloud-bigquery/0.22.0-beta/com/google/cloud/bigquery/BigQuery.html
      Page<Table> tables = bigquery.listTables(datasetName, TableListOption.pageSize(100));

      tables.iterateAll().forEach(table -> System.out.print(table.getTableId().getTable() + "\n"));

      System.out.println("Dataset info retrieved successfully.");
    } catch (BigQueryException e) {
      System.out.println("Dataset info not retrieved. \n" + e.toString());
    }
  }
}

Node.js

Antes de probar este ejemplo, sigue las instrucciones de configuración para Node.js incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la Documentación de referencia de la API de Node.js de BigQuery.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function getDataset() {
  // Retrieves dataset named "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample
   */
  // const datasetId = "my_dataset";

  // Retrieve dataset reference
  const [dataset] = await bigquery.dataset(datasetId).get();

  console.log('Dataset:');
  console.log(dataset.metadata.datasetReference);
}
getDataset();

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.


from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set dataset_id to the ID of the dataset to fetch.
# dataset_id = 'your-project.your_dataset'

dataset = client.get_dataset(dataset_id)  # Make an API request.

full_dataset_id = "{}.{}".format(dataset.project, dataset.dataset_id)
friendly_name = dataset.friendly_name
print(
    "Got dataset '{}' with friendly_name '{}'.".format(
        full_dataset_id, friendly_name
    )
)

# View dataset properties.
print("Description: {}".format(dataset.description))
print("Labels:")
labels = dataset.labels
if labels:
    for label, value in labels.items():
        print("\t{}: {}".format(label, value))
else:
    print("\tDataset has no labels defined.")

# View tables in dataset.
print("Tables:")
tables = list(client.list_tables(dataset))  # Make an API request(s).
if tables:
    for table in tables:
        print("\t{}".format(table.table_id))
else:
    print("\tThis dataset does not contain any tables.")

INFORMATION_SCHEMA

INFORMATION_SCHEMA es una serie de vistas que proporcionan acceso a metadatos sobre conjuntos de datos, rutinas, tablas, vistas, trabajos, reservas y datos de transmisión.

Vista SCHEMATA

Cuando consultas la vista INFORMATION_SCHEMA.SCHEMATA, los resultados de la consulta contienen una fila por cada conjunto de datos en un proyecto al que tiene acceso el usuario actual.

La vista INFORMATION_SCHEMA.SCHEMATA tiene el siguiente esquema:

Nombre de la columna Tipo de datos Valor
CATALOG_NAME STRING El nombre del proyecto que contiene el conjunto de datos
SCHEMA_NAME STRING El nombre del conjunto de datos, también denominado datasetId
SCHEMA_OWNER STRING El valor es siempre NULL
CREATION_TIME TIMESTAMP La hora de creación del conjunto de datos
LAST_MODIFIED_TIME TIMESTAMP La hora de la última modificación del conjunto de datos
LOCATION STRING La ubicación geográfica del conjunto de datos

Ejemplos

En el siguiente ejemplo, se recuperan todas las columnas de la vista INFORMATION_SCHEMA.SCHEMATA, excepto schema_owner, que se reserva para uso futuro. Los metadatos que se muestran corresponden a todos los conjuntos de datos en el proyecto predeterminado: myproject.

Para ejecutar la consulta en un proyecto que no sea el predeterminado, agrega el ID del proyecto al conjunto de datos con el siguiente formato: `project_id`.INFORMATION_SCHEMA.view; por ejemplo, `myproject`.INFORMATION_SCHEMA.SCHEMATA.

Para ejecutar la consulta, haz lo siguiente:

Console

  1. Abre la página de BigQuery en Cloud Console.

    Ir a la página de BigQuery

  2. Ingresa la siguiente consulta de SQL estándar en la casilla Editor de consulta. INFORMATION_SCHEMA requiere sintaxis de SQL estándar. SQL estándar es la sintaxis predeterminada en Cloud Console.

    SELECT
     * EXCEPT(schema_owner)
    FROM
     INFORMATION_SCHEMA.SCHEMATA
    
  3. Haz clic en Ejecutar.

bq

Usa el comando query y especifica la sintaxis de SQL estándar con las marcas --nouse_legacy_sql o --use_legacy_sql=false. Se requiere la sintaxis de SQL estándar para las consultas INFORMATION_SCHEMA.

Para ejecutar la consulta, ingresa lo siguiente:

bq query --nouse_legacy_sql \
'SELECT
   * EXCEPT(schema_owner)
 FROM
   INFORMATION_SCHEMA.SCHEMATA'

El resultado debería ser similar a lo siguiente:

  +----------------+---------------+---------------------+---------------------+------------+
  |  catalog_name  |  schema_name  |    creation_time    | last_modified_time  |  location  |
  +----------------+---------------+---------------------+---------------------+------------+
  | myproject      | mydataset1    | 2018-11-07 19:50:24 | 2018-11-07 19:50:24 | US         |
  | myproject      | mydataset2    | 2018-07-16 04:24:22 | 2018-07-16 04:24:22 | US         |
  | myproject      | mydataset3    | 2018-02-07 21:08:45 | 2018-05-01 23:32:53 | US         |
  +----------------+---------------+---------------------+---------------------+------------+
  

Vista SCHEMATA_OPTIONS

Cuando consultas la vista INFORMATION_SCHEMA.SCHEMATA_OPTIONS, los resultados de la consulta contienen una fila por cada opción de cada rutina en un conjunto de datos.

La vista INFORMATION_SCHEMA.SCHEMATA_OPTIONS tiene el siguiente esquema:

Nombre de la columna Tipo de datos Valor
CATALOG_NAME STRING El nombre del proyecto que contiene el conjunto de datos
SCHEMA_NAME STRING El nombre del conjunto de datos, también llamado datasetId
OPTION_NAME STRING Uno de los valores de nombre de la tabla de opciones
OPTION_TYPE STRING Uno de los valores del tipo de datos en la tabla de opciones
OPTION_VALUE STRING Una de las opciones de valor en la tabla de opciones

Tabla de opciones
OPTION_NAME OPTION_TYPE OPTION_VALUE
default_table_expiration_days FLOAT64 El ciclo de vida predeterminado, en días, de todas las tablas en el conjunto de datos
friendly_name STRING El nombre descriptivo del conjunto de datos
description STRING Una descripción del conjunto de datos
labels ARRAY<STRUCT<STRING, STRING>> Un arreglo de STRUCT que representa las etiquetas del conjunto de datos

Ejemplos

Ejemplo 1:

En el siguiente ejemplo, se recuperan las horas de caducidad de la tabla predeterminada para todos los conjuntos de datos en tu proyecto predeterminado (myproject) mediante una consulta a la vista INFORMATION_SCHEMA.SCHEMATA_OPTIONS.

Para ejecutar la consulta en un proyecto que no sea el predeterminado, agrega el ID del proyecto al conjunto de datos con el siguiente formato: `project_id`.INFORMATION_SCHEMA.view; por ejemplo, `myproject`.INFORMATION_SCHEMA.SCHEMATA_OPTIONS.

Para ejecutar la consulta, haz lo siguiente:

Console

  1. Abre la página de BigQuery en Cloud Console.

    Ir a la página de BigQuery

  2. Ingresa la siguiente consulta de SQL estándar en la casilla Editor de consulta. INFORMATION_SCHEMA requiere sintaxis de SQL estándar. SQL estándar es la sintaxis predeterminada en Cloud Console.

    SELECT
     *
    FROM
     INFORMATION_SCHEMA.SCHEMATA_OPTIONS
    WHERE
     option_name="default_table_expiration_days"
    
  3. Haz clic en Ejecutar.

bq

Usa el comando query y especifica la sintaxis de SQL estándar con las marcas --nouse_legacy_sql o --use_legacy_sql=false. Se requiere la sintaxis de SQL estándar para las consultas INFORMATION_SCHEMA.

Para ejecutar la consulta, ingresa lo siguiente:

bq query --nouse_legacy_sql \
'SELECT
   *
 FROM
   INFORMATION_SCHEMA.SCHEMATA_OPTIONS
 WHERE
   option_name="default_table_expiration_days"'

Los resultados deberían ser similares a lo siguiente:

  +----------------+---------------+-------------------------------+-------------+---------------------+
  |  catalog_name  |  schema_name  |          option_name          | option_type |    option_value     |
  +----------------+---------------+-------------------------------+-------------+---------------------+
  | myproject      | mydataset3    | default_table_expiration_days | FLOAT64     | 0.08333333333333333 |
  | myproject      | mydataset2    | default_table_expiration_days | FLOAT64     | 90.0                |
  | myproject      | mydataset1    | default_table_expiration_days | FLOAT64     | 30.0                |
  +----------------+---------------+-------------------------------+-------------+---------------------+
  

Ejemplo 2:

En el siguiente ejemplo, se recuperan las etiquetas de todos los conjuntos de datos en tu proyecto predeterminado (myproject) mediante una consulta a la vista INFORMATION_SCHEMA.SCHEMATA_OPTIONS.

Para ejecutar la consulta en un proyecto que no sea el predeterminado, agrega el ID del proyecto al conjunto de datos con el siguiente formato: `project_id`.INFORMATION_SCHEMA.view; por ejemplo, `myproject`.INFORMATION_SCHEMA.SCHEMATA_OPTIONS.

Para ejecutar la consulta, haz lo siguiente:

Console

  1. Abre la página de BigQuery en Cloud Console.

    Ir a la página de BigQuery

  2. Ingresa la siguiente consulta de SQL estándar en la casilla Editor de consulta. INFORMATION_SCHEMA requiere sintaxis de SQL estándar. SQL estándar es la sintaxis predeterminada en Cloud Console.

    SELECT
     *
    FROM
     INFORMATION_SCHEMA.SCHEMATA_OPTIONS
    WHERE
     option_name="labels"
    
  3. Haz clic en Ejecutar.

bq

Usa el comando query y especifica la sintaxis de SQL estándar con las marcas --nouse_legacy_sql o --use_legacy_sql=false. Se requiere la sintaxis de SQL estándar para las consultas INFORMATION_SCHEMA.

Para ejecutar la consulta, ingresa lo siguiente:

bq query --nouse_legacy_sql \
'SELECT
   *
 FROM
   INFORMATION_SCHEMA.SCHEMATA_OPTIONS
 WHERE
   option_name="labels"'

Los resultados deberían ser similares a lo siguiente:

  +----------------+---------------+-------------+---------------------------------+------------------------+
  |  catalog_name  |  schema_name  | option_name |          option_type            |      option_value      |
  +----------------+---------------+-------------+---------------------------------+------------------------+
  | myproject      | mydataset1    | labels      | ARRAY<STRUCT<STRING, STRING>>   | [STRUCT("org", "dev")] |
  | myproject      | mydataset2    | labels      | ARRAY<STRUCT<STRING, STRING>>   | [STRUCT("org", "dev")] |
  +----------------+---------------+-------------+---------------------------------+------------------------+
  

Seguridad de los conjuntos de datos

Para controlar el acceso a los conjuntos de datos en BigQuery, consulta Controla el acceso a los conjuntos de datos.

Próximos pasos