Organízate con las colecciones Guarda y clasifica el contenido según tus preferencias.

Copia conjuntos de datos

Puedes copiar un conjunto de datos dentro de una región o de una región a otra sin tener que extraer, mover y volver a cargar los datos en BigQuery. Puedes copiar el conjunto de datos una vez o según una programación recurrente personalizada.

Cuotas y limitaciones

Las copias de conjuntos de datos de BigQuery están sujetas a las siguientes cuotas y limitaciones.

Cuotas de copia

La copia de un conjunto de datos requiere un trabajo de copia para cada tabla del conjunto de datos.

Se aplican los siguientes límites a los trabajos de BigQuery para copiar tablas, incluidos los trabajos que crean una copia, una clonación o una instantánea de una tabla estándar, una clonación de tabla o una instantánea de tabla. Los límites se aplican a los trabajos creados mediante la consola de Google Cloud, la herramienta de línea de comandos de bq o el método de la API jobs.insert de tipo de copia. Los trabajos de copia se tienen en cuenta en estos límites, ya sea que se completen correctamente o fallen.

Límite Predeterminada Notas
Trabajos de copia diarios por tabla de destino Consulta Operaciones de tabla por día.
Trabajos de copia por día 100,000 trabajos Tu proyecto puede ejecutar hasta 100,000 trabajos de copia por día.
Trabajos de copia entre regiones por tabla de destino por día 100 trabajos Tu proyecto puede ejecutar hasta 100 trabajos de copia entre regiones por tabla de destino por día.
Trabajos de copia entre regiones por día 2,000 trabajos Tu proyecto puede ejecutar hasta 2,000 trabajos de copia entre regiones por día.

Se aplican los siguientes límites a la copia de conjuntos de datos:

Límite Predeterminada Notas
Cantidad máxima de tablas en el conjunto de datos de origen 20,000 tablas Un conjunto de datos de origen puede tener hasta 20,000 tablas.
Cantidad máxima de tablas que se pueden copiar por ejecución en un conjunto de datos de destino en la misma región 20,000 tablas Tu proyecto puede copiar 20,000 tablas por ejecución a un conjunto de datos de destino que se encuentra en la misma región.
Cantidad máxima de tablas que se pueden copiar por ejecución en un conjunto de datos de destino ubicado en una región diferente 1,000 tablas Tu proyecto puede copiar 1,000 tablas por ejecución a un conjunto de datos de destino que se encuentra en una región diferente. Por ejemplo, si configuras una copia entre regiones de un conjunto de datos que tiene 8,000 tablas, el Servicio de transferencia de datos de BigQuery crea de forma automática ocho ejecuciones de manera secuencial. La primera ejecución copia 1,000 tablas. A las veinticuatro horas de la segunda ejecución, la segunda copia 1,000 tablas. Este proceso continúa hasta que se copien todas las tablas del conjunto de datos, hasta un máximo de 20,000 tablas por conjunto de datos.

Para obtener más información, consulta Trabajos de copia.

Limitaciones generales

  • Debes crear el conjunto de datos de destino antes de poder crear una configuración de transferencia para la copia del conjunto de datos.

  • Para cada configuración de copia de conjunto de datos, puedes tener una copia activa a la vez. Las ejecuciones de transferencia adicionales están en cola.

Limitaciones del tipo de datos

  • No se admite la copia de vistas.
  • No se admite la copia de tablas externas.
  • No se admite la copia de datos en el almacenamiento optimizado para escritura.
  • La compatibilidad con la copia de tablas encriptadas con claves administradas por el cliente es distinta para la copia dentro de la misma región y la copia entre regiones.

Dentro de la región

La copia de tablas encriptadas, incluidas las tablas encriptadas con claves administradas por el cliente (CMEK), se admite para la copia de conjuntos de datos dentro de la misma región.

Entre regiones

Se admite la copia de tablas con la encriptación predeterminada entre regiones. En la actualidad, no se admite la copia de tablas encriptadas con claves administradas por el cliente (CMEK) entre regiones. Las tablas encriptadas con CMEK se omiten cuando se copian tablas en el conjunto de datos de destino.

Limitaciones del conjunto de datos de destino

Los conjuntos de datos con claves administradas por el cliente (CMEK) no se pueden usar como destino cuando haces copias entre regiones. Sin embargo, se permite usar una tabla con CMEK como destino cuando haces copias dentro de las regiones.

Limitaciones de tablas

  • En la actualidad, se admite la copia de tablas particionadas. Sin embargo, no es posible agregar datos a una tabla particionada.

  • Si existe una tabla en el conjunto de datos de origen y el conjunto de datos de destino, y no cambió desde la última copia exitosa, se omite. Esto ocurre incluso si se marca la casilla Reemplazar tablas de destino.

  • Cuando se truncan las tablas, la copia del conjunto de datos no detecta ningún cambio realizado en el conjunto de datos de destino antes de comenzar la copia. Se actualizan (reemplazan) todos los datos del conjunto de datos de destino. Se reemplazan las tablas y el esquema.

    • Si planeas reemplazar la tabla de destino durante el copiado con la marca overwrite_destination_table, ambas tablas deben tener el mismo esquema de partición.

Antes de comenzar

Antes de crear una copia de un conjunto de datos, ten en cuenta esta información:

  • La copia del conjunto de datos usa características del Servicio de transferencia de datos de BigQuery. En el proyecto de Google Cloud de tu conjunto de datos de destino, verifica si completaste todas las acciones necesarias para habilitar el Servicio de transferencia de datos de BigQuery.
  • Crea un conjunto de datos de BigQuery como el conjunto de datos de destino en la misma región o en una región diferente a la de tu conjunto de datos de origen. Debes especificar una ubicación para almacenar tus datos de BigQuery cuando creas un conjunto de datos. Todavía no se admiten todas las regiones para la copia de conjuntos de datos (consulta Regiones admitidas). El nombre del conjunto de datos debe ser exclusivo en cada proyecto.
  • Ubica el ID del conjunto de datos de origen que deseas copiar y el ID del proyecto de origen.
  • Si quieres configurar las notificaciones de ejecución de transferencias para Pub/Sub, debes tener los permisos pubsub.topics.setIamPolicy. Los permisos de Pub/Sub no son necesarios si solo configuras las notificaciones por correo electrónico. Para obtener más información, consulta la sección sobre notificaciones de ejecución del Servicio de transferencia de datos de BigQuery.
  • Si planeas reemplazar la tabla de destino durante el copiado con la marca overwrite_destination_table, ambas tablas deben tener el mismo esquema de partición.
  • Otorga funciones de Identity and Access Management (IAM) que les brindan a los usuarios los permisos necesarios para realizar cada tarea de este documento.

Permisos necesarios

Para crear una copia de un conjunto de datos, necesitas los siguientes permisos de IAM:

  • Para crear la transferencia de copia, necesitas lo siguiente en el proyecto:

    • bigquery.transfers.update
    • bigquery.jobs.create
  • En el conjunto de datos de origen, necesitas lo siguiente:

    • bigquery.datasets.get
    • bigquery.tables.list
  • En el conjunto de datos de destino, necesitas lo siguiente:

    • bigquery.datasets.get
    • bigquery.datasets.update
    • bigquery.tables.create
    • bigquery.tables.list

El rol de IAM predefinido roles/bigquery.admin incluye los permisos que necesitas para crear una copia del conjunto de datos.

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

Configura una copia de conjunto de datos

Sigue estos pasos para crear una copia de un conjunto de datos:

Console

Opción 1: Usa el botón Copiar.

  1. Ve a la página de BigQuery en la consola de Google Cloud.

    Ir a la página de BigQuery

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

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

  4. Haz clic en Copiar. En el cuadro de diálogo Copiar conjunto de datos que aparece, haz lo siguiente:

    1. En el campo Conjunto de datos, crea un conjunto de datos nuevo o selecciona el ID de un conjunto de datos existente de la lista.

      Los nombres de conjuntos de datos dentro de un proyecto deben ser exclusivos. El proyecto y el conjunto de datos pueden estar en regiones diferentes, pero no todas las regiones se admiten para la copia de conjuntos de datos entre regiones.

    2. En el campo Ubicación, se muestra la ubicación del conjunto de datos de origen.

    3. Opcional: Para reemplazar los datos y el esquema de las tablas de destino por las tablas de origen, selecciona la casilla de verificación Reemplazar tablas de destino.

    4. Para copiar el conjunto de datos, haz clic en Copiar.

Para evitar costos de almacenamiento adicionales, considera borrar el conjunto de datos antiguo.

Opción 2: Usa el Servicio de transferencia de datos de BigQuery.

  1. Habilita el Servicio de transferencia de datos de BigQuery.
  2. Crea una transferencia para tu fuente de datos.

bq

Ingresa el comando bq mk y suministra la marca de creación de transferencias --transfer_config. También se requieren las siguientes marcas:

  • --project_id
  • --data_source
  • --target_dataset
  • --display_name
  • --params

    bq mk --transfer_config --project_id=PROJECT_ID --data_source=cross_region_copy --target_dataset=DATASET --display_name=NAME --params='PARAMETERS'
    

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID de tu proyecto de Google Cloud. Si no se especifica --project_id, se usa el proyecto predeterminado.
  • DATASET: Es el conjunto de datos de destino de BigQuery para la configuración de transferencia.
  • NAME: Es el nombre visible del trabajo de copia o la configuración de transferencia. El nombre de la transferencia puede ser cualquier valor que te permita identificarla con facilidad si es necesario hacerle modificaciones más tarde.
  • PARAMETERS contiene los parámetros para la configuración de la transferencia creada en formato JSON. Por ejemplo: --params='{"param":"param_value"}'. Para copiar conjuntos de datos, debes suministrar los parámetros source_dataset_id, source_project_id y overwrite_destination_table (este último es opcional).

Los parámetros para una configuración de copia de conjunto de datos son los siguientes:

  • source_dataset_id: Es el ID del conjunto de datos de origen que deseas copiar.
  • source_project_id: Es el ID del proyecto en el que se encuentra tu conjunto de datos de origen.
  • overwrite_destination_table: Incluye este parámetro si deseas truncar las tablas de una copia anterior y actualizar todos los datos (opcional).

Por ejemplo, con el comando siguiente, se crea una configuración de copia de conjunto de datos llamada My Transfer con un conjunto de datos de destino denominado mydataset y un proyecto con el ID de myproject.

bq mk --transfer_config --project_id=myproject --data_source=cross_region_copy --target_dataset=mydataset --display_name='My Dataset Copy' --params='{"source_dataset_id":"123_demo_eu","source_project_id":"mysourceproject","overwrite_destination_table":"true"}'

Para obtener información adicional sobre el comando bq mk, consulta la referencia de la herramienta de línea de comandos.

API

Usa el método projects.locations.transferConfigs.create y proporciona una instancia del recurso TransferConfig.

Java

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

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// Sample to copy dataset from another gcp project
public class CopyDataset {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String destinationProjectId = "MY_DESTINATION_PROJECT_ID";
    final String destinationDatasetId = "MY_DESTINATION_DATASET_ID";
    final String sourceProjectId = "MY_SOURCE_PROJECT_ID";
    final String sourceDatasetId = "MY_SOURCE_DATASET_ID";
    Map<String, Value> params = new HashMap<>();
    params.put("source_project_id", Value.newBuilder().setStringValue(sourceProjectId).build());
    params.put("source_dataset_id", Value.newBuilder().setStringValue(sourceDatasetId).build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(destinationDatasetId)
            .setDisplayName("Your Dataset Copy Name")
            .setDataSourceId("cross_region_copy")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .setSchedule("every 24 hours")
            .build();
    copyDataset(destinationProjectId, transferConfig);
  }

  public static void copyDataset(String projectId, TransferConfig transferConfig)
      throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      CreateTransferConfigRequest request =
          CreateTransferConfigRequest.newBuilder()
              .setParent(parent.toString())
              .setTransferConfig(transferConfig)
              .build();
      TransferConfig config = dataTransferServiceClient.createTransferConfig(request);
      System.out.println("Copy dataset created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("Copy dataset was not created." + ex.toString());
    }
  }
}

Python

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

Instala el cliente de Python para la API de Data Transfer de BigQuery con pip install google-cloud-bigquery-datatransfer. Luego, crea una configuración de transferencia para copiar el conjunto de datos.
from google.cloud import bigquery_datatransfer

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

destination_project_id = "my-destination-project"
destination_dataset_id = "my_destination_dataset"
source_project_id = "my-source-project"
source_dataset_id = "my_source_dataset"
transfer_config = bigquery_datatransfer.TransferConfig(
    destination_dataset_id=destination_dataset_id,
    display_name="Your Dataset Copy Name",
    data_source_id="cross_region_copy",
    params={
        "source_project_id": source_project_id,
        "source_dataset_id": source_dataset_id,
    },
    schedule="every 24 hours",
)
transfer_config = transfer_client.create_transfer_config(
    parent=transfer_client.common_project_path(destination_project_id),
    transfer_config=transfer_config,
)
print(f"Created transfer config: {transfer_config.name}")

Visualiza y actualiza trabajos de copia de conjunto de datos

Para ver el progreso y ver los detalles de una copia de conjunto de datos en Transferencias de datos, haz lo siguiente:

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

    Ir a la página de BigQuery

  2. Haz clic en Transferencias de datos.

  3. Selecciona la transferencia cuyos detalles deseas ver.

    1. En la página Detalles de la transferencia, selecciona una ejecución de la transferencia.

    2. Para actualizar, haz clic en Más > Actualizar transferencia.

Precios

No se generan cargos por la copia de conjuntos de datos durante el período Beta.

Durante la disponibilidad general, los cargos de salida de datos por los datos copiados entre regiones o multirregiones se facturan con las mismas tarifas que los precios de extracción de datos de BigQuery. No se aplican cargos por los conjuntos de datos que se copian dentro de una misma región o multirregión.

Si copias un conjunto de datos dentro de una misma región (o dentro de una multirregión), no se te cobrarán cargos de salida. Cuando copias un conjunto de datos entre regiones (o entre una región y una multirregión, o viceversa), se te cobrará por la salida.

BigQuery envía datos comprimidos para copiar entre regiones, por lo que la cantidad de GB facturados puede ser menor que el tamaño de tu conjunto de datos.

Si deseas obtener más información, consulta los Precios de BigQuery.

Regiones admitidas

Hay dos tipos de ubicaciones:

  • Una región es un lugar geográfico específico, como Londres.

  • Una multirregión es un área geográfica grande, como los Estados Unidos, que contiene dos o más lugares geográficos.

Los conjuntos de datos se pueden copiar de una región a otra, de una región individual a una multirregión, de una multirregión a una región individual o de una multirregión a otra multirregión.

En la actualidad, no se admiten todas las regiones para la copia de conjuntos de datos. Puedes crear copias de conjuntos de datos en regiones en las que se admita el Servicio de transferencia de datos de BigQuery, como se muestra a continuación.

Regiones

En la siguiente tabla, se enumeran las regiones de América en las que está disponible BigQuery.
Descripción de la región Nombre de la región Detalles
Iowa us-central1 Ícono de la hoja CO2 bajo
Las Vegas us-west4
Los Ángeles us-west2
Montreal northamerica-northeast1 Ícono de la hoja CO2 bajo
Virginia del Norte us-east4
Oregón us-west1 Ícono de la hoja CO2 bajo
Salt Lake City us-west3
São Paulo southamerica-east1 Ícono de la hoja CO2 bajo
Santiago southamerica-west1
Carolina del Sur us-east1
Toronto northamerica-northeast2
En la siguiente tabla, se muestran las regiones de Asia-Pacífico en las que está disponible BigQuery.
Descripción de la región Nombre de la región Detalles
Delhi asia-south2
Hong Kong asia-east2
Yakarta asia-southeast2
Melbourne australia-southeast2
Bombay asia-south1
Osaka asia-northeast2
Seúl asia-northeast3
Singapur asia-southeast1
Sídney australia-southeast1
Taiwán asia-east1
Tokio asia-northeast1
En la siguiente tabla, se enumeran las regiones de Europa en las que está disponible BigQuery.
Descripción de la región Nombre de la región Detalles
Bélgica europe-west1 Ícono de la hoja CO2 bajo
Finlandia europe-north1 Ícono de la hoja CO2 bajo
Fráncfort europe-west3
Londres europe-west2
Netherlands europe-west4
Varsovia europe-central2
Zúrich europe-west6 Ícono de la hoja CO2 bajo

Multirregiones

En la siguiente tabla, se enumeran las multirregiones en las que BigQuery está disponible.
Descripción de la multirregión Nombre de la multirregión
Centros de datos dentro de los estados miembros de la Unión Europea1 EU
Centros de datos en Estados Unidos US

1 Los datos ubicados en la multirregión EU no se almacenan en los centros de datos de europe-west2 (Londres) ni deeurope-west6 (Zúrich).

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?

  • Para obtener información sobre el uso de las transferencias (por ejemplo, cómo obtener información sobre una configuración de transferencia, mostrar distintas configuraciones o visualizar su historial de ejecuciones), consulta Trabaja con transferencias.