Administra vistas

En este documento, se describe cómo administrar vistas en BigQuery. Puedes administrar tus vistas de BigQuery a través de las operaciones siguientes:

Antes de comenzar

Otorga roles de Identity and Access Management (IAM) que les brindan a los usuarios los permisos necesarios para realizar cada tarea de este documento. Los permisos necesarios para realizar una tarea (si existen) se enumeran en la sección “Permisos necesarios” de la tarea.

Actualiza una vista

Después de crear una vista, puedes actualizar las propiedades de vista siguientes:

Permisos necesarios

Para actualizar una vista, necesitas los siguientes permisos de IAM:

  • bigquery.tables.update
  • bigquery.tables.get

Cada una de las siguientes funciones predefinidas de IAM incluye los permisos que necesitas para actualizar una vista:

  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin

Además, si tienes el permiso bigquery.datasets.create, puedes actualizar las tablas y vistas de los conjuntos de datos que crees.

Si actualizas la consulta de SQL de la vista, también debes tener permisos para consultar las tablas a las que hace referencia la consulta de SQL de la vista.

Para obtener más información sobre los roles y los permisos de IAM en BigQuery, consulta Funciones y permisos predefinidos.

Actualiza una consulta de SQL de una vista

Puedes actualizar la consulta de SQL que se usa para definir una vista si sigues estos pasos:

  • Usa la consola de Google Cloud
  • Usa el comando bq update de la herramienta de línea de comandos de bq
  • Llamar al método de la API tables.patch
  • Con las bibliotecas cliente

Puedes cambiar el dialecto de SQL de SQL heredado a GoogleSQL en la API o en la herramienta de línea de comandos de bq. No puedes actualizar una vista SQL heredada a GoogleSQL en la consola de Google Cloud.

Para actualizar la consulta de SQL de una vista, sigue estos pasos:

Console

  1. En el panel Explorador, expande tu proyecto y conjunto de datos y, luego, selecciona la vista.

  2. Haz clic en la pestaña Detalles.

  3. Por encima del cuadro Consulta, haz clic en el botón Editar consulta. Haz clic en Open (Abrir) en el cuadro de diálogo que aparece.

    Editar consulta

  4. Edita la consulta de SQL en el cuadro Query editor (Editor de consultas) y, luego, haz clic en Save view (Guardar vista).

    Guardar vista

  5. Asegúrate de que todos los campos del diálogo Save view (Guardar vista) sean correctos y, luego, haz clic en Save (Guardar).

bq

Ejecuta el comando bq update con la marca --view. Si quieres usar GoogleSQL o actualizar el dialecto de consulta de SQL heredado a GoogleSQL, debes incluir la marca --use_legacy_sql y establecerla en false.

Si tu consulta hace referencia a recursos de funciones externas definidas por el usuario almacenadas en Cloud Storage o en archivos locales, usa la marca --view_udf_resource para especificar esos recursos. La marca --view_udf_resource no se muestra aquí. Para obtener más información sobre cómo usar UDF, consulta Funciones definidas por el usuario de GoogleSQL.

Si actualizas una vista en un proyecto que no es tu proyecto predeterminado, debes agregar el ID del proyecto al nombre del conjunto de datos en el formato siguiente: project_id:dataset.

bq update \
    --use_legacy_sql=false \
    --view_udf_resource=path_to_file \
    --view='query' \
    project_id:dataset.view

Reemplaza lo siguiente:

  • path_to_file: el URI o la ruta de acceso del sistema de archivos local a un archivo de código que se cargará y evaluará de inmediato como un recurso de función definida por el usuario que usa la vista. Repite la marca para especificar varios archivos.
  • query: una consulta de GoogleSQL válida
  • project_id: El ID de tu proyecto
  • dataset: el nombre del conjunto de datos que contiene la vista que deseas actualizar
  • view: el nombre de la vista que deseas actualizar

Ejemplos

Ingresa el comando siguiente si quieres actualizar la consulta de SQL de una vista llamada myview en mydataset. mydataset está en tu proyecto predeterminado. La consulta de ejemplo que se usa para actualizar los datos de consultas de vista del conjunto de datos públicos Datos de nombres de EE.UU.

bq update \
    --use_legacy_sql=false \
    --view \
    'SELECT
      name,
      number
    FROM
      `bigquery-public-data.usa_names.usa_1910_current`
    WHERE
      gender = "M"
    ORDER BY
      number DESC;' \
    mydataset.myview

Ingresa el comando siguiente si quieres actualizar la consulta de SQL de una vista llamada myview en mydataset. mydataset está en myotherproject, no en tu proyecto predeterminado. La consulta de ejemplo que se usa para actualizar la vista solicita información del conjunto de datos públicos de nombres de EE.UU.

bq update \
    --use_legacy_sql=false \
    --view \
    'SELECT
      name,
      number
    FROM
      `bigquery-public-data.usa_names.usa_1910_current`
    WHERE
      gender = "M"
    ORDER BY
      number DESC;' \
    myotherproject:mydataset.myview

API

Puedes actualizar una vista si llamas al método tables.patch con un recurso de tabla que contiene una propiedad view actualizada. Debido a que el método tables.update reemplaza todo el recurso de la tabla, es preferible usar el método tables.patch.

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. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// updateView demonstrates updating the query metadata that defines a logical view.
func updateView(projectID, datasetID, viewID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// viewID := "myview"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

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

	newMeta := bigquery.TableMetadataToUpdate{
		// This example updates a view into the shakespeare dataset to exclude works named after kings.
		ViewQuery: "SELECT word, word_count, corpus, corpus_date FROM `bigquery-public-data.samples.shakespeare` WHERE corpus NOT LIKE '%king%'",
	}

	if _, err := view.Update(ctx, newMeta, meta.ETag); err != nil {
		return err
	}
	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.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.TableInfo;
import com.google.cloud.bigquery.ViewDefinition;

// Sample to update query on a view
public class UpdateViewQuery {

  public static void runUpdateViewQuery() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String viewName = "MY_VIEW_NAME";
    String updateQuery =
        String.format("SELECT TimestampField, StringField FROM %s.%s", datasetName, tableName);
    updateViewQuery(datasetName, viewName, updateQuery);
  }

  public static void updateViewQuery(String datasetName, String viewName, String query) {
    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();

      // Retrieve existing view metadata
      TableInfo viewMetadata = bigquery.getTable(TableId.of(datasetName, viewName));

      // Update view query
      ViewDefinition viewDefinition = viewMetadata.getDefinition();
      viewDefinition.toBuilder().setQuery(query).build();

      // Set metadata
      bigquery.update(viewMetadata.toBuilder().setDefinition(viewDefinition).build());

      System.out.println("View query updated successfully");
    } catch (BigQueryException e) {
      System.out.println("View query was not updated. \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 BigQuery para Node.js.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

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

async function updateViewQuery() {
  // Updates a view named "my_existing_view" in "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_existing_dataset"
  // const tableId = "my_existing_table"
  const dataset = await bigquery.dataset(datasetId);

  // This example updates a view into the USA names dataset to include state.
  const newViewQuery = `SELECT name, state
  FROM \`bigquery-public-data.usa_names.usa_1910_current\`
  LIMIT 10`;

  // Retrieve existing view
  const [view] = await dataset.table(tableId).get();

  // Retrieve existing view metadata
  const [metadata] = await view.getMetadata();

  // Update view query
  metadata.view = newViewQuery;

  // Set metadata
  await view.setMetadata(metadata);

  console.log(`View ${tableId} updated.`);
}

Python

Antes de probar este ejemplo, 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. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

from google.cloud import bigquery

client = bigquery.Client()

view_id = "my-project.my_dataset.my_view"
source_id = "my-project.my_dataset.my_table"
view = bigquery.Table(view_id)

# The source table in this example is created from a CSV file in Google
# Cloud Storage located at
# `gs://cloud-samples-data/bigquery/us-states/us-states.csv`. It contains
# 50 US states, while the view returns only those states with names
# starting with the letter 'M'.
view.view_query = f"SELECT name, post_abbr FROM `{source_id}` WHERE name LIKE 'M%'"

# Make an API request to update the query property of the view.
view = client.update_table(view, ["view_query"])
print(f"Updated {view.table_type}: {str(view.reference)}")

Actualiza la hora de vencimiento de una vista

Puedes establecer una hora de vencimiento de una tabla predeterminada en el nivel de conjunto de datos (que afecta tanto a las tablas como a las vistas) o puedes establecer la hora de vencimiento de una vista cuando esta se crea. Si estableces el vencimiento cuando se crea la vista, se ignora el vencimiento predeterminado de las tablas del conjunto de datos. Si no estableces un vencimiento de la tabla predeterminada en el nivel de conjunto de datos y no estableces un vencimiento cuando se crea la vista, esta nunca vence y debes borrarla de forma manual.

En cualquier momento posterior a la creación de la vista, puedes actualizar la hora de vencimiento de la vista si sigues estos pasos:

  • Usa la consola de Google Cloud
  • Usar una instrucción de lenguaje de definición de datos (DDL) escrita en sintaxis de GoogleSQL
  • Usa el comando bq update de la herramienta de línea de comandos de bq
  • Llamar al método de la API tables.patch
  • Con las bibliotecas cliente

Para actualizar el tiempo de vencimiento de una vista, sigue estos pasos:

Console

  1. En el panel de navegación, selecciona la vista.

  2. En la página de detalles de la vista, haz clic en la pestaña Detalles.

  3. A la derecha de Ver información, haz clic en el ícono de edición (lápiz).

  4. En el cuadro de diálogo Información de la vista, en Vencimiento de la vista, haz clic en Especificar fecha.

  5. En el selector de fecha, ingresa la fecha y hora de vencimiento y, luego, haz clic en Aceptar.

  6. Haz clic en Actualizar. La fecha de vencimiento actualizada aparecerá en la sección Información de la vista.

SQL

Usa la declaración DDL ALTER VIEW SET OPTIONS:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, escribe la siguiente oración:

     ALTER VIEW DATASET_ID.MY_VIEW
     SET OPTIONS (
      expiration_timestamp = TIMESTAMP('NEW_TIMESTAMP'));
    

    Reemplaza lo siguiente:

    • DATASET_ID: el ID del conjunto de datos que contiene la vista
    • MY_VIEW: el nombre de la vista que se actualizará
    • NEW_TIMESTAMP: un valor TIMESTAMP

  3. Haz clic en Ejecutar.

Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.

bq

Ejecuta el comando bq update con la marca --expiration. Si actualizas una vista en un proyecto que no es tu proyecto predeterminado, debes agregar el ID del proyecto al nombre del conjunto de datos en el formato siguiente: project_id:dataset.

bq update \
    --expiration integer \
    project_id:dataset.view

Reemplaza lo siguiente:

  • integer: el ciclo de vida predeterminado (en segundos) de la tabla. El valor mínimo es 3,600 segundos (una hora). El tiempo de caducidad se evalúa según el tiempo actual más el valor del número entero.
  • project_id: El ID de tu proyecto
  • dataset: el nombre del conjunto de datos que contiene la vista que deseas actualizar
  • view: el nombre de la vista que deseas actualizar

Ejemplos

Ingresa el comando siguiente a fin de actualizar la fecha de vencimiento de myview en mydataset a 5 días (432,000 segundos). mydataset está en tu proyecto predeterminado.

bq update \
    --expiration 432000 \
    mydataset.myview

Ingresa el comando siguiente a fin de actualizar la fecha de vencimiento de myview en mydataset a 5 días (432,000 segundos). mydataset está en myotherproject, no en el proyecto predeterminado.

bq update \
    --expiration 432000 \
    myotherproject:mydataset.myview

API

Realiza una llamada al método tables.patch y usa la propiedad expirationTime en el recurso de tabla. Debido a que el método tables.update reemplaza todo el recurso de la tabla, es preferible usar el método tables.patch. Cuando usas la API de REST, el vencimiento de la vista se expresa en milisegundos.

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. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import (
	"context"
	"fmt"
	"time"

	"cloud.google.com/go/bigquery"
)

// updateTableExpiration demonstrates setting the table expiration of a table to a specific point in time
// in the future, at which time it will be deleted.
func updateTableExpiration(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	tableRef := client.Dataset(datasetID).Table(tableID)
	meta, err := tableRef.Metadata(ctx)
	if err != nil {
		return err
	}
	update := bigquery.TableMetadataToUpdate{
		ExpirationTime: time.Now().Add(time.Duration(5*24) * time.Hour), // table expiration in 5 days.
	}
	if _, err = tableRef.Update(ctx, update, meta.ETag); err != nil {
		return err
	}
	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.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

Table beforeTable = bigquery.getTable(datasetName, tableName);

// Set table to expire 5 days from now.
long expirationMillis = DateTime.now().plusDays(5).getMillis();
TableInfo tableInfo = beforeTable.toBuilder()
        .setExpirationTime(expirationMillis)
        .build();
Table afterTable = bigquery.update(tableInfo);

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 BigQuery para Node.js.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

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

async function updateTableExpiration() {
  // Updates a table's expiration.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = 'my_dataset', // Existing dataset
  // const tableId = 'my_table', // Existing table
  // const expirationTime = Date.now() + 1000 * 60 * 60 * 24 * 5 // 5 days from current time in ms

  // Retreive current table metadata
  const table = bigquery.dataset(datasetId).table(tableId);
  const [metadata] = await table.getMetadata();

  // Set new table expiration to 5 days from current time
  metadata.expirationTime = expirationTime.toString();
  const [apiResponse] = await table.setMetadata(metadata);

  const newExpirationTime = apiResponse.expirationTime;
  console.log(`${tableId} expiration: ${newExpirationTime}`);
}

Python

El proceso para actualizar el vencimiento de una vista es el mismo que se usa para actualizar el vencimiento de una tabla.

Antes de probar este ejemplo, 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. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

from google.cloud import bigquery

client = bigquery.Client()

# TODO(dev): Change table_id to the full name of the table you want to update.
table_id = "your-project.your_dataset.your_table_name"

# TODO(dev): Set table to expire for desired days days from now.
expiration = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(
    days=5
)
table = client.get_table(table_id)  # Make an API request.
table.expires = expiration
table = client.update_table(table, ["expires"])  # API request

print(f"Updated {table_id}, expires {table.expires}.")

Actualiza la descripción de una vista

Puedes actualizar la descripción de una vista si sigues estos pasos:

  • Usa la consola de Google Cloud
  • Usar una instrucción de lenguaje de definición de datos (DDL) escrita en sintaxis de GoogleSQL
  • Usa el comando bq update de la herramienta de línea de comandos de bq
  • Llamar al método de la API tables.patch
  • Con las bibliotecas cliente

Para actualizar la descripción de una vista, sigue estos pasos:

Console

Cuando creas una vista con la consola de Google Cloud, no puedes agregar una descripción. Después de crear la vista, puedes agregar una descripción en la página Detalles.

  1. En el panel Explorador, expande tu proyecto y conjunto de datos y, luego, selecciona la vista.

  2. Haz clic en la pestaña Detalles.

  3. Haz clic en el ícono de lápiz junto a Description (Descripción).

    Editar la descripción de la vista

  4. Ingresa una descripción en el cuadro de diálogo. Haz clic en Actualizar para guardar la descripción nueva.

SQL

Usa la declaración DDL ALTER VIEW SET OPTIONS:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, escribe la siguiente oración:

     ALTER VIEW DATASET_ID.MY_VIEW
     SET OPTIONS (
      description = 'NEW_DESCRIPTION');
    

    Reemplaza lo siguiente:

    • DATASET_ID: el ID del conjunto de datos que contiene la vista
    • MY_VIEW: el nombre de la vista que se actualizará
    • NEW_DESCRIPTION: la descripción de la vista nueva

  3. Haz clic en Ejecutar.

Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.

bq

Ejecuta el comando bq update con la marca --description. Si actualizas una vista en un proyecto que no es tu proyecto predeterminado, debes agregar el ID del proyecto al nombre del conjunto de datos en el formato siguiente: [PROJECT_ID]:[DATASET].

bq update \
    --description "description" \
    project_id:dataset.view

Reemplaza lo siguiente:

  • description: el texto que describe la vista entre comillas
  • project_id: el ID de tu proyecto
  • dataset: el nombre del conjunto de datos que contiene la vista que deseas actualizar
  • view: el nombre de la vista que deseas actualizar

Ejemplos

Ingresa el comando siguiente para cambiar la descripción de myview en mydataset a “Descripción de mi vista” (Description of myview). mydataset está en tu proyecto predeterminado.

bq update \
    --description "Description of myview" \
    mydataset.myview

Ingresa el comando siguiente para cambiar la descripción de myview en mydataset a “Descripción de mi vista” (Description of myview). mydataset está en myotherproject, no en el proyecto predeterminado.

bq update \
    --description "Description of myview" \
    myotherproject:mydataset.myview

API

Realiza una llamada al método tables.patch y usa la propiedad description para actualizar la descripción de la vista en el recurso de tabla. Debido a que el método tables.update reemplaza todo el recurso de la tabla, es preferible usar el método tables.patch.

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. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// updateTableDescription demonstrates how to fetch a table's metadata and updates the Description metadata.
func updateTableDescription(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	tableRef := client.Dataset(datasetID).Table(tableID)
	meta, err := tableRef.Metadata(ctx)
	if err != nil {
		return err
	}
	update := bigquery.TableMetadataToUpdate{
		Description: "Updated description.",
	}
	if _, err = tableRef.Update(ctx, update, meta.ETag); err != nil {
		return err
	}
	return nil
}

Java

El proceso para actualizar la descripción de una vista es el mismo que se usa para actualizar la de una tabla.

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.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

// String datasetName = "my_dataset_name";
// String tableName = "my_table_name";
// String newDescription = "new_description";

Table beforeTable = bigquery.getTable(datasetName, tableName);
TableInfo tableInfo = beforeTable.toBuilder()
    .setDescription(newDescription)
    .build();
Table afterTable = bigquery.update(tableInfo);

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 BigQuery para Node.js.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

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

async function updateTableDescription() {
  // Updates a table's description.

  // Retreive current table metadata
  const table = bigquery.dataset(datasetId).table(tableId);
  const [metadata] = await table.getMetadata();

  // Set new table description
  const description = 'New table description.';
  metadata.description = description;
  const [apiResponse] = await table.setMetadata(metadata);
  const newDescription = apiResponse.description;

  console.log(`${tableId} description: ${newDescription}`);
}

Python

El proceso para actualizar la descripción de una vista es el mismo que se usa para actualizar la de una tabla.

Antes de probar este ejemplo, 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. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

# from google.cloud import bigquery
# client = bigquery.Client()
# project = client.project
# dataset_ref = bigquery.DatasetReference(project, dataset_id)
# table_ref = dataset_ref.table('my_table')
# table = client.get_table(table_ref)  # API request

assert table.description == "Original description."
table.description = "Updated description."

table = client.update_table(table, ["description"])  # API request

assert table.description == "Updated description."

Copia vistas

En la actualidad, solo puedes copiar vistas con la consola de Google Cloud.

No puedes copiar vistas con la herramienta de línea de comandos de bq, la API de REST ni las bibliotecas cliente. En su lugar, debes volver a crear la vista en el conjunto de datos de destino. Para ayudarte a volver a crear la vista, puedes usar la herramienta de línea de comandos de bq a fin de copiar la consulta de SQL de la vista.

Permisos necesarios

Para copiar una vista en la consola de Google Cloud, necesitas permisos de IAM en los conjuntos de datos de origen y de destino.

  • En el conjunto de datos de origen, necesitas lo siguiente:

    • bigquery.tables.get
    • bigquery.tables.getData (obligatorio para acceder a las tablas a las que hace referencia la consulta de SQL de la vista)
  • En el conjunto de datos de destino, necesitas lo siguiente:

    • bigquery.tables.create (te permite crear una copia de la vista en el conjunto de datos de destino)

Cada una de las siguientes funciones predefinidas de IAM incluye los permisos que necesitas para copiar una vista:

  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin

Además, si tienes el permiso bigquery.datasets.create, puedes copiar vistas en los conjuntos de datos que crees. También necesitas acceso al conjunto de datos de destino, a menos que tú lo hayas creado.

Para obtener más información sobre los roles y los permisos de IAM en BigQuery, consulta Funciones y permisos predefinidos.

Copiado de una vista

Para copiar una vista, sigue estos pasos:

Console

  1. En el panel Explorador, expande tu proyecto y conjunto de datos y, luego, selecciona la vista.

  2. En el panel de detalles, haz clic en Copiar vista.

  3. En el cuadro de diálogo Copiar vista (Copy view), sigue estos pasos:

    • En la sección Fuente (Source), verifica que el Nombre de proyecto (Project name), el Nombre del conjunto de datos (Dataset name) y el Nombre de la tabla (Table name) sean correctos.
    • En la sección Destino (Destination) sigue estos pasos:

      • En Nombre del proyecto (Project name), elige el proyecto en el que copiarás la vista.
      • En Nombre del conjunto de datos (Dataset name), elige el conjunto de datos que contendrá la vista copiada.
      • En Nombre de la tabla (Table name), ingresa el nombre de la vista. Puedes renombrar la vista si ingresas un nombre de vista nuevo en el cuadro. Si ingresas un nombre nuevo, debes seguir las reglas de nombres de las vistas.

      Cuadro de diálogo Copiar vista

    • Haz clic en Copiar.

bq

La herramienta de línea de comandos bq no admite la copia de vistas. En su lugar, debes volver a crear la vista en el conjunto de datos de destino. A fin de ayudarte a volver a crear la vista, puedes copiar la consulta de SQL que usaste para definir la vista.

Para copiar la consulta de SQL que define una vista, emite el comando bq show. La marca --format se puede usar para controlar el resultado. Si obtienes información sobre una vista en un proyecto que no sea tu proyecto predeterminado, agrega el ID del proyecto al conjunto de datos en el formato siguiente: project_id:dataset. Para escribir las propiedades de la vista en un archivo, agrega > path_to_file al comando.

bq show \
--format=prettyjson \
project_id:dataset.view > path_to_file

En el ejemplo anterior, se ilustra lo siguiente:

  • project_id es el ID del proyecto.
  • dataset es el nombre del conjunto de datos.
  • view es el nombre de la vista.
  • path_to_file es la ruta al archivo de salida en tu máquina local.

Ejemplos:

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

bq show --format=prettyjson mydataset.myview

Ingresa el siguiente comando para mostrar información sobre myview en mydataset. mydataset está en myotherproject, no en tu proyecto predeterminado. Las propiedades de la vista se escriben en un archivo local: /tmp/myview.json.

bq show \
--format=prettyjson \
myotherproject:mydataset.myview > /tmp/myview.json

API

La API de REST no admite la copia de vistas. En su lugar, debes volver a crear la vista en el conjunto de datos de destino. Para obtener información sobre cómo crear una vista con la API de REST, consulta Crea vistas.

Cambiar el nombre de una vista

En la actualidad, puedes cambiar el nombre de una vista solo cuando usas la consola de Google Cloud para copiar vistas. Si deseas obtener instrucciones para renombrar una vista cuando la copias, consulta Copia una vista.

No se puede cambiar el nombre de una vista existente con la herramienta de línea de comandos de bq, la API ni las bibliotecas cliente. En su lugar, debes volver a crear la vista con el nombre nuevo.

Borra vistas

Puedes eliminar una vista mediante:

  • Usa la consola de Google Cloud
  • El comando bq rm de la herramienta de línea de comandos de bq
  • Con una llamada al método tables.delete de la API

Actualmente, con cualquiera de los métodos disponibles, solo puedes borrar una vista a la vez.

Para borrar vistas de manera automática tras un período especificado, debes configurar la fecha de vencimiento predeterminada a nivel de conjunto de datos o configurarla cuando crees la vista.

Cuando borras una vista autorizada, la eliminación de la vista borrada de la vista autorizada de este conjunto de datos puede tardar hasta 24 horas.

Si borras una vista, también se borran los permisos asociados a ella. Cuando vuelvas a crear una vista borrada, también debes volver a configurar cualquier permiso de acceso asociado de forma manual con ella.

Permisos necesarios

Para borrar una tabla, necesitas los siguientes permisos de IAM:

  • bigquery.tables.delete

Cada una de las siguientes funciones predefinidas de IAM incluye los permisos que necesitas para borrar una tabla:

  • roles/bigquery.dataOwner
  • roles/bigquery.dataEditor
  • roles/bigquery.admin

Además, si tienes el permiso bigquery.datasets.create, puedes borrar vistas en los conjuntos de datos que crees.

Para obtener más información sobre los roles y los permisos de IAM en BigQuery, consulta Funciones y permisos predefinidos.

Borrar una vista

Para borrar una vista, haz lo siguiente:

Console

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel Explorador, expande tu proyecto y conjunto de datos y, luego, selecciona la vista.

  3. En el panel de detalles, haz clic en Borrar vista.

  4. Escribe "delete" en el diálogo y haz clic en Borrar para confirmar.

SQL

Usa la declaración DDL DROP VIEW:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, escribe la siguiente oración:

    DROP VIEW mydataset.myview;
    

    Reemplaza lo siguiente:

    • DATASET_ID: el ID del conjunto de datos que contiene la vista
    • MY_VIEW: el nombre de la vista que se actualizará
    • NEW_DESCRIPTION: la descripción de la vista nueva

  3. Haz clic en Ejecutar.

Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.

bq

Usa el comando bq rm con la marca --table (o la combinación de teclas -t) para borrar una vista. Cuando usas la herramienta de línea de comandos de bq para quitar una vista, debes confirmar la acción. Puedes usar la marca --force (o la combinación de teclas -f) para omitir la confirmación.

Si la vista se encuentra en un conjunto de datos de un proyecto distinto a tu proyecto predeterminado, debes agregar el ID del proyecto al nombre del conjunto de datos en el siguiente formato: project_id:dataset.

bq rm \
-f \
-t \
project_id:dataset.view

En el ejemplo anterior, se ilustra lo siguiente:

  • project_id es el ID del proyecto.
  • dataset es el nombre del conjunto de datos que contiene la tabla.
  • view es el nombre de la vista que vas a borrar.

Ejemplos:

Puedes usar la herramienta de línea de comandos de bq para ejecutar los comandos de bq.

En la consola de Google Cloud, activa Cloud Shell.

Activa Cloud Shell.

Ingresa el siguiente comando para borrar myview de mydataset. mydataset está en tu proyecto predeterminado.

bq rm -t mydataset.myview

Ingresa el siguiente comando para borrar myview de mydataset. mydataset está en myotherproject, no en tu proyecto predeterminado.

bq rm -t myotherproject:mydataset.myview

Ingresa el siguiente comando para borrar myview de mydataset. mydataset está en tu proyecto predeterminado. El comando usa la combinación de teclas -f para omitir la confirmación.

bq rm -f -t mydataset.myview

API

Llama al método tables.delete de la API y especifica la vista que deseas borrar con el parámetro tableId.

C#

Antes de probar este ejemplo, sigue las instrucciones de configuración para C# 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 C#.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.


using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryDeleteTable
{
    public void DeleteTable(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id",
        string tableId = "your_table_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        client.DeleteTable(datasetId, tableId);
        Console.WriteLine($"Table {tableId} deleted.");
    }
}

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. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// deleteTable demonstrates deletion of a BigQuery table.
func deleteTable(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	table := client.Dataset(datasetID).Table(tableID)
	if err := table.Delete(ctx); err != nil {
		return err
	}
	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.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

TableId tableId = TableId.of(projectId, datasetName, tableName);
boolean deleted = bigquery.delete(tableId);
if (deleted) {
  // the table was deleted
} else {
  // the table was not found
}

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 BigQuery para Node.js.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

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

async function deleteTable() {
  // Deletes "my_table" from "my_dataset".

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

  // Delete the table
  await bigquery
    .dataset(datasetId)
    .table(tableId)
    .delete();

  console.log(`Table ${tableId} deleted.`);
}

PHP

Antes de probar este ejemplo, sigue las instrucciones de configuración para PHP 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 PHP.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';
// $tableId = 'The BigQuery table ID';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table($tableId);
$table->delete();
printf('Deleted table %s.%s' . PHP_EOL, $datasetId, $tableId);

Python

Antes de probar este ejemplo, 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. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.


from google.cloud import bigquery

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

# TODO(developer): Set table_id to the ID of the table to fetch.
# table_id = 'your-project.your_dataset.your_table'

# If the table does not exist, delete_table raises
# google.api_core.exceptions.NotFound unless not_found_ok is True.
client.delete_table(table_id, not_found_ok=True)  # Make an API request.
print("Deleted table '{}'.".format(table_id))

Rita

Antes de probar este ejemplo, sigue las instrucciones de configuración para Ruby 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 Ruby.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

require "google/cloud/bigquery"

def delete_table dataset_id = "my_dataset_id", table_id = "my_table_id"
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  table    = dataset.table table_id

  table.delete

  puts "Table #{table_id} deleted."
end

Ver la seguridad

Para controlar el acceso a las vistas en BigQuery, consulta Vistas autorizadas.

¿Qué sigue?