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

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

    Ir a BigQuery

  2. 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.

  3. Haz clic en el nombre de la tabla de la que deseas realizar una instantánea.

  4. En el panel de tabla que aparece, haz clic en Instantánea.

    Haz clic en la instantánea

  5. 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.

  6. En el campo Hora de vencimiento, ingresa la fecha y hora de 24 horas desde ahora.

  7. Haz clic en Guardar.

SQL

Usa la declaración DDL CREATE SNAPSHOT TABLE:

  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:

    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.

  3. 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:

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

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

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

    Ir a BigQuery

  2. 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.

  3. Haz clic en el nombre de la tabla de la que deseas realizar una instantánea.

  4. En el panel de tabla que aparece, haz clic en Instantánea.

    Haz clic en la instantánea

  5. 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.

  6. En el campo Hora de la instantánea, ingresa la fecha y hora de 1 hora antes.

  7. Haz clic en Guardar.

SQL

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

  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:

    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.

  3. 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:

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

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?