Actualiza propiedades de vista

En este documento, se describe cómo actualizar las propiedades de vista o metadatos. Después de crear una vista, puedes actualizar las propiedades de vista siguientes:

Permisos necesarios

Como mínimo, para actualizar una vista, debes tener los permisos bigquery.tables.update y bigquery.tables.get. 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.

Las siguientes funciones predefinidas de Cloud IAM incluyen los permisos bigquery.tables.updatebigquery.tables.get:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

Además, si un usuario tiene permisos bigquery.datasets.create, se le otorga el acceso bigquery.dataOwner cuando crea un conjunto de datos. El acceso bigquery.dataOwner permite al usuario actualizar tablas y vistas en el conjunto de datos.

Para obtener más información sobre las funciones de Cloud IAM y los permisos 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 de las siguientes maneras:

  • Con Cloud Console o la IU web clásica de BigQuery
  • Con el comando bq update de la herramienta de línea de comandos
  • Con una llamada al método tables.patch de la API
  • Con las bibliotecas cliente

Puedes cambiar el dialecto de SQL de SQL heredado a SQL estándar en la CLI o en la API. No puedes actualizar una vista SQL heredada a SQL estándar en Cloud Console o en la IU web clásica de BigQuery.

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

Console

  1. En el panel Recursos, despliega tu proyecto y el conjunto de datos, y selecciona la vista.

  2. Haz clic en la pestaña Details (Detalles).

    Ver detalles

  3. Arriba del cuadro Query (Consulta), haz clic en el botón Edit query (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).

IU clásica

  1. Selecciona la vista.

  2. En el panel View Details (Ver detalles), haz clic en Details (Detalles).

  3. Debajo del cuadro Query (Consulta), haz clic en Edit Query (Editar consulta).

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

    Actualizar vista

CLI

Ejecuta el comando bq update con la marca --view. Si quieres usar SQL estándar o actualizar el dialecto de consulta de SQL heredado a SQL estándar, 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 Google 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 SQL estándar.

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

Donde:

  • path_to_file es la ruta de URI o 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 es una consulta de SQL estándar válida.
  • project_id es el ID del proyecto.
  • dataset es un conjunto de datos que contiene la vista.
  • view es el nombre de la vista que quieres 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. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

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
}

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

// 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();

  // Uodate view query
  metadata.view = newViewQuery;

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

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

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 BigQuery para Python.

# from google.cloud import bigquery
# client = bigquery.Client()
# project = 'my-project'
# source_dataset_id = 'my_source_dataset'
# source_table_id = 'us_states'
# shared_dataset_ref = client.dataset('my_shared_dataset')

# This example shows how to update a shared view of a source table of
# US States. The view's query will be updated to contain only states with
# names starting with 'M'.
view_ref = shared_dataset_ref.table("my_shared_view")
view = bigquery.Table(view_ref)
sql_template = 'SELECT name, post_abbr FROM `{}.{}.{}` WHERE name LIKE "M%"'
view.view_query = sql_template.format(project, source_dataset_id, source_table_id)
view = client.update_table(view, ["view_query"])  # API request

Actualiza el tiempo de vencimiento de una vista

Puedes establecer un tiempo de vencimiento predeterminado para las tablas a nivel del conjunto de datos (que afecta tanto a las tablas como a las vistas) o puedes definir el vencimiento de una vista durante su creación. 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 el tiempo de vencimiento de la vista de las siguientes maneras:

  • Con la IU web clásica de BigQuery
    • Por el momento, no se admite la modificación de los tiempos de vencimiento de las vistas en Cloud Console.
  • Con el comando bq update de la CLI
  • Con una llamada al método tables.patch de la API
  • 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.

DDL

Las declaraciones del lenguaje de definición de datos (DDL) te permiten crear y modificar tablas y vistas con la sintaxis de consulta de SQL estándar.

Consulta Usa declaraciones del lenguaje de definición de datos.

Para usar una declaración de DDL en Cloud Console, haz lo siguiente:

  1. Haz clic en Redactar consulta nueva.

  2. Escribe tu declaración de DDL en el área de texto Editor de consultas.

    ALTER VIEW mydataset.myview
    SET OPTIONS (
    -- Sets view expiration to timestamp 2025-02-03 12:34:56 in the America/Los Angeles time zone
    expiration_timestamp=TIMESTAMP("2025-02-03 12:34:56", "America/Los Angeles")
    );
    
  3. Haz clic en Ejecutar consulta.

IU clásica

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

  2. En la página Detalles de la vista, haz clic en Detalles.

  3. Para Expiration Time (Hora de vencimiento), haz clic en Edit (Editar).

  4. En el cuadro de diálogo Update expiration (Actualizar expiración), haz clic en In (En) y, luego, ingresa la fecha de vencimiento en días.

  5. Haz clic en Aceptar (OK). La fecha de vencimiento actualizada aparecerá en la página Detalles (Details).

    Vencimiento de la vista

CLI

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

Donde:

  • integer es la duración predeterminada (en segundos) de la tabla. El valor mínimo es 3,600 segundos (una hora). La fecha de vencimiento se evalúa según la hora actual más el valor del número entero.
  • project_id es el ID del proyecto.
  • dataset es el nombre del conjunto de datos que contiene la vista que actualizas.
  • view es el nombre de la vista que quieres 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. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

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
}

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

// 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 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 BigQuery para Python.

import datetime
import pytz

# from google.cloud import bigquery
# client = bigquery.Client()
# table_ref = client.dataset('my_dataset').table('my_table')
# table = client.get_table(table_ref)  # API request

assert table.expires is None

# set table to expire 5 days from now
expiration = datetime.datetime.now(pytz.utc) + datetime.timedelta(days=5)
table.expires = expiration
table = client.update_table(table, ["expires"])  # API request

# expiration is stored in milliseconds
margin = datetime.timedelta(microseconds=1000)
assert expiration - margin <= table.expires <= expiration + margin

Actualiza la descripción de una vista

Puedes actualizar la descripción de una vista de las siguientes maneras:

  • Con Cloud Console o la IU web clásica de BigQuery
  • Con el comando bq update de la CLI
  • Con una llamada al método tables.patch de la API
  • Con las bibliotecas cliente

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

Console

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

  1. En la lista Recursos, selecciona la vista.

  2. Haz clic en la pestaña Details (Detalles).

    Ver 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.

DDL

Las declaraciones del lenguaje de definición de datos (DDL) te permiten crear y modificar tablas y vistas con la sintaxis de consulta de SQL estándar.

Consulta Usa declaraciones del lenguaje de definición de datos.

Para usar una declaración de DDL en Cloud Console, haz lo siguiente:

  1. Haz clic en Redactar consulta nueva.

  2. Escribe tu declaración de DDL en el área de texto Editor de consultas.

     ALTER VIEW mydataset.myview
     SET OPTIONS (
       description="Description of myview"
     );
     

  3. Haz clic en Ejecutar consulta.

IU clásica

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

  2. En la página Detalles de la vista, haz clic en Detalles.

  3. En la sección Description (Descripción), haz clic en Describe this view (Describir esta vista) para abrir el cuadro de descripción.

  4. Ingresa una descripción en el cuadro. Cuando haces clic fuera del cuadro, el texto se guarda.

    Descripción de tabla

CLI

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

Donde:

  • description es el texto que describe la vista entre comillas.
  • project_id es el ID del proyecto.
  • dataset es el nombre del conjunto de datos que contiene la vista que actualizas.
  • view es el nombre de la vista que quieres 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. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

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

// 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. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Node.js.

// 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 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 BigQuery para Python.

# from google.cloud import bigquery
# client = bigquery.Client()
# table_ref = client.dataset('my_dataset').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."

Pasos siguientes