Actualiza las propiedades del conjunto de datos

En este documento, se describe cómo actualizar las propiedades de los conjuntos de datos en BigQuery. Después de crear un conjunto de datos, puedes actualizar las siguientes propiedades:

Antes de comenzar

Otorga roles de Identity and Access Management (IAM) que les brindan a los usuarios los permisos necesarios para hacer cada tarea de este documento.

Permisos necesarios

Para actualizar las propiedades del conjunto de datos, necesitas los siguientes permisos de IAM:

  • bigquery.datasets.update
  • bigquery.datasets.setIamPolicy (solo es necesaria cuando se actualizan los controles de acceso del conjunto de datos en la consola de Google Cloud)

El rol predefinido de IAM roles/bigquery.dataOwner incluye los permisos que necesitas para actualizar las propiedades de un conjunto de datos.

Además, si tienes el permiso bigquery.datasets.create, puedes actualizar las etiquetas de 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.

Actualiza las descripciones de los conjuntos de datos

Puedes actualizar la descripción de un conjunto de datos de las siguientes maneras:

  • Usa la consola de Google Cloud
  • Usa el comando bq update de la herramienta de línea de comandos de bq.
  • Mediante una llamada al método de la API datasets.patch
  • Usa las bibliotecas cliente.

Para actualizar la descripción de un conjunto de datos, haz lo siguiente:

Console

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

  2. Expande la opción Acciones y haz clic en Abrir.

  3. En el panel Detalles, haz clic en Editar detalles para editar el texto de la descripción.

    En el cuadro de diálogo Editar detalles que aparece, haz lo siguiente:

    1. En el campo Descripción, ingresa una descripción o edita la descripción existente.
    2. Para guardar el nuevo texto de la descripción, haz clic en Guardar.

SQL

Si deseas actualizar la descripción de un conjunto de datos, usa la declaración ALTER SCHEMA SET OPTIONS para configurar la opción description.

En el siguiente ejemplo, se establece la descripción de un conjunto de datos llamado mydataset:

  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 sentencia:

     ALTER SCHEMA mydataset
     SET OPTIONS (
         description = 'Description of mydataset');
     

  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 un conjunto de datos 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 "string" \
project_id:dataset

Reemplaza lo siguiente:

  • string: es el texto que describe el conjunto de datos entre comillas
  • project_id: el ID de tu proyecto
  • dataset: es el nombre del conjunto de datos que actualizas

Ejemplos:

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

bq update --description "Description of mydataset" mydataset

Ingresa el siguiente comando para cambiar la descripción de mydataset a “Description of mydataset”. El conjunto de datos se encuentra en myotherproject, no en el proyecto predeterminado.

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

API

Llama a datasets.patch y actualiza la propiedad description en el recurso de conjunto de datos. Debido a que el método datasets.update reemplaza todo el recurso del conjunto de datos, es preferible usar el método datasets.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"
)

// updateDatasetDescription demonstrates how the Description metadata of a dataset can
// be read and modified.
func updateDatasetDescription(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()

	ds := client.Dataset(datasetID)
	meta, err := ds.Metadata(ctx)
	if err != nil {
		return err
	}
	update := bigquery.DatasetMetadataToUpdate{
		Description: "Updated Description.",
	}
	if _, err = ds.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.

Crea una instancia de Dataset.Builder a partir de una instancia de Dataset existente con el método Dataset.toBuilder(). Configura el objeto compilador de conjuntos de datos. Compila el conjunto de datos actualizado con el método Dataset.Builder.build() y llama al método Dataset.update() para enviar la actualización a la API.
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;

public class UpdateDatasetDescription {

  public static void runUpdateDatasetDescription() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String newDescription = "this is the new dataset description";
    updateDatasetDescription(datasetName, newDescription);
  }

  public static void updateDatasetDescription(String datasetName, String newDescription) {
    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();

      Dataset dataset = bigquery.getDataset(datasetName);
      bigquery.update(dataset.toBuilder().setDescription(newDescription).build());
      System.out.println("Dataset description updated successfully to " + newDescription);
    } catch (BigQueryException e) {
      System.out.println("Dataset description 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
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function updateDatasetDescription() {
  // Updates a dataset's description.

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

  // Set new dataset description
  const description = 'New dataset description.';
  metadata.description = description;

  const [apiResponse] = await dataset.setMetadata(metadata);
  const newDescription = apiResponse.description;

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

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.

Configura la propiedad Dataset.description y llama a Client.update_dataset() para enviar la actualización a la API.

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.
dataset.description = "Updated description."
dataset = client.update_dataset(dataset, ["description"])  # Make an API request.

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

Actualizar los tiempos de vencimiento predeterminados de la tabla

Puedes actualizar la fecha y hora de vencimiento predeterminada de las tablas de un conjunto de datos de las siguientes maneras:

  • Usa la consola de Google Cloud
  • Usa el comando bq update de la herramienta de línea de comandos de bq.
  • Mediante una llamada al método de la API datasets.patch
  • Usa las bibliotecas cliente.

Puedes determinar una fecha de vencimiento de la tabla predeterminada a nivel de conjunto de datos o puedes configurarla cuando se crea la tabla. Si estableces el vencimiento cuando creas la tabla, se anula la configuración predeterminada. Si no defines un tiempo de vencimiento predeterminado para las tablas a nivel del conjunto de datos ni lo haces cuando creas una tabla, la tabla nunca vencerá y deberás borrarla manualmente. Cuando una tabla vence, se borra junto con todos los datos que contiene.

Ten en cuenta lo siguiente cuando actualizas la configuración predeterminada de caducidad de la tabla de un conjunto de datos:

  • Si cambias el valor de Never a un tiempo de vencimiento específico, cualquier tabla que ya exista en el conjunto de datos no vencerá a menos que se haya configurado el tiempo de vencimiento en la tabla cuando se creó.
  • Si cambias el valor del vencimiento predeterminado para las tablas, cualquier tabla que ya exista vencerá según la configuración original. Se aplicará la nueva configuración de vencimiento de tablas a todas las tablas nuevas que se creen en el conjunto de datos, a menos que especifiques un vencimiento distinto durante la creación.

El valor del vencimiento predeterminado de tablas se expresa de manera diferente según dónde se configure el valor. Usa el método que te dé el nivel de detalle adecuado:

  • En la consola de Google Cloud, el vencimiento se expresa en días.
  • En la herramienta de línea de comandos de bq, el vencimiento se expresa en segundos.
  • En la API, la caducidad se expresa en milisegundos.

Para actualizar el tiempo de vencimiento predeterminado de un conjunto de datos, haz lo siguiente:

Console

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

  2. Expande la opción Acciones y haz clic en Abrir.

  3. En la página Detalles, haz clic en el ícono de lápiz junto a Información del conjunto de datos (Dataset info) para editar el vencimiento.

  4. En la sección Vencimiento predeterminado de la tabla (Default table expiration) del diálogo Información del conjunto de datos (Dataset info), ingresa un valor para Cantidad de días después de la creación de la tabla (Number of days after table creation).

  5. Haz clic en Guardar.

SQL

A fin de actualizar la fecha de vencimiento predeterminado de la partición, usa la declaración ALTER SCHEMA SET OPTIONS para configurar la opción default_table_expiration_days.

En el ejemplo siguiente, se actualiza el vencimiento predeterminado de las tablas para un conjunto de datos llamado mydataset.

  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 sentencia:

     ALTER SCHEMA mydataset
     SET OPTIONS(
         default_table_expiration_days = 3.75);
     

  3. Haz clic en Ejecutar.

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

bq

Para actualizar el tiempo de vencimiento predeterminado de las tablas recién creadas en un conjunto de datos, ingresa el comando bq update con la marca --default_table_expiration. Si actualizas un conjunto de datos 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 \
--default_table_expiration integer \
project_id:dataset

Reemplaza lo siguiente:

  • integer: la duración predeterminada, en segundos, de las tablas recién creadas. El valor mínimo es 3,600 segundos (una hora). La hora de vencimiento se evalúa según la hora UTC actual más el número entero. Especifica 0 para quitar el vencimiento existente. Cualquier tabla creada en el conjunto de datos se borra en integer segundos después de su hora de creación. Este valor se aplica si no estableces el vencimiento de la tabla cuando la creas.
  • project_id: el ID de tu proyecto.
  • dataset: es el nombre del conjunto de datos que actualizas

Ejemplos:

Ingresa el siguiente comando a fin de establecer la fecha de caducidad predeterminada para las tablas nuevas creadas en mydataset como dos horas (7,200 segundos) a partir de la hora actual. El conjunto de datos se encuentra en tu proyecto predeterminado.

bq update --default_table_expiration 7200 mydataset

Ingresa el siguiente comando a fin de establecer la fecha de caducidad predeterminada para las tablas nuevas creadas en mydataset como dos horas (7,200 segundos) a partir de la hora actual. El conjunto de datos se encuentra en myotherproject, no en el proyecto predeterminado.

bq update --default_table_expiration 7200 myotherproject:mydataset

API

Llama a datasets.patch y actualiza la propiedad defaultTableExpirationMs en el recurso de conjunto de datos. El vencimiento se expresa en milisegundos en la API. Debido a que el método datasets.update reemplaza todo el recurso del conjunto de datos, es preferible usar el método datasets.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"
	"time"

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

// updateDatasetDefaultExpiration demonstrats setting the default expiration of a dataset
// to a specific retention period.
func updateDatasetDefaultExpiration(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()

	ds := client.Dataset(datasetID)
	meta, err := ds.Metadata(ctx)
	if err != nil {
		return err
	}
	update := bigquery.DatasetMetadataToUpdate{
		DefaultTableExpiration: 24 * time.Hour,
	}
	if _, err := client.Dataset(datasetID).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.

Crea una instancia de Dataset.Builder a partir de una instancia de Dataset existente con el método Dataset.toBuilder(). Configura el objeto compilador de conjuntos de datos. Compila el conjunto de datos actualizado con el método Dataset.Builder.build() y llama al método Dataset.update() para enviar la actualización a la API.

Configura el tiempo de caducidad predeterminado con el método Dataset.Builder.setDefaultTableLifetime().

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;
import java.util.concurrent.TimeUnit;

public class UpdateDatasetExpiration {

  public static void runUpdateDatasetExpiration() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    updateDatasetExpiration(datasetName);
  }

  public static void updateDatasetExpiration(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();

      // Update dataset expiration to one day
      Long newExpiration = TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS);

      Dataset dataset = bigquery.getDataset(datasetName);
      bigquery.update(dataset.toBuilder().setDefaultTableLifetime(newExpiration).build());
      System.out.println("Dataset description updated successfully to " + newExpiration);
    } catch (BigQueryException e) {
      System.out.println("Dataset expiration 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
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function updateDatasetExpiration() {
  // Updates the lifetime of all tables in the dataset, in milliseconds.

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

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

  // Set new dataset metadata
  const expirationTime = 24 * 60 * 60 * 1000;
  metadata.defaultTableExpirationMs = expirationTime.toString();

  const [apiResponse] = await dataset.setMetadata(metadata);
  const newExpirationTime = apiResponse.defaultTableExpirationMs;

  console.log(`${datasetId} expiration: ${newExpirationTime}`);
}

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.

Configura la propiedad Dataset.default_table_expiration_ms y llama a Client.update_dataset() para enviar la actualización a la API.

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.
dataset.default_table_expiration_ms = 24 * 60 * 60 * 1000  # In milliseconds.

dataset = client.update_dataset(
    dataset, ["default_table_expiration_ms"]
)  # Make an API request.

full_dataset_id = "{}.{}".format(dataset.project, dataset.dataset_id)
print(
    "Updated dataset {} with new expiration {}".format(
        full_dataset_id, dataset.default_table_expiration_ms
    )
)

Actualiza los tiempos de vencimiento predeterminados de las particiones

Puedes actualizar el vencimiento predeterminado de las particiones de un conjunto de datos de las siguientes maneras:

  • Usar el comando bq update de la herramienta de línea de comandos de bq
  • Mediante una llamada al método de la API datasets.patch
  • Usa bibliotecas cliente.

Por el momento, la consola de Google Cloud no admite la configuración o actualización del vencimiento predeterminado de las particiones de un conjunto de datos.

Puedes configurar un tiempo de vencimiento predeterminado para las particiones al nivel del conjunto de datos, que se aplicarán a todas las tablas particionadas nuevas, o puedes configurar un vencimiento de partición para tablas individuales en el momento en que se crean. Si configuras el vencimiento predeterminado de las particiones y de las tablas a nivel del conjunto de datos, solo se definirá el vencimiento de las particiones de las nuevas tablas particionadas. Si configuras ambas opciones, el vencimiento predeterminado de las particiones anulará el vencimiento predeterminada de las tablas.

Si configuras el vencimiento de la partición cuando se crea la tabla particionada, ese valor anula el vencimiento de partición predeterminado al nivel de conjunto de datos, si existe alguno.

Si no configuras una caducidad predeterminada para la partición a nivel de conjunto de datos ni una caducidad para la partición cuando creas la tabla, las particiones nunca caducarán y deberás borrarlas de forma manual.

Cuando configuras una caducidad predeterminada para la partición en un conjunto de datos, la caducidad se aplica a todas las particiones en todas las tablas particionadas creadas en el conjunto de datos. Cuando configuras la caducidad de la partición en una tabla, la caducidad se aplica a todas las particiones creadas en la tabla especificada. En la actualidad, no puedes aplicar diferentes tiempos de caducidad a distintas particiones en la misma tabla.

Ten en cuenta lo siguiente cuando actualizas la configuración predeterminada de caducidad de la partición de un conjunto de datos:

  • Si cambias el valor de never a un vencimiento definido, cualquier partición que ya exista en las tablas particionadas del conjunto de datos no se vencerá, a menos que se haya configurado el vencimiento de partición en la tabla durante su creación.
  • Si cambias el valor para la caducidad predeterminada de la partición, cualquier partición en las tablas particionadas existentes caducará según la caducidad predeterminada de la partición original. Todas las tablas particionadas nuevas creadas en el conjunto de datos tienen la configuración de caducidad nueva de la partición, a menos que especifiques una caducidad diferente para la partición en la tabla cuando la creas.

El valor para la caducidad predeterminada de la partición se expresa de manera diferente dependiendo de dónde se configura el valor. Usa el método que te dé el nivel de detalle adecuado:

  • En la herramienta de línea de comandos de bq, el vencimiento se expresa en segundos.
  • En la API, la caducidad se expresa en milisegundos.

Para actualizar la fecha y hora de vencimiento predeterminada de una partición en un conjunto de datos, haz lo siguiente:

Console

Por el momento, la consola de Google Cloud no permite actualizar el vencimiento predeterminado de las particiones de un conjunto de datos.

SQL

A fin de actualizar la fecha de vencimiento predeterminado de la partición, usa la declaración ALTER SCHEMA SET OPTIONS para configurar la opción default_partition_expiration_days.

En el siguiente ejemplo, se actualiza el vencimiento de la partición predeterminada para un conjunto de datos llamado mydataset:

  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 sentencia:

     ALTER SCHEMA mydataset
     SET OPTIONS(
         default_partition_expiration_days = 3.75);
     

  3. Haz clic en Ejecutar.

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

bq

Para actualizar el tiempo de vencimiento predeterminado de un conjunto de datos, ingresa el comando bq update con la marca --default_partition_expiration. Si actualizas un conjunto de datos 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 \
--default_partition_expiration integer \
project_id:dataset

Reemplaza lo siguiente:

  • integer: es la duración predeterminada (en segundos) para las particiones en tablas particionadas recién creadas. Esta marca no tiene un valor mínimo. Especifica 0 para quitar el vencimiento existente. Todas las particiones de las tablas particionadas nuevas se borrarán integer segundos después de la fecha de la partición en formato UTC. Este valor se aplica si no especificas un vencimiento para las particiones durante la creación de la tabla.
  • project_id: el ID de tu proyecto.
  • dataset: es el nombre del conjunto de datos que actualizas

Ejemplos:

Ingresa el siguiente comando a fin de establecer el vencimiento de partición predeterminado para las nuevas tablas particionadas creadas en mydataset en 26 horas (93,600 segundos). El conjunto de datos se encuentra en tu proyecto predeterminado.

bq update --default_partition_expiration 93600 mydataset

Ingresa el siguiente comando a fin de establecer el vencimiento de partición predeterminado para las nuevas tablas particionadas creadas en mydataset en 26 horas (93,600 segundos). El conjunto de datos se encuentra en myotherproject, no en el proyecto predeterminado.

bq update --default_partition_expiration 93600 myotherproject:mydataset

API

Llama a datasets.patch y actualiza la propiedad defaultPartitionExpirationMs en el recurso de conjunto de datos. El vencimiento se expresa en milisegundos. Debido a que el método datasets.update reemplaza todo el recurso del conjunto de datos, es preferible usar el método datasets.patch.

Actualiza el modo de redondeo

Puedes actualizar el modo de redondeo predeterminado de un conjunto de datos mediante la declaración DDL ALTER SCHEMA SET OPTIONS. En el siguiente ejemplo, se actualiza el modo de redondeo predeterminado para mydataset a ROUND_HALF_EVEN.

ALTER SCHEMA mydataset
SET OPTIONS (
  default_rounding_mode = "ROUND_HALF_EVEN");

Esto establece el modo de redondeo predeterminado para las tablas nuevas creadas en el conjunto de datos. No afecta las columnas nuevas que se agregan a las tablas existentes. Configurar el modo de redondeo predeterminado en una tabla en el conjunto de datos anula esta opción.

Actualiza los controles de acceso al conjunto de datos

El proceso para actualizar los controles de acceso a un conjunto de datos es muy similar al proceso para asignar controles de acceso a un conjunto de datos. No se pueden aplicar controles de acceso durante la creación del conjunto de datos con la consola de Google Cloud o la herramienta de línea de comandos de bq. Primero debes crear el conjunto de datos y, luego, actualizar los controles de acceso correspondientes. La API te permite actualizar los controles de acceso al conjunto de datos mediante una llamada al método datasets.patch.

Cuando actualizas los controles de acceso de un conjunto de datos, puedes modificar el acceso para las siguientes entidades:

  • Principales de IAM:

    • Correo electrónico de Cuenta de Google: otorga acceso a una Cuenta de Google individual al conjunto de datos.
    • Grupo de Google: Otorga a todos los miembros de un Grupo de Google acceso al conjunto de datos.
    • Dominio de Google Workspace: Otorga a todos los usuarios y grupos de un dominio de Google acceso al conjunto de datos.
    • Cuenta de servicio: Otorga a una cuenta de servicio acceso al conjunto de datos.
    • Cualquiera: Ingresa allUsers para otorgar acceso al público general.
    • Todas las Cuentas de Google: Ingresa allAuthenticatedUsers para otorgar acceso a cualquier usuario que haya accedido a una Cuenta de Google.
  • Tipos de recursos:

Para actualizar los controles de acceso en un conjunto de datos, haz lo siguiente:

Console

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

  2. Expande la opción Acciones y haz clic en Abrir.

  3. Haz clic en Compartir conjunto de datos.

  4. Para borrar entradas existentes, en el cuadro de diálogo Compartir conjunto de datos, expande la entrada y haz clic en el ícono de borrar (papelera).

  5. Para agregar entradas nuevas en el diálogo Compartir conjunto de datos, haz lo siguiente:

    1. Ingresa la entidad en el cuadro Agregar principales.

    2. En Seleccionar una función, elige una función de IAM adecuada de la lista. Para obtener más información sobre los permisos asignados a cada función predefinida de BigQuery, consulta la página Funciones y permisos predefinidos.

    3. Haz clic en Agregar.

  6. Para agregar una vista autorizada, haz clic en la pestaña Vista autorizada, ingresa el proyecto, el conjunto de datos y la vista, y haz clic en Agregar.

  7. Cuando termines de agregar o borrar tus controles de acceso, haz clic en Listo.

bq

  1. Escribe la información del conjunto de datos existente (incluidos los controles de acceso) en un archivo JSON mediante el comando show. Si el conjunto de datos está en un proyecto que no es tu proyecto predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato: project_id:dataset.

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

    Reemplaza lo siguiente:

    • project_id: el ID de tu proyecto.
    • dataset: es el nombre de tu conjunto de datos.
    • path_to_file: es la ruta al archivo JSON en tu máquina local.

    Ejemplos:

    Ingresa el siguiente comando para escribir los controles de acceso de mydataset en un archivo JSON. mydataset está en tu proyecto predeterminado.

    bq show --format=prettyjson mydataset > /tmp/mydataset.json
    

    Ingresa el siguiente comando para escribir los controles de acceso de mydataset en un archivo JSON. mydataset está en myotherproject.

    bq show --format=prettyjson \
    myotherproject:mydataset > /tmp/mydataset.json
    
  2. Realiza los cambios a la sección "access" del archivo JSON. Puedes agregar o quitar cualquiera de las entradas specialGroup: projectOwners, projectWriters, projectReaders y allAuthenticatedUsers. También puedes agregar, quitar o modificar cualquiera de los siguientes elementos: userByEmail, groupByEmail y domain.

    Por ejemplo, la sección de acceso del archivo JSON de un conjunto de datos se vería de la siguiente manera:

    {
     "access": [
      {
       "role": "READER",
       "specialGroup": "projectReaders"
      },
      {
       "role": "WRITER",
       "specialGroup": "projectWriters"
      },
      {
       "role": "OWNER",
       "specialGroup": "projectOwners"
      }
      {
       "role": "READER",
       "specialGroup": "allAuthenticatedUsers"
      }
      {
       "role": "READER",
       "domain": "[DOMAIN_NAME]"
      }
      {
       "role": "WRITER",
       "userByEmail": "[USER_EMAIL]"
      }
      {
       "role": "READER",
       "groupByEmail": "[GROUP_EMAIL]"
      }
     ],
    }
    

  3. Cuando tus ediciones estén completas, usa el comando update con la marca --source para incluir el archivo JSON. Si el conjunto de datos está en un proyecto que no es tu proyecto predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato: project_id:dataset.

    bq update --source path_to_file project_id:dataset
    

    Reemplaza lo siguiente:

    • path_to_file: es la ruta al archivo JSON en tu máquina local.
    • project_id: el ID de tu proyecto.
    • dataset: es el nombre de tu conjunto de datos.

    Ejemplos:

    Ingresa el siguiente comando a fin de actualizar los controles de acceso para mydataset. mydataset está en tu proyecto predeterminado.

    bq update --source /tmp/mydataset.json mydataset
    

    Ingresa el siguiente comando a fin de actualizar los controles de acceso para mydataset. mydataset está en myotherproject.

    bq update --source /tmp/mydataset.json myotherproject:mydataset
    
  4. Para verificar los cambios del control de acceso, ingresa otra vez el comando show sin escribir la información en un archivo.

    bq show --format=prettyjson dataset
    

    o

    bq show --format=prettyjson project_id:dataset
    

API

Llama a datasets.patch y actualiza la propiedad access en el recurso del conjunto de datos.

Debido a que el método datasets.update reemplaza todo el recurso de conjunto de datos, es preferible usar el método datasets.patch para actualizar los controles de acceso.

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"
)

// updateDatasetAccessControl demonstrates how the access control policy of a dataset
// can be amended by adding an additional entry corresponding to a specific user identity.
func updateDatasetAccessControl(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()

	ds := client.Dataset(datasetID)
	meta, err := ds.Metadata(ctx)
	if err != nil {
		return err
	}
	// Append a new access control entry to the existing access list.
	update := bigquery.DatasetMetadataToUpdate{
		Access: append(meta.Access, &bigquery.AccessEntry{
			Role:       bigquery.ReaderRole,
			EntityType: bigquery.UserEmailEntity,
			Entity:     "sample.bigquery.dev@gmail.com"},
		),
	}

	// Leverage the ETag for the update to assert there's been no modifications to the
	// dataset since the metadata was originally read.
	if _, err := ds.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.

Crea una instancia de Dataset.Builder a partir de una instancia de Dataset existente con el método Dataset.toBuilder(). Configura el objeto compilador de conjuntos de datos. Compila el conjunto de datos actualizado con el método Dataset.Builder.build() y llama al método Dataset.update() para enviar la actualización a la API.

Configura los controles de acceso con el método Dataset.Builder.setAcl().

import com.google.cloud.bigquery.Acl;
import com.google.cloud.bigquery.Acl.Role;
import com.google.cloud.bigquery.Acl.User;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;
import java.util.ArrayList;

public class UpdateDatasetAccess {

  public static void runUpdateDatasetAccess() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    updateDatasetAccess(datasetName);
  }

  public static void updateDatasetAccess(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();

      Dataset dataset = bigquery.getDataset(datasetName);

      // Create a new ACL granting the READER role to "sample.bigquery.dev@gmail.com"
      // For more information on the types of ACLs available see:
      // https://cloud.google.com/storage/docs/access-control/lists
      Acl newEntry = Acl.of(new User("sample.bigquery.dev@gmail.com"), Role.READER);

      // Get a copy of the ACLs list from the dataset and append the new entry
      ArrayList<Acl> acls = new ArrayList<>(dataset.getAcl());
      acls.add(newEntry);

      bigquery.update(dataset.toBuilder().setAcl(acls).build());
      System.out.println("Dataset Access Control updated successfully");
    } catch (BigQueryException e) {
      System.out.println("Dataset Access control 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
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function updateDatasetAccess() {
  // Updates a datasets's access controls.

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

  // Create new role metadata
  const newRole = {
    role: 'READER',
    entity_type: 'userByEmail',
    userByEmail: 'sample.bigquery.dev@gmail.com',
  };

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

  // Add new role to role acess array
  metadata.access.push(newRole);
  const [apiResponse] = await dataset.setMetadata(metadata);
  const newAccessRoles = apiResponse.access;
  newAccessRoles.forEach(role => console.log(role));
}

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.

Establece la propiedad dataset.access_entries con los controles de acceso para un conjunto de datos. Luego, llama a la función client.update_dataset() para actualizar la propiedad.

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

# TODO(developer): Set entity_id to the ID of the email or group from whom
# you are adding access. Alternatively, to the JSON REST API representation
# of the entity, such as a view's table reference.
entity_id = "user-or-group-to-add@example.com"

from google.cloud.bigquery.enums import EntityTypes

# TODO(developer): Set entity_type to the type of entity you are granting access to.
# Common types include:
#
# * "userByEmail" -- A single user or service account. For example "fred@example.com"
# * "groupByEmail" -- A group of users. For example "example@googlegroups.com"
# * "view" -- An authorized view. For example
#       {"projectId": "p", "datasetId": "d", "tableId": "v"}
#
# For a complete reference, see the REST API reference documentation:
# https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets#Dataset.FIELDS.access
entity_type = EntityTypes.GROUP_BY_EMAIL

# TODO(developer): Set role to a one of the "Basic roles for datasets"
# described here:
# https://cloud.google.com/bigquery/docs/access-control-basic-roles#dataset-basic-roles
role = "READER"

from google.cloud import bigquery

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

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

entries = list(dataset.access_entries)
entries.append(
    bigquery.AccessEntry(
        role=role,
        entity_type=entity_type,
        entity_id=entity_id,
    )
)
dataset.access_entries = entries

dataset = client.update_dataset(dataset, ["access_entries"])  # Make an API request.

full_dataset_id = "{}.{}".format(dataset.project, dataset.dataset_id)
print(
    "Updated dataset '{}' with modified user permissions.".format(full_dataset_id)
)

Actualiza los períodos de tiempo

Puedes actualizar el período de viaje en el tiempo de un conjunto de datos de las siguientes maneras:

  • Usa la consola de Google Cloud
  • Mediante la sentencia ALTER SCHEMA SET OPTIONS.
  • Usa el comando bq update de la herramienta de línea de comandos de bq.
  • Realiza una llamada al método de API datasets.patch o datasets.update. El método update reemplaza todo el recurso del conjunto de datos, mientras que el método patch solo reemplaza los campos que se proporcionan en el recurso del conjunto de datos enviado.

Para obtener más información sobre el período de viaje en el tiempo, consulta Configura el período de viaje en el tiempo.

Para actualizar el período de viaje en el tiempo de un conjunto de datos, haz lo siguiente:

Consola

  1. En el panel Explorador, expande tu proyecto y selecciona un conjunto de datos.
  2. Expande la opción Acciones y haz clic en Abrir.
  3. En el panel Detalles, haz clic en Editar detalles.
  4. Expande Opciones avanzadas y, luego, selecciona el período de viaje en el tiempo que deseas usar.
  5. Haz clic en Guardar.

SQL

Usa la instrucción ALTER SCHEMA SET OPTIONS con la opción max_time_travel_hours para especificar el período de viaje cuando alteres un conjunto de datos. El valor max_time_travel_hours debe ser un número entero expresado en múltiplos de 24 (48, 72, 96, 120, 144, 168) entre 48 (2 días) y 168 (7 días).

  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 SCHEMA DATASET_NAME
    SET OPTIONS(
      max_time_travel_hours = HOURS);
    

    Reemplaza lo siguiente:

    • DATASET_NAME: es el nombre del conjunto de datos que actualizas
    • HOURS por la duración del período de viaje en horas.

  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 update con la marca --max_time_travel_hours para especificar el período de viaje en el tiempo cuando alteres un conjunto de datos. El valor --max_time_travel_hours debe ser un número entero expresado en múltiplos de 24 (48, 72, 96, 120, 144, 168) entre 48 (2 días) y 168 (7 días).

bq update \
--dataset=true --max_time_travel_hours=HOURS \
PROJECT_ID:DATASET_NAME

Reemplaza lo siguiente:

  • PROJECT_ID: el ID de tu proyecto
  • DATASET_NAME: es el nombre del conjunto de datos que actualizas
  • HOURS por la duración del período de viaje en horas

API

Llama al método datasets.patch o datasets.update con un recurso de conjunto de datos definido en el que especificaste un valor para el campo maxTimeTravelHours. El valor de maxTimeTravelHours debe ser un número entero expresado en múltiplos de 24 (48, 72, 96, 120, 144, 168) entre 48 (2 días) y 168 (7 días).

Actualiza modelos de facturación de almacenamiento

Puedes modificar el modelo de facturación de almacenamiento de un conjunto de datos. Establece el valor storage_billing_model en PHYSICAL para usar bytes físicos cuando se calculan los cambios de almacenamiento, o en LOGICAL para usar bytes lógicos. LOGICAL es la configuración predeterminada.

Cuando cambias el modelo de facturación de un conjunto de datos, el cambio tarda 24 horas en aplicarse.

Una vez que cambies el modelo de facturación de almacenamiento de un conjunto de datos, debes esperar 14 días antes de poder volver a cambiar el modelo de facturación de almacenamiento.

Consola

  1. En el panel Explorador, expande tu proyecto y selecciona un conjunto de datos.
  2. Expande la opción Acciones y haz clic en Abrir.
  3. En el panel Detalles, haz clic en Editar detalles.
  4. Expande Opciones avanzadas y, luego, selecciona Habilitar el modelo de facturación de almacenamiento físico para usar la facturación de almacenamiento físico o anular la selección para usar la facturación de almacenamiento lógico.
  5. Haz clic en Guardar.

SQL

Para actualizar el modelo de facturación de un conjunto de datos, usa la sentencia ALTER SCHEMA SET OPTIONS y establece la opción storage_billing_model en:

  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 SCHEMA DATASET_NAME
    SET OPTIONS(
     storage_billing_model = 'BILLING_MODEL');
    

    Reemplaza lo siguiente:

    • DATASET_NAME por el nombre del conjunto de datos que deseas modificar
    • BILLING_MODEL por el tipo de almacenamiento que deseas usar, ya sea LOGICAL o PHYSICAL

  3. Haz clic en Ejecutar.

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

A fin de actualizar el modelo de facturación de almacenamiento para todos los conjuntos de datos en un proyecto, usa la siguiente consulta de SQL para cada región, en la que se encuentran los conjuntos de datos:

FOR record IN
 (SELECT CONCAT(catalog_name, '.', schema_name) AS dataset_path
 FROM PROJECT_ID.region-REGION.INFORMATION_SCHEMA.SCHEMATA)
DO
 EXECUTE IMMEDIATE
   "ALTER SCHEMA `" || record.dataset_path || "` SET OPTIONS(storage_billing_model = 'BILLING_MODEL')";
END FOR;

Reemplaza lo siguiente:

  • PROJECT_ID por el ID del proyecto.
  • REGION por un calificador de región
  • BILLING_MODEL por el tipo de almacenamiento que deseas usar, ya sea LOGICAL o PHYSICAL

bq

Para actualizar el modelo de facturación de un conjunto de datos, usa el comando bq update y establece la marca --storage_billing_model:

bq update -d --storage_billing_model=BILLING_MODEL PROJECT_ID:DATASET_NAME

Reemplaza lo siguiente:

  • PROJECT_ID: el ID de tu proyecto
  • DATASET_NAME: es el nombre del conjunto de datos que actualizas
  • BILLING_MODEL: el tipo de almacenamiento que deseas usar, ya sea LOGICAL o PHYSICAL

API

Llama al método datasets.update con un recurso de conjunto de datos definido en el que se configura el campo storageBillingModel.

En el siguiente ejemplo, se muestra cómo llamar a datasets.update con curl:

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -L -X PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET_ID -d '{"datasetReference": {"projectId": "PROJECT_ID", "datasetId": "DATASET_NAME"}, "storageBillingModel": "BILLING_MODEL"}'

Reemplaza lo siguiente:

  • PROJECT_ID: el ID de tu proyecto
  • DATASET_NAME: es el nombre del conjunto de datos que actualizas
  • BILLING_MODEL: el tipo de almacenamiento que deseas usar, ya sea LOGICAL o PHYSICAL

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. Para obtener información sobre la encriptación de datos, consulta Encriptación en reposo.

¿Qué sigue?