Crea instantáneas de tablas
En este documento, se describe cómo crear una instantánea de una tabla mediante la consola de Google Cloud, la instrucción de SQL CREATE SNAPSHOT TABLE
, el comando bq cp --snapshot
o la API de jobs.insert
. Este documento está dirigido a usuarios que estén familiarizados con las instantáneas de tablas de BigQuery.
Permisos y funciones
En esta sección, se describen los permisos de administración de identidades y accesos (IAM) que necesitas para crear una instantánea de tabla y las funciones predefinidas de IAM que otorgan esos permisos.
Permisos
Para crear una instantánea de tabla, necesitas los siguientes permisos:
Permiso | Recurso | Notas |
---|---|---|
Todos los siguientes:bigquery.tables.get bigquery.tables.getData bigquery.tables.createSnapshot bigquery.datasets.get bigquery.jobs.create
|
Es la tabla que deseas para crear una instantánea. | Debido a que el vencimiento de la instantánea borra la instantánea más adelante, para crear una instantánea con una hora de vencimiento, debes tener el permiso bigquery.tables.deleteSnapshot . |
bigquery.tables.create bigquery.tables.updateData
|
El conjunto de datos que contiene la instantánea de la tabla. |
Funciones
A continuación, se enumeran los roles predefinidos de BigQuery que proporcionan los permisos necesarios:
Función | 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
|
Es la tabla que deseas para crear una instantánea. | Solo se pueden usar bigquery.dataOwner , bigquery.admin y bigquery.studioAdmin para crear una instantánea con una hora de vencimiento. |
Debes elegir, 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 instantáneas de las tablas, consulta Limitaciones de las instantáneas de tablas.
Además, la creación de instantáneas de tablas está sujeta a las siguientes limitaciones, que se aplican a todos los trabajos de copia de tablas:
- Cuando creas una instantánea de tabla, su nombre debe respetar las mismas reglas de nombres que cuando creas una tabla.
- La creación de instantáneas de tablas está sujeta a límites de BigQuery para trabajos de copia.
- El conjunto de datos de la instantánea de la 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 estás tomando una instantánea. Por ejemplo, no puedes crear una instantánea de tabla en un conjunto de datos ubicado en EE.UU. de una tabla ubicada en un conjunto de datos de la UE. En su lugar, necesitarías hacer una copia de la tabla.
- El tiempo que BigQuery tarda en crear las instantáneas de la tabla puede variar de manera significativa en las diferentes ejecuciones porque el almacenamiento subyacente se administra de forma dinámica.
- Cuando se crea una instantánea de tabla con la CLI de BigQuery, la instantánea tiene la clave de encriptación predeterminada del conjunto de datos de destino. Cuando creas una instantánea de tabla a través de SQL, la instantánea tiene la misma clave de encriptación que la tabla de origen.
Crea una instantánea de tabla.
Se recomienda crear una instantánea de la tabla en un conjunto de datos diferente de la tabla de base. Esta práctica permite restablecer la tabla de base a partir de su instantánea, incluso si el conjunto de datos de la tabla de base se borra por accidente.
Cuando creas una instantánea de tabla, debes especificar la tabla que deseas capturar y un nombre único para ella. De manera opcional, puedes especificar la hora y el vencimiento de la instantánea de la tabla.
Crea una instantánea de tabla con un vencimiento
Puedes crear una instantánea de una tabla que venza después de 24 horas con una de las siguientes opciones:
Console
En la consola de Google Cloud, ve a la página de BigQuery.
En el panel Explorador, expande los nodos del proyecto y del conjunto de datos de la tabla de la que deseas realizar una instantánea.
Haz clic en el nombre de la tabla de la que deseas realizar una instantánea.
En el panel de tabla que aparece, haz clic en Instantánea.
En el panel Crear instantánea de la tabla que aparece, ingresa la información Proyecto, Conjunto de datos y Tabla para la nueva instantánea de tabla.
En el campo Hora de vencimiento, ingresa la fecha y hora de 24 horas desde ahora.
Haz clic en Guardar.
SQL
Usa la declaración DDL CREATE SNAPSHOT TABLE
:
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, escribe la siguiente oració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');
Reemplaza lo siguiente:
SNAPSHOT_PROJECT_ID
: Es el ID del proyecto en el que se creará la instantánea.SNAPSHOT_DATASET_NAME
: Es el nombre del conjunto de datos en el que se creará la instantánea.SNAPSHOT_NAME
: Es el nombre de la instantánea que creas.TABLE_PROJECT_ID
: Es el ID del proyecto que contiene la tabla a partir de la cual creas la instantánea.TABLE_DATASET_NAME
: Es el nombre del conjunto de datos que contiene la tabla a partir de la que creas la instantánea.TABLE_NAME
: Es el nombre de la tabla a partir de la que creas la instantánea.TIMESTAMP_VALUE
: un valor de marca de tiempo que representa la fecha y hora de 24 horas a partir de ahora.
Haz clic en
Ejecutar.
Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.
bq
Escribe 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
Reemplaza lo siguiente:
TABLE_PROJECT_ID
: Es el ID del proyecto que contiene la tabla a partir de la cual creas la instantánea.TABLE_DATASET_NAME
: Es el nombre del conjunto de datos que contiene la tabla a partir de la que creas la instantánea.TABLE_NAME
: Es el nombre de la tabla a partir de la que creas la instantánea.SNAPSHOT_PROJECT_ID
: Es el ID del proyecto en el que se creará la instantánea.SNAPSHOT_DATASET_NAME
: Es el nombre del conjunto de datos en el que se creará la instantánea.SNAPSHOT_NAME
: Es el nombre de la instantánea que crearás.
La marca --no_clobber
es obligatoria.
API
Llama al método jobs.insert
con los siguientes parámetros:
Parámetro | Valor |
---|---|
projectId |
El ID del proyecto que se facturará para 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" } } } |
Reemplaza lo siguiente:
TABLE_PROJECT_ID
: Es el ID del proyecto que contiene la tabla a partir de la cual creas la instantánea.TABLE_DATASET_NAME
: Es el nombre del conjunto de datos que contiene la tabla a partir de la que creas la instantánea.TABLE_NAME
: Es el nombre de la tabla a partir de la que creas la instantánea.SNAPSHOT_PROJECT_ID
: Es el ID del proyecto en el que se creará la instantánea.SNAPSHOT_DATASET_NAME
: Es el nombre del conjunto de datos en el que se creará la instantánea.SNAPSHOT_NAME
: Es el nombre de la instantánea que creas.TIMESTAMP_VALUE
: un valor de marca de tiempo que representa la fecha y hora de 24 horas a partir de ahora.
Al igual que con las tablas, si no se especifica un vencimiento, la instantánea de la tabla vence después de la hora predeterminada de vencimiento de tabla o del conjunto de datos que contiene la instantánea de la tabla.
Crea una instantánea de la tabla con la función viaje en el tiempo
Puedes crear una instantánea de tabla de una tabla de hace una hora con una de las siguientes opciones:
Console
En la consola de Google Cloud, ve a la página de BigQuery.
En el panel Explorador, expande los nodos del proyecto y del conjunto de datos de la tabla de la que deseas realizar una instantánea.
Haz clic en el nombre de la tabla de la que deseas realizar una instantánea.
En el panel de tabla que aparece, haz clic en Instantánea.
En el panel Crear instantánea de la tabla que aparece, ingresa la información Proyecto, Conjunto de datos y Tabla para la nueva instantánea de tabla.
En el campo Hora de la instantánea, ingresa la fecha y hora de 1 hora antes.
Haz clic en Guardar.
SQL
Usa la declaración DDL CREATE SNAPSHOT TABLE
con una cláusula FOR SYSTEM_TIME AS OF
:
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, escribe la siguiente oració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);
Reemplaza lo siguiente:
SNAPSHOT_PROJECT_ID
: Es el ID del proyecto en el que se creará la instantánea.SNAPSHOT_DATASET_NAME
: Es el nombre del conjunto de datos en el que se creará la instantánea.SNAPSHOT_NAME
: Es el nombre de la instantánea que creas.TABLE_PROJECT_ID
: Es el ID del proyecto que contiene la tabla a partir de la cual creas la instantánea.TABLE_DATASET_NAME
: Es el nombre del conjunto de datos que contiene la tabla a partir de la que creas la instantánea.TABLE_NAME
: Es el nombre de la tabla a partir de la que creas la instantánea.
Haz clic en
Ejecutar.
Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.
bq
Escribe 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
Reemplaza lo siguiente:
TABLE_PROJECT_ID
: Es el ID del proyecto que contiene la tabla a partir de la cual creas la instantánea.TABLE_DATASET_NAME
: Es el nombre del conjunto de datos que contiene la tabla a partir de la que creas la instantánea.TABLE_NAME
: Es el nombre de la tabla a partir de la que creas la instantánea.SNAPSHOT_PROJECT_ID
: Es el ID del proyecto en el que se creará la instantánea.SNAPSHOT_DATASET_NAME
: Es el nombre del conjunto de datos en el que se creará la instantánea.SNAPSHOT_NAME
: Es el nombre de la instantánea que crearás.
La marca --no_clobber
es obligatoria.
API
Llama al método jobs.insert
con los siguientes parámetros:
Parámetro | Valor |
---|---|
projectId |
El ID del proyecto que se facturará para 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" } } } |
Reemplaza lo siguiente:
TABLE_PROJECT_ID
: Es el ID del proyecto que contiene la tabla a partir de la cual creas la instantánea.TABLE_DATASET_NAME
: Es el nombre del conjunto de datos que contiene la tabla a partir de la que creas la instantánea.TABLE_NAME
: Es el nombre de la tabla a partir de la que creas la instantánea.SNAPSHOT_PROJECT_ID
: Es el ID del proyecto en el que se creará la instantánea.SNAPSHOT_DATASET_NAME
: Es el nombre del conjunto de datos en el que se creará la instantánea.SNAPSHOT_NAME
: Es el nombre de la instantánea que creas.
Si deseas obtener más información para especificar una versión anterior de una tabla, consulta Accede a datos históricos con la función Viaje en el tiempo.
Control de acceso a tablas
Para controlar el acceso a las tablas en BigQuery, consulta Introducción a los controles de acceso a tablas.
Cuando creas una instantánea de tabla, el acceso a nivel de tabla a la instantánea de la tabla se establece de la siguiente manera:
- Si la instantánea de tabla reemplaza una tabla existente, se mantendrá el acceso a nivel de tabla para la tabla existente. Las etiquetas no se copian de la tabla base.
- Si la instantánea de tabla es un recurso nuevo, el acceso a nivel de tabla para la instantánea de tabla se determina según las políticas de acceso del conjunto de datos en el que se crea la instantánea de tabla. Además, las etiquetas se copian de la tabla base a la instantánea de tabla.
¿Qué sigue?
- Actualiza la descripción, la fecha de vencimiento o la política de acceso de una instantánea de tabla.
- Restablece una instantánea de tabla.
- Crea instantáneas mensuales de una tabla con una cuenta de servicio que ejecute una consulta programada.