Criar snapshots de tabelas com uma consulta programada
Neste documento, descrevemos como criar snapshots mensais de uma tabela usando uma conta de serviço que executa uma consulta DDL programada. O documento mostra o exemplo a seguir:
- No projeto
PROJECT, crie uma conta de serviço chamadasnapshot-bot. - Conceda à conta de serviço
snapshot-botas permissões necessárias para capturar snapshots de tabela da tabelaTABLE, que está localizada noDATASETe armazene os snapshots da tabela no conjunto de dadosBACKUP. - Grave uma consulta que crie snapshots mensais da tabela
TABLEe os coloque no conjunto de dadosBACKUP. Como não é possível substituir um snapshot de tabela existente, esses snapshots precisam ter nomes exclusivos. Para isso, a consulta anexa a data atual aos nomes de snapshot da tabela; por exemplo,TABLE_20220521; Os snapshots da tabela expiram após 40 dias. - Programe a conta de serviço
snapshot-botpara executar a consulta no primeiro dia de cada mês.
Este documento é destinado a usuários familiarizados com o BigQuery e com os snapshots da tabela do BigQuery.
Permissões e papéis
Esta seção descreve asPermissões de gerenciamento de identidade e acesso (IAM, na sigla em inglês) Você precisa criar uma conta de serviço e agendar uma consulta.papéis predefinidos do IAM que concede essas permissões.
Permissões
Para trabalhar com uma conta de serviço, você precisa das seguintes permissões:
| Permissão | Recurso | Resource type |
|---|---|---|
iam.serviceAccounts.*
|
PROJECT |
Projeto |
Para programar uma consulta, você precisa desta permissões:
| Permissão | Recurso | Resource type |
|---|---|---|
bigquery.jobs.create
|
PROJECT |
Projeto |
Papéis
Os papéis predefinidos que fornecem as permissões necessárias para trabalhar com uma conta de serviço são os seguintes:
| Papel | Recurso | Resource type |
|---|---|---|
Qualquer um dos seguintes:roles/iam.serviceAccountAdminroles/editorroles/owner
|
PROJECT |
Projeto |
Os papéis predefinidos do BigQuery que fornecem as permissões necessárias para programar uma consulta são os seguintes:
| Papel | Recurso | Resource type |
|---|---|---|
Qualquer um dos seguintes:roles/bigquery.userroles/bigquery.jobuserroles/bigquery.admin`
|
PROJECT |
Projeto |
Crie a conta de serviço snapshot-bot
Siga estas etapas para criar a conta de serviço snapshot-bot e conceder a ela as permissões necessárias para executar consultas. o projeto PROJECT:
Console
No console Google Cloud , acesse a página Contas de serviço:
Selecione o projeto
PROJECT.Crie a conta de serviço
snapshot-bot:Clique em Criar conta de serviço.
No campo Nome da conta de serviço, digite snapshot-bot.
Clique em Criar e continuar.
Conceda à conta de serviço as permissões necessárias para executar jobs do BigQuery:
Na seção Conceder acesso a essa conta de serviço ao projeto, selecione o papel Usuário do BigQuery.
Clique em Concluído.
O BigQuery cria a conta de serviço com o endereço de e-mail snapshot-bot@PROJECT.iam.gserviceaccount.com.
Para verificar se o BigQuery criou a conta de serviço com as permissões que você especificou, siga estas etapas:
Console
Verifique se o BigQuery criou a conta de serviço:
No console Google Cloud , acesse a página Contas de serviço:
Selecione o projeto
PROJECT.Clique em snapshot-bot@PROJECT.iam.gserviceaccount.com.
Verifique se a mensagem Status da conta de serviço indica que sua conta de serviço está ativa.
Verifique se o BigQuery concedeu à sua conta de serviço a permissão necessária para executar consultas:
No console Google Cloud , acesse a página Gerenciar recursos:
Clique em
PROJECT.Clique em Mostrar painel de informações.
Na guia Permissões, expanda o nó Usuário do BigQuery.
Verifique se a conta de serviço snapshot-bot está listada.
Conceda permissões à conta de serviço
Nesta seção, descrevemos como conceder à conta de serviço snapshot-bot as
permissões necessárias para criar snapshots de tabela da tabela DATASET.TABLE
no conjunto de dados BACKUP.
Permissão para tirar snapshots da tabela base
Para conceder à conta de serviço snapshot-bot as permissões necessárias para
capturar snapshots da tabela DATASET.TABLE, siga estas etapas:
Console
No console Google Cloud , abra a página do BigQuery.
No painel à esquerda, clique em Explorer:

Se o painel esquerdo não aparecer, clique em Expandir painel esquerdo para abrir.
No painel Explorer, expanda o nó do projeto
PROJECT.Clique em Conjuntos de dados e depois no conjunto DATASET.
Clique em Visão geral > Tabelas e depois na tabela TABLE.
Clique em Compartilhar. O painel Compartilhar é aberto.
Clique em Adicionar conta principal. O painel Conceder acesso é aberto.
Em Novos participantes, insira o endereço de e-mail da conta de serviço: snapshot-bot@PROJECT.iam.gserviceaccount.com.
No menu suspenso Selecionar um papel, selecione o papel Editor de dados do BigQuery.
Clique em Salvar.
No painel Compartilhar, expanda o nó Editor de dados do BigQuery e verifique se a conta de serviço snapshot-bot@PROJECT.iam.gserviceaccount.com está listada.
Clique em Fechar.
bq
No console Google Cloud , ative o Cloud Shell:
Digite o comando
bq add-iam-policy-binding:bq add-iam-policy-binding \ --member=serviceAccount:snapshot-bot@PROJECT.iam.gserviceaccount.com \ --role=roles/bigquery.dataEditor DATASET.TABLE
O BigQuery confirma que a nova vinculação de política foi adicionada.
Permissão para criar tabelas no conjunto de dados de destino
Conceda à conta de serviço snapshot-bot as permissões necessárias para criar snapshots de tabelas no conjunto de dados BACKUP da seguinte maneira:
Console
No console Google Cloud , acesse a página BigQuery.
No painel à esquerda, clique em Explorer:

No painel Explorer, expanda o nó do projeto
PROJECT.Clique em Conjuntos de dados e depois no conjunto BACKUP.
Clique em Compartilhar > Gerenciar permissões. O painel de permissões do conjunto de dados é aberto.
Clique em Adicionar principal. No campo Novos participantes, insira o endereço de e-mail da conta de serviço: snapshot-bot@PROJECT.iam.gserviceaccount.com.
No menu suspenso Selecionar um papel, selecione o papel Proprietário de dados do BigQuery.
Clique em Salvar.
No painel de permissões do conjunto de dados, verifique se a conta de serviço snapshot-bot@PROJECT.iam.gserviceaccount.com está listada no nó Proprietário de dados do BigQuery.
Clique em Fechar.
Sua conta de serviço snapshot-bot agora tem os seguintes papéis do IAM para os seguintes recursos:
| Papel | Recurso | Tipo de recurso | Finalidade |
|---|---|---|---|
| Editor de dados do BigQuery | PROJECT:DATASET.TABLE |
Tabela | Tire snapshots da tabela TABLE. |
| Proprietário de dados do BigQuery | PROJECT:BACKUP |
Conjunto de dados | Crie e exclua snapshots da tabela no conjunto de dados BACKUP. |
| Usuário do BigQuery | PROJECT |
Projeto | Execute a consulta programada que cria os instantâneos da tabela. |
Esses papéis fornecem as permissões necessárias para que a conta de serviço
snapshot-bot execute consultas que criam snapshots de tabela da tabela
DATASET.TABLE
e colocam os snapshots de tabela no conjunto de dados BACKUP.
Criar uma consulta de várias instruções
Nesta seção, descrevemos como escrever uma
consulta de várias instruções
que cria um snapshot de tabela
da tabela DATASET.TABLE
usando a
instrução DDL CREATE SNAPSHOT TABLE.
O snapshot é salvo no conjunto de dados BACKUP e expira após um dia.
-- Declare variables DECLARE snapshot_name STRING; DECLARE expiration TIMESTAMP; DECLARE query STRING; -- Set variables SET expiration = DATE_ADD(current_timestamp(), INTERVAL 1 DAY); SET snapshot_name = CONCAT( "BACKUP.TABLE_", FORMAT_DATETIME('%Y%m%d', current_date())); -- Construct the query to create the snapshot SET query = CONCAT( "CREATE SNAPSHOT TABLE ", snapshot_name, " CLONE mydataset.mytable OPTIONS(expiration_timestamp = TIMESTAMP '", expiration, "');"); -- Run the query EXECUTE IMMEDIATE query;
Programar a consulta mensal
Programe a consulta para ser executada às 5h do primeiro dia de cada mês da seguinte maneira:
bq
No console Google Cloud , ative o Cloud Shell:
Digite o comando
bq querya seguir:bq query --use_legacy_sql=false --display_name="Monthly snapshots of the TABLE table" \ --location="us" --schedule="1 of month 05:00" \ --project_id=PROJECT \ 'DECLARE snapshot_name STRING; DECLARE expiration TIMESTAMP; DECLARE query STRING; SET expiration = DATE_ADD(@run_time, INTERVAL 40 DAY); SET snapshot_name = CONCAT("BACKUP.TABLE_", FORMAT_DATETIME("%Y%m%d", @run_date)); SET query = CONCAT("CREATE SNAPSHOT TABLE ", snapshot_name, " CLONE PROJECT.DATASET.TABLE OPTIONS(expiration_timestamp=TIMESTAMP \"", expiration, "\");"); EXECUTE IMMEDIATE query;'
A consulta é programada no BigQuery.
A consulta de várias instruções no comando da ferramenta de linha de comando bq é diferente da consulta executada no console do Google Cloud da seguinte maneira:
- A consulta da ferramenta de linha de comando bq usa
@run_dateem vez decurrent_date(). Em uma consulta programada, o parâmetro@run_datecontém a data atual. Mas, em uma consulta interativa, o parâmetro@run_datenão é compatível. É possível usarcurrent_date()em vez de@run_datepara testar uma consulta interativa antes de programá-la. - A consulta da ferramenta de linha de comando bq usa
@run_timeem vez decurrent_timestamp()por um motivo semelhante. O parâmetro@run_timenão é compatível com consultas interativas, mascurrent_timestamp()pode ser usado em vez de@run_timepara testar a consulta interativa. - A consulta da ferramenta de linha de comando bq usa barras e aspas duplas
\"em vez de aspas simples'porque as aspas simples são usadas para incluir a consulta.
Configurar a conta de serviço para executar a consulta programada
A consulta está programada para ser executada usando suas credenciais.
Atualize a consulta programada para executar com as credenciais da conta de serviço
snapshot-bot da seguinte maneira:
Execute o comando
bq lspara receber a identidade do job de consulta programada:bq ls --transfer_config=true --transfer_location=us
A resposta será semelhante a:
namedisplayNamedataSourceIdstateprojects/12345/locations/us/transferConfigs/12345Monthly snapshots of the TABLE tablescheduled_queryRUNNINGCom o identificador no campo
name, execute o seguinte comandobq update:bq update --transfer_config --update_credentials \ --service_account_name=snapshot-bot@PROJECT.iam.gserviceaccount.com \ projects/12345/locations/us/transferConfigs/12345
O Cloud Shell confirma que a consulta programada foi atualizada.
Confira suas tarefas
Esta seção descreve como verificar se a consulta está programada corretamente, como conferir se houve algum erro quando a consulta foi executada e como verificar se os snapshots mensais estão sendo criados.
Ver a consulta programada
Para verificar se o BigQuery programou sua consulta de snapshots de tabela mensal, siga estas etapas:
Console
No console Google Cloud , acesse a página Consultas programadas:
Clique em Snapshots mensais da tabela TABLE.
Clique em Configuração.
Verifique se a string de consulta contém sua consulta e se ela está programada para ser executada no primeiro dia de cada mês.
ver o histórico de execução da consulta programada;
Após a execução da consulta programada, é possível conferir se ela foi executada com sucesso da seguinte maneira:
Console
No console Google Cloud , acesse a página Consultas programadas:
Clique na descrição da consulta, Snapshots mensais da tabela TABLE.
Clique em Histórico de execução.
É possível conferir a data e a hora em que a consulta foi executada, se a execução foi bem-sucedida e, se não, quais erros ocorreram. Para consultar mais detalhes sobre uma execução específica, clique na linha dela na tabela Histórico de execução. O painel Detalhes da execução exibe mais detalhes.
Ver os snapshots da tabela
Para verificar se os snapshots da tabela estão sendo criados, siga estas etapas:
Console
No console Google Cloud , acesse a página BigQuery:
No painel à esquerda, clique em Explorer:

No painel Explorer, abra o conjunto de dados
BACKUPe verifique se os snapshotsTABLE_YYYYMMDDforam criados, em queYYYYMMDDé o primeiro dia de cada mês. .Por exemplo:
TABLE_20220601TABLE_20220701TABLE_20220801
A seguir
- Para mais informações sobre snapshots de tabela, consulte Como trabalhar com snapshots de tabela.
- Para mais informações sobre como programar consultas, consulte Como programar consultas.
- Para mais informações sobre contas de serviço do Google Cloud , consulte Contas de serviço.