Criar snapshots de tabelas

Neste documento, você verá como criar um snapshot de uma tabela usando o Console do Google Cloud, a instrução SQL CREATE SNAPSHOT TABLE, o comando bq cp --snapshot ou a API jobs.insert. Este documento é destinado a usuários familiarizados com snapshots de tabelas do BigQuery.

Permissões e papéis

Esta seção descreve os Permissões de gerenciamento de identidade e acesso (IAM) necessário criar um snapshot da tabela. papéis predefinidos do IAM que concedem essas permissões.

Permissões

Para criar um snapshot de tabela, você precisa das seguintes permissões:

Permissão Recurso Observações
Todas as opções a seguir:

bigquery.tables.get
bigquery.tables.getData
bigquery.tables.createSnapshot
bigquery.datasets.get
bigquery.jobs.create
A tabela para que você quer criar o snapshot. Você precisa da permissão bigquery.tables.deleteSnapshot para criar um snapshot com prazo de validade, porque a validade de um snapshot é equivalente à exclusão posterior dele.
bigquery.tables.create
bigquery.tables.updateData
O conjunto de dados que contém o snapshot da tabela.

Papéis

Os papéis predefinidos do BigQuery que fornecem as permissões necessárias são os seguintes:

Papel Recurso Observações
Qualquer um dos seguintes:

bigquery.dataViewer
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
A tabela para que você quer criar o snapshot. Somente bigquery.dataOwner e bigquery.admin podem ser usados para a criação de um snapshot com prazo de validade.
Qualquer um dos seguintes:

bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
O conjunto de dados que contém o novo snapshot da tabela.

Limitações

Para informações sobre as limitações de snapshots de tabelas, consulte Limitações de snapshots de tabelas.

Além disso, a criação de snapshots de tabelas está sujeita às seguintes limitações, que se aplicam a todos os jobs de cópia de tabela:

  • Quando você cria um snapshot da tabela, o nome precisa seguir as mesmas regras de nomenclatura de quando você cria uma tabela.
  • A criação de snapshots de tabelas está sujeita aos limites do BigQuery nos jobs de cópia.
  • O conjunto de dados do snapshot da tabela precisa estar na mesma região e na mesma organização que o conjunto de dados que contém a tabela da qual você está tirando um snapshot. Por exemplo, não é possível criar um snapshot de tabela em um conjunto de dados localizado nos EUA de uma tabela localizada em um conjunto de dados localizado na UE. Seria necessário fazer uma cópia da tabela.
  • O tempo que o BigQuery leva para criar snapshots de tabelas pode variar significativamente em diferentes execuções, porque o armazenamento subjacente é gerenciado dinamicamente.

Criar um snapshot da tabela

A prática recomendada é criar um snapshot da tabela em um conjunto de dados diferente da tabela de base. Essa prática permite que a tabela seja restaurada a partir do snapshot dela mesmo que o conjunto de dados seja excluído acidentalmente.

Ao criar um snapshot da tabela, especifique a tabela que será o snapshot e um nome exclusivo para ele. Opcionalmente, é possível especificar o horário do snapshot e a expiração do snapshot da tabela.

Criar um snapshot da tabela com uma expiração

É possível criar um snapshot de uma tabela que expire após 24 horas usando uma das seguintes opções:

Console

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No painel Explorer, expanda os nós do projeto e do conjunto de dados da tabela que você quer capturar no snapshot.

  3. Clique no nome da tabela da qual você quer criar um snapshot.

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

    Clique no snapshot

  5. No painel Criar snapshot da tabela mostrado, insira as informações de Projeto, Conjunto de dados e da Tabela para o novo snapshot da tabela.

  6. No campo Prazo de validade, insira a data e a hora para o prazo de 24 horas.

  7. Clique em Save.

SQL

Use a instrução DDL CREATE SNAPSHOT TABLE:

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No editor de consultas, digite a seguinte instruçã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:

    • SNAPSHOT_PROJECT_ID: o ID do projeto em que o snapshot será criado.
    • SNAPSHOT_DATASET_NAME: o nome do conjunto de dados em que o snapshot será criado.
    • SNAPSHOT_NAME: o nome do snapshot que você está criando.
    • TABLE_PROJECT_ID: o ID do projeto que contém a tabela que você está usando para criar o snapshot.
    • TABLE_DATASET_NAME: o nome do conjunto de dados que contém a tabela que você está usando para criar o snapshot.
    • TABLE_NAME: o nome da tabela que você está usando para criar o snapshot.
    • TIMESTAMP_VALUE: um valor de carimbo 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, acesse Executar uma consulta interativa.

bq

Digite o seguinte comando no Cloud Shell:

Acesse o 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:

  • TABLE_PROJECT_ID: o ID do projeto que contém a tabela que você está usando para criar o snapshot.
  • TABLE_DATASET_NAME: o nome do conjunto de dados que contém a tabela que você está usando para criar o snapshot.
  • TABLE_NAME: o nome da tabela que você está usando para criar o snapshot.
  • SNAPSHOT_PROJECT_ID: o ID do projeto em que o snapshot será criado.
  • SNAPSHOT_DATASET_NAME: o nome do conjunto de dados em que o snapshot será criado.
  • SNAPSHOT_NAME: o nome do snapshot que você está criando.

A sinalização --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 ser faturado por esta operação.
Corpo da solicitação

{
  "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:

  • TABLE_PROJECT_ID: o ID do projeto que contém a tabela que você está usando para criar o snapshot.
  • TABLE_DATASET_NAME: o nome do conjunto de dados que contém a tabela que você está usando para criar o snapshot.
  • TABLE_NAME: o nome da tabela que você está usando para criar o snapshot.
  • SNAPSHOT_PROJECT_ID: o ID do projeto em que o snapshot será criado.
  • SNAPSHOT_DATASET_NAME: o nome do conjunto de dados em que o snapshot será criado.
  • SNAPSHOT_NAME: o nome do snapshot que você está criando.
  • TIMESTAMP_VALUE: um valor de carimbo de data/hora que representa a data e a hora 24 horas a partir de agora.

Como acontece com as tabelas, se uma expiração não for especificada, o snapshot da tabela expirará após o prazo de validade padrão da tabela ou conjunto de dados que contém o snapshot da tabela.

Criar um snapshot da tabela usando a viagem no tempo

É possível criar um snapshot da tabela como ela era há uma hora usando uma das seguintes opções:

Console

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No painel Explorer, expanda os nós do projeto e do conjunto de dados da tabela que você quer capturar no snapshot.

  3. Clique no nome da tabela da qual você quer criar um snapshot.

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

    Clique no snapshot

  5. No painel Criar snapshot da tabela mostrado, insira as informações de Projeto, Conjunto de dados e da Tabela para o novo snapshot da tabela.

  6. No campo Hora do snapshot, digite a data e a hora há uma hora.

  7. Clique em Save.

SQL

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

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No editor de consultas, digite a seguinte instruçã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:

    • SNAPSHOT_PROJECT_ID: o ID do projeto em que o snapshot será criado.
    • SNAPSHOT_DATASET_NAME: o nome do conjunto de dados em que o snapshot será criado.
    • SNAPSHOT_NAME: o nome do snapshot que você está criando.
    • TABLE_PROJECT_ID: o ID do projeto que contém a tabela que você está usando para criar o snapshot.
    • TABLE_DATASET_NAME: o nome do conjunto de dados que contém a tabela que você está usando para criar o snapshot.
    • TABLE_NAME: o nome da tabela que você está usando para criar o snapshot.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.

bq

Digite o seguinte comando no Cloud Shell:

Acesse o 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:

  • TABLE_PROJECT_ID: o ID do projeto que contém a tabela que você está usando para criar o snapshot.
  • TABLE_DATASET_NAME: o nome do conjunto de dados que contém a tabela que você está usando para criar o snapshot.
  • TABLE_NAME: o nome da tabela que você está usando para criar o snapshot.
  • SNAPSHOT_PROJECT_ID: o ID do projeto em que o snapshot será criado.
  • SNAPSHOT_DATASET_NAME: o nome do conjunto de dados em que o snapshot será criado.
  • SNAPSHOT_NAME: o nome do snapshot que você está criando.

A sinalização --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 ser faturado por esta operação.
Corpo da solicitação

{
  "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:

  • TABLE_PROJECT_ID: o ID do projeto que contém a tabela que você está usando para criar o snapshot.
  • TABLE_DATASET_NAME: o nome do conjunto de dados que contém a tabela que você está usando para criar o snapshot.
  • TABLE_NAME: o nome da tabela que você está usando para criar o snapshot.
  • SNAPSHOT_PROJECT_ID: o ID do projeto em que o snapshot será criado.
  • SNAPSHOT_DATASET_NAME: o nome do conjunto de dados em que o snapshot será criado.
  • SNAPSHOT_NAME: o nome do snapshot que você está criando.

Para mais informações sobre como especificar uma versão anterior de uma tabela, consulte Como acessar dados históricos usando a viagem no tempo.

Controle de acesso à tabela

Para controlar o acesso a tabelas no BigQuery, consulte Introdução aos controles de acesso a tabelas.

Quando você cria um snapshot de tabela, o acesso no nível da tabela a ele é definido da seguinte maneira:

  • Se o snapshot da tabela substituir uma tabela já existente, o acesso no nível dessa tabela será mantido. As Tags não são copiadas da tabela base.
  • Se o snapshot da tabela for um novo recurso, o acesso no nível da tabela a esse snapshot será determinado pelas políticas de acesso do conjunto de dados em que o snapshot da tabela foi criado. Além disso, as tags são copiadas da tabela base para o snapshot da tabela.

A seguir