Crear capturas de tablas

En este documento se describe cómo crear una instantánea de una tabla mediante la consolaGoogle Cloud , la instrucción SQL CREATE SNAPSHOT TABLE, el comando bq cp --snapshot o la API jobs.insert. Este documento está dirigido a usuarios que conocen las instantáneas de tablas de BigQuery.

Permisos y roles

En esta sección se describen los permisos de gestión de identidades y accesos (IAM) que necesitas para crear una instantánea de una tabla y los roles de IAM predefinidos que conceden esos permisos.

Permisos

Para crear una captura de una tabla, necesitas los siguientes permisos:

Permiso Recurso Notas
Todas las siguientes:

bigquery.tables.get
bigquery.tables.getData
bigquery.tables.createSnapshot
bigquery.datasets.get
bigquery.jobs.create
La tabla de la que quieras hacer una captura. Como la caducidad de las capturas elimina la captura más adelante, para crear una captura con una hora de caducidad, debes tener el permiso bigquery.tables.deleteSnapshot.
bigquery.tables.create
bigquery.tables.updateData
El conjunto de datos que contiene la captura de la tabla.

Roles

Los roles predefinidos de BigQuery que proporcionan los permisos necesarios son los siguientes:

Role Recurso Notas
Al menos uno de los siguientes:

bigquery.dataViewer
bigquery.dataEditor
bigquery.dataOwner

Y al menos uno de los siguientes:

bigquery.jobUser
bigquery.studioUser
bigquery.user
bigquery.studioAdmin
bigquery.admin
La tabla de la que quieras hacer una captura. Solo se pueden usar bigquery.dataOwner, bigquery.admin y bigquery.studioAdmin para crear una captura con una hora de vencimiento.
Al menos uno de los siguientes:

bigquery.dataEditor
bigquery.dataOwner
bigquery.studioAdmin
bigquery.admin
El conjunto de datos que contiene la nueva instantánea de la tabla.

Limitaciones

Para obtener información sobre las limitaciones de las copias de seguridad de tablas, consulta Limitaciones de las copias de seguridad de tablas.

Además, la creación de copias de una tabla está sujeta a las siguientes limitaciones, que se aplican a todos los trabajos de copia de tablas:

  • Cuando creas una instantánea de una tabla, su nombre debe cumplir las mismas reglas de nomenclatura que cuando creas una tabla.
  • La creación de copias de una tabla está sujeta a los límites de BigQuery en las tareas de copia.
  • El conjunto de datos de la captura de tabla debe estar en la misma región y en la misma organización que el conjunto de datos que contiene la tabla de la que vas a hacer una captura. Por ejemplo, no puedes crear una instantánea de una tabla en un conjunto de datos radicado en EE. UU. si la tabla está en un conjunto de datos radicado en la Unión Europea. En su lugar, tendrás que hacer una copia de la tabla.
  • El tiempo que tarda BigQuery en crear instantáneas de tablas puede variar significativamente entre diferentes ejecuciones, ya que el almacenamiento subyacente se gestiona de forma dinámica.
  • Cuando se crea una instantánea de una tabla con la CLI de BigQuery, la instantánea tiene la clave de cifrado predeterminada del conjunto de datos de destino. Cuando se crea una instantánea de una tabla mediante SQL, la instantánea tiene la misma clave de cifrado que la tabla de origen.

Crear una captura de tabla

Lo más recomendable es crear una instantánea de la tabla en un conjunto de datos diferente de la tabla base. De esta forma, la tabla base se puede restaurar a partir de su instantánea de tabla aunque el conjunto de datos de la tabla base se elimine por error.

Cuando creas una captura de una tabla, especificas la tabla de la que quieres hacer una captura y un nombre único para la captura. También puedes especificar la hora de la captura y la fecha de vencimiento de la captura de la tabla.

Crear una captura de tabla con una fecha de vencimiento

Puedes crear una instantánea de una tabla que caduque al cabo de 24 horas con una de las siguientes opciones:

Consola

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

    Ir a BigQuery

  2. En el panel Explorador, despliega los nodos del proyecto y del conjunto de datos de la tabla de la que quieras crear una instantánea.

  3. Haga clic en el nombre de la tabla de la que quiera crear una instantánea.

  4. En el panel de la tabla que aparece, haga clic en Snapshot.

    Haz clic en Vista del día.

  5. En el panel Crear una copia de la tabla que aparece, introduce la información de Proyecto, Conjunto de datos y Tabla de la nueva copia de la tabla.

  6. En el campo Expiration time (Hora de vencimiento), introduce la fecha y la hora de 24 horas a partir de ahora.

  7. Haz clic en Guardar.

SQL

Usa la CREATE SNAPSHOT TABLEdeclaración de DDL:

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

    Ir a BigQuery

  2. En el editor de consultas, introduce la siguiente instrucción:

    CREATE SNAPSHOT TABLE SNAPSHOT_PROJECT_ID.SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME
    CLONE TABLE_PROJECT_ID.TABLE_DATASET_NAME.TABLE_NAME
      OPTIONS (
        expiration_timestamp = TIMESTAMP 'TIMESTAMP_VALUE');

    Haz los cambios siguientes:

    • SNAPSHOT_PROJECT_ID: el ID del proyecto en el que se va a crear la captura.
    • SNAPSHOT_DATASET_NAME: el nombre del conjunto de datos en el que se va a crear la instantánea.
    • SNAPSHOT_NAME: el nombre de la captura que vas a crear.
    • TABLE_PROJECT_ID: el ID del proyecto que contiene la tabla a partir de la que vas a crear la instantánea.
    • TABLE_DATASET_NAME: el nombre del conjunto de datos que contiene la tabla a partir de la que vas a crear la instantánea.
    • TABLE_NAME: el nombre de la tabla a partir de la que vas a crear la captura.
    • TIMESTAMP_VALUE: un valor de marca de tiempo que representa la fecha y la hora de dentro de 24 horas.

  3. Haz clic en Ejecutar.

Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.

bq

Introduce el siguiente comando en Cloud Shell:

Ir a Cloud Shell

bq cp \
--snapshot \
--no_clobber \
--expiration=86400 \
TABLE_PROJECT_ID:TABLE_DATASET_NAME.TABLE_NAME \
SNAPSHOT_PROJECT_ID:SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME

Haz los cambios siguientes:

  • TABLE_PROJECT_ID: el ID del proyecto que contiene la tabla a partir de la que vas a crear la instantánea.
  • TABLE_DATASET_NAME: el nombre del conjunto de datos que contiene la tabla a partir de la que vas a crear la instantánea.
  • TABLE_NAME: el nombre de la tabla a partir de la que vas a crear la captura.
  • SNAPSHOT_PROJECT_ID: el ID del proyecto en el que se va a crear la captura.
  • SNAPSHOT_DATASET_NAME: el nombre del conjunto de datos en el que se va a crear la instantánea.
  • SNAPSHOT_NAME: el nombre de la captura que vas a crear.

Es obligatorio usar la marca --no_clobber.

API

Llama al método jobs.insert con los siguientes parámetros:

Parámetro Valor
projectId El ID del proyecto al que se le facturará esta operación.
Cuerpo de la solicitud
{
  "configuration": {
    "copy": {
      "sourceTables": [
        {
          "projectId": "TABLE_PROJECT_ID",
          "datasetId": "TABLE_DATASET_NAME",
          "tableId": "TABLE_NAME"
        }
      ],
      "destinationTable": {
        "projectId": "SNAPSHOT_PROJECT_ID",
        "datasetId": "SNAPSHOT_DATASET_NAME",
        "tableId": "SNAPSHOT_NAME"
      },
      "operationType": "SNAPSHOT",
      "writeDisposition": "WRITE_EMPTY",
      "destinationExpirationTime":"TIMESTAMP_VALUE"
    }
  }
}

Haz los cambios siguientes:

  • TABLE_PROJECT_ID: el ID del proyecto que contiene la tabla a partir de la que vas a crear la instantánea.
  • TABLE_DATASET_NAME: el nombre del conjunto de datos que contiene la tabla a partir de la que vas a crear la instantánea.
  • TABLE_NAME: el nombre de la tabla a partir de la que vas a crear la captura.
  • SNAPSHOT_PROJECT_ID: el ID del proyecto en el que se va a crear la captura.
  • SNAPSHOT_DATASET_NAME: el nombre del conjunto de datos en el que se va a crear la instantánea.
  • SNAPSHOT_NAME: el nombre de la captura que vas a crear.
  • TIMESTAMP_VALUE: un valor de marca de tiempo que representa la fecha y la hora de dentro de 24 horas.

Al igual que con las tablas, si no se especifica una fecha de vencimiento, la captura de tabla caducará tras el tiempo de vencimiento predeterminado de la tabla o del conjunto de datos que contenga la captura de tabla.

Crear una captura de tabla con la función de viaje en el tiempo

Puedes crear una instantánea de una tabla tal como estaba hace una hora con una de las siguientes opciones:

Consola

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

    Ir a BigQuery

  2. En el panel Explorador, despliega los nodos del proyecto y del conjunto de datos de la tabla de la que quieras crear una instantánea.

  3. Haga clic en el nombre de la tabla de la que quiera crear una instantánea.

  4. En el panel de la tabla que aparece, haga clic en Snapshot.

    Haz clic en Vista del día.

  5. En el panel Crear una copia de la tabla que aparece, introduce la información de Proyecto, Conjunto de datos y Tabla de la nueva copia de la tabla.

  6. En el campo Hora de la instantánea, introduce la fecha y la hora de hace una hora.

  7. Haz clic en Guardar.

SQL

Usa la declaración de DDL CREATE SNAPSHOT TABLE con una cláusula FOR SYSTEM_TIME AS OF:

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

    Ir a BigQuery

  2. En el editor de consultas, introduce la siguiente instrucción:

    CREATE SNAPSHOT TABLE SNAPSHOT_PROJECT_ID.SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME
    CLONE TABLE_PROJECT_ID.TABLE_DATASET_NAME.TABLE_NAME
    FOR SYSTEM_TIME AS OF
      TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);

    Haz los cambios siguientes:

    • SNAPSHOT_PROJECT_ID: el ID del proyecto en el que se va a crear la captura.
    • SNAPSHOT_DATASET_NAME: el nombre del conjunto de datos en el que se va a crear la instantánea.
    • SNAPSHOT_NAME: el nombre de la captura que vas a crear.
    • TABLE_PROJECT_ID: el ID del proyecto que contiene la tabla a partir de la que vas a crear la instantánea.
    • TABLE_DATASET_NAME: el nombre del conjunto de datos que contiene la tabla a partir de la que vas a crear la instantánea.
    • TABLE_NAME: el nombre de la tabla a partir de la que vas a crear la captura.

  3. Haz clic en Ejecutar.

Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.

bq

Introduce el siguiente comando en Cloud Shell:

Ir a Cloud Shell

bq cp \
--no_clobber \
--snapshot \
TABLE_PROJECT_ID:TABLE_DATASET_NAME.TABLE_NAME@-3600000 \
SNAPSHOT_PROJECT_ID:SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME

Haz los cambios siguientes:

  • TABLE_PROJECT_ID: el ID del proyecto que contiene la tabla a partir de la que vas a crear la instantánea.
  • TABLE_DATASET_NAME: el nombre del conjunto de datos que contiene la tabla a partir de la que vas a crear la instantánea.
  • TABLE_NAME: el nombre de la tabla a partir de la que vas a crear la captura.
  • SNAPSHOT_PROJECT_ID: el ID del proyecto en el que se va a crear la captura.
  • SNAPSHOT_DATASET_NAME: el nombre del conjunto de datos en el que se va a crear la instantánea.
  • SNAPSHOT_NAME: el nombre de la captura que vas a crear.

Es obligatorio usar la marca --no_clobber.

API

Llama al método jobs.insert con los siguientes parámetros:

Parámetro Valor
projectId El ID del proyecto al que se le facturará esta operación.
Cuerpo de la solicitud
{
  "configuration": {
    "copy": {
      "sourceTables": [
        {
          "projectId": "TABLE_PROJECT_ID",
          "datasetId": "TABLE_DATASET_NAME",
          "tableId": "TABLE_NAME@-360000"
        }
      ],
      "destinationTable": {
        "projectId": "SNAPSHOT_PROJECT_ID",
        "datasetId": "SNAPSHOT_DATASET_NAME",
        "tableId": "SNAPSHOT_NAME"
      },
      "operationType": "SNAPSHOT",
      "writeDisposition": "WRITE_EMPTY"
    }
  }
}

Haz los cambios siguientes:

  • TABLE_PROJECT_ID: el ID del proyecto que contiene la tabla a partir de la que vas a crear la instantánea.
  • TABLE_DATASET_NAME: el nombre del conjunto de datos que contiene la tabla a partir de la que vas a crear la instantánea.
  • TABLE_NAME: el nombre de la tabla a partir de la que vas a crear la captura.
  • SNAPSHOT_PROJECT_ID: el ID del proyecto en el que se va a crear la captura.
  • SNAPSHOT_DATASET_NAME: el nombre del conjunto de datos en el que se va a crear la instantánea.
  • SNAPSHOT_NAME: el nombre de la captura que vas a crear.

Para obtener más información sobre cómo especificar una versión anterior de una tabla, consulta el artículo Acceder a datos históricos con la función de viaje en el tiempo.

Control de acceso a tablas

Para controlar el acceso a las tablas de BigQuery, consulta el artículo sobre cómo controlar el acceso a los recursos con la gestión de identidades y accesos.

Cuando creas una captura de tabla, el acceso a nivel de tabla a la captura de tabla se define de la siguiente manera:

  • Si la captura de la tabla sobrescribe una tabla, se mantiene el acceso a nivel de tabla de la tabla. Las etiquetas no se copian de la tabla base.
  • Si la instantánea de la tabla es un recurso nuevo, el acceso a nivel de tabla de la instantánea se determina mediante las políticas de acceso del conjunto de datos en el que se crea la instantánea. Además, las etiquetas se copian de la tabla base a la captura de tabla.

Siguientes pasos