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
En la Google Cloud consola, ve a la página BigQuery.
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.
Haga clic en el nombre de la tabla de la que quiera crear una instantánea.
En el panel de la tabla que aparece, haga clic en Snapshot.
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.
En el campo Expiration time (Hora de vencimiento), introduce la fecha y la hora de 24 horas a partir de ahora.
Haz clic en Guardar.
SQL
Usa la CREATE SNAPSHOT TABLE
declaración de DDL:
En la Google Cloud consola, ve a la página BigQuery.
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.
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:
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
En la Google Cloud consola, ve a la página BigQuery.
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.
Haga clic en el nombre de la tabla de la que quiera crear una instantánea.
En el panel de la tabla que aparece, haga clic en Snapshot.
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.
En el campo Hora de la instantánea, introduce la fecha y la hora de hace una hora.
Haz clic en Guardar.
SQL
Usa la declaración de DDL CREATE SNAPSHOT TABLE
con una cláusula FOR SYSTEM_TIME AS OF
:
En la Google Cloud consola, ve a la página BigQuery.
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.
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:
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
- Actualiza la descripción, la fecha de vencimiento o la política de acceso de una captura de tabla.
- Restaurar una captura de una tabla.
- Crea copias de una tabla cada mes mediante una cuenta de servicio que ejecute una consulta programada.