Crie instantâneos de tabelas

Este documento descreve como criar um instantâneo de uma tabela através da Google Cloud consola, da declaração SQL CREATE SNAPSHOT TABLE, do comando bq cp --snapshot ou da API jobs.insert. Este documento destina-se a utilizadores que estão familiarizados com os instantes de tabelas do BigQuery.

Autorizações e funções

Esta secção descreve as autorizações da Identity and Access Management (IAM) de que precisa para criar uma cópia instantânea da tabela e as funções de IAM predefinidas que concedem essas autorizações.

Autorizações

Para criar uma captura instantânea de uma tabela, precisa das seguintes autorizações:

Autorização Recurso Notes
Todas as seguintes opções:

bigquery.tables.get
bigquery.tables.getData
bigquery.tables.createSnapshot
bigquery.datasets.get
bigquery.jobs.create
A tabela da qual quer criar uma imagem instantânea. Uma vez que a validade do resumo elimina o resumo mais tarde, para criar um resumo com um prazo de validade, tem de ter a autorização bigquery.tables.deleteSnapshot.
bigquery.tables.create
bigquery.tables.updateData
O conjunto de dados que contém o instantâneo da tabela.

Funções

As funções predefinidas do BigQuery que fornecem as autorizações necessárias são as seguintes:

Role Recurso Notes
Pelo menos um dos seguintes:

bigquery.dataViewer
bigquery.dataEditor
bigquery.dataOwner

E, pelo menos, um dos seguintes:

bigquery.jobUser
bigquery.studioUser
bigquery.user
bigquery.studioAdmin
bigquery.admin
A tabela da qual quer criar uma imagem instantânea. Só é possível usar bigquery.dataOwner, bigquery.admin e bigquery.studioAdmin para criar um instantâneo com um prazo de validade.
Pelo menos um dos seguintes:

bigquery.dataEditor
bigquery.dataOwner
bigquery.studioAdmin
bigquery.admin
O conjunto de dados que contém o novo instantâneo da tabela.

Limitações

Para ver informações sobre as limitações das capturas instantâneas de tabelas, consulte o artigo Limitações das capturas instantâneas de tabelas.

Além disso, a criação de instantâneos de tabelas está sujeita às seguintes limitações, que se aplicam a todas as tarefas de cópia de tabelas:

  • Quando cria uma cópia instantânea de uma tabela, o respetivo nome tem de cumprir as mesmas regras de nomenclatura que quando cria uma tabela.
  • A criação de instantâneos de tabelas está sujeita aos limites do BigQuery em tarefas de cópia.
  • O conjunto de dados de instantâneo da tabela tem de estar na mesma região e na mesma organização que o conjunto de dados que contém a tabela da qual está a tirar um instantâneo. Por exemplo, não pode criar uma cópia instantânea de uma tabela num conjunto de dados sediado nos EUA de uma tabela localizada num conjunto de dados sediado na UE. Em alternativa, tem de fazer uma cópia da tabela.
  • O tempo que o BigQuery demora a criar instantâneos de tabelas pode variar significativamente entre diferentes execuções, uma vez que o armazenamento subjacente é gerido dinamicamente.
  • Quando cria um instantâneo de tabela através da CLI do BigQuery, o instantâneo tem a chave de encriptação predefinida do conjunto de dados de destino. Quando cria um instantâneo de uma tabela usando SQL, o instantâneo tem a mesma chave de encriptação que a tabela de origem.

Crie um instantâneo de tabela

A prática recomendada é criar um resumo da tabela num conjunto de dados diferente da tabela base. Esta prática permite restaurar a tabela base a partir da respetiva captura instantânea da tabela, mesmo que o conjunto de dados da tabela base seja eliminado acidentalmente.

Quando cria uma cópia instantânea de uma tabela, especifica a tabela da qual quer criar uma cópia instantânea e um nome exclusivo para a cópia instantânea da tabela. Opcionalmente, pode especificar a hora do instantâneo e a expiração do instantâneo da tabela.

Crie um instantâneo de tabela com uma data de validade

Pode criar um resumo de uma tabela que expira após 24 horas através de uma das seguintes opções:

Consola

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No painel Explorador, expanda os nós do projeto e do conjunto de dados da tabela que quer criar uma imagem instantânea.

  3. Clique no nome da tabela da qual quer criar uma imagem instantânea.

  4. No painel da tabela apresentado, clique em Snapshot.

    Clique em Snapshot

  5. No painel Criar instantâneo da tabela apresentado, introduza as informações de Projeto, Conjunto de dados e Tabela para o novo instantâneo da tabela.

  6. No campo Hora de validade, introduza a data e a hora para 24 horas a partir de agora.

  7. Clique em Guardar.

SQL

Use a CREATE SNAPSHOT TABLE declaração DDL:

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, introduza a seguinte declaração:

    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');

    Substitua o seguinte:

    • SNAPSHOT_PROJECT_ID: o ID do projeto do projeto no qual criar a captura instantânea.
    • SNAPSHOT_DATASET_NAME: o nome do conjunto de dados no qual criar a imagem instantânea.
    • SNAPSHOT_NAME: o nome do instantâneo que está a criar.
    • TABLE_PROJECT_ID: o ID do projeto do projeto que contém a tabela a partir da qual está a criar a imagem instantânea.
    • TABLE_DATASET_NAME: o nome do conjunto de dados que contém a tabela a partir da qual está a criar a imagem instantânea.
    • TABLE_NAME: o nome da tabela a partir da qual está a criar o resumo.
    • TIMESTAMP_VALUE: um valor de data/hora que representa a data e a hora 24 horas a partir de agora.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

bq

Introduza o seguinte comando no Cloud Shell:

Aceda ao 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

Substitua o seguinte:

  • TABLE_PROJECT_ID: o ID do projeto do projeto que contém a tabela a partir da qual está a criar a imagem instantânea.
  • TABLE_DATASET_NAME: o nome do conjunto de dados que contém a tabela a partir da qual está a criar a imagem instantânea.
  • TABLE_NAME: o nome da tabela a partir da qual está a criar o resumo.
  • SNAPSHOT_PROJECT_ID: o ID do projeto do projeto no qual criar a captura instantânea.
  • SNAPSHOT_DATASET_NAME: o nome do conjunto de dados no qual criar a imagem instantânea.
  • SNAPSHOT_NAME: o nome do instantâneo que está a criar.

A flag --no_clobber é obrigatória.

API

Chame o método jobs.insert com os seguintes parâmetros:

Parâmetro Valor
projectId O ID do projeto a faturar para esta operação.
Corpo do pedido
{
  "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"
    }
  }
}

Substitua o seguinte:

  • TABLE_PROJECT_ID: o ID do projeto do projeto que contém a tabela a partir da qual está a criar a imagem instantânea.
  • TABLE_DATASET_NAME: o nome do conjunto de dados que contém a tabela a partir da qual está a criar a imagem instantânea.
  • TABLE_NAME: o nome da tabela a partir da qual está a criar o resumo.
  • SNAPSHOT_PROJECT_ID: o ID do projeto do projeto no qual criar a captura instantânea.
  • SNAPSHOT_DATASET_NAME: o nome do conjunto de dados no qual criar a imagem instantânea.
  • SNAPSHOT_NAME: o nome do instantâneo que está a criar.
  • TIMESTAMP_VALUE: um valor de data/hora que representa a data e a hora 24 horas a partir de agora.

Tal como acontece com as tabelas, se não for especificada uma data de validade, a cópia instantânea da tabela expira após o tempo de validade predefinido da tabela ou do conjunto de dados que contém a cópia instantânea da tabela.

Crie um instantâneo de tabela com a viagem no tempo

Pode criar um resumo de uma tabela tal como estava há uma hora através de uma das seguintes opções:

Consola

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No painel Explorador, expanda os nós do projeto e do conjunto de dados da tabela que quer criar uma imagem instantânea.

  3. Clique no nome da tabela da qual quer criar uma imagem instantânea.

  4. No painel da tabela apresentado, clique em Snapshot.

    Clique em Snapshot

  5. No painel Criar instantâneo da tabela apresentado, introduza as informações de Projeto, Conjunto de dados e Tabela para o novo instantâneo da tabela.

  6. No campo Hora da captura, introduza a data e a hora de há 1 hora.

  7. Clique em Guardar.

SQL

Use a CREATE SNAPSHOT TABLE declaração DDL com uma cláusula FOR SYSTEM_TIME AS OF:

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, introduza a seguinte declaração:

    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);

    Substitua o seguinte:

    • SNAPSHOT_PROJECT_ID: o ID do projeto do projeto no qual criar a captura instantânea.
    • SNAPSHOT_DATASET_NAME: o nome do conjunto de dados no qual criar a imagem instantânea.
    • SNAPSHOT_NAME: o nome do instantâneo que está a criar.
    • TABLE_PROJECT_ID: o ID do projeto do projeto que contém a tabela a partir da qual está a criar a imagem instantânea.
    • TABLE_DATASET_NAME: o nome do conjunto de dados que contém a tabela a partir da qual está a criar a imagem instantânea.
    • TABLE_NAME: o nome da tabela a partir da qual está a criar o resumo.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

bq

Introduza o seguinte comando no Cloud Shell:

Aceda ao Cloud Shell

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

Substitua o seguinte:

  • TABLE_PROJECT_ID: o ID do projeto do projeto que contém a tabela a partir da qual está a criar a imagem instantânea.
  • TABLE_DATASET_NAME: o nome do conjunto de dados que contém a tabela a partir da qual está a criar a imagem instantânea.
  • TABLE_NAME: o nome da tabela a partir da qual está a criar o resumo.
  • SNAPSHOT_PROJECT_ID: o ID do projeto do projeto no qual criar a captura instantânea.
  • SNAPSHOT_DATASET_NAME: o nome do conjunto de dados no qual criar a imagem instantânea.
  • SNAPSHOT_NAME: o nome do instantâneo que está a criar.

A flag --no_clobber é obrigatória.

API

Chame o método jobs.insert com os seguintes parâmetros:

Parâmetro Valor
projectId O ID do projeto a faturar para esta operação.
Corpo do pedido
{
  "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"
    }
  }
}

Substitua o seguinte:

  • TABLE_PROJECT_ID: o ID do projeto do projeto que contém a tabela a partir da qual está a criar a imagem instantânea.
  • TABLE_DATASET_NAME: o nome do conjunto de dados que contém a tabela a partir da qual está a criar a imagem instantânea.
  • TABLE_NAME: o nome da tabela a partir da qual está a criar o resumo.
  • SNAPSHOT_PROJECT_ID: o ID do projeto do projeto no qual criar a captura instantânea.
  • SNAPSHOT_DATASET_NAME: o nome do conjunto de dados no qual criar a imagem instantânea.
  • SNAPSHOT_NAME: o nome do instantâneo que está a criar.

Para mais informações sobre como especificar uma versão anterior de uma tabela, consulte o artigo Aceder a dados do histórico através da viagem no tempo.

Controlo de acesso a tabelas

Para controlar o acesso a tabelas no BigQuery, consulte o artigo Controle o acesso a recursos com a IAM.

Quando cria uma cópia instantânea de uma tabela, o acesso ao nível da tabela à cópia instantânea da tabela é definido da seguinte forma:

  • Se a cópia instantânea da tabela substituir uma tabela existente, o acesso ao nível da tabela para a tabela existente é mantido. As etiquetas não são copiadas da tabela base.
  • Se o instantâneo da tabela for um novo recurso, o acesso ao nível da tabela para o instantâneo da tabela é determinado pelas políticas de acesso do conjunto de dados no qual o instantâneo da tabela é criado. Além disso, as etiquetas são copiadas da tabela base para a tabela de instantâneo.

O que se segue?