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-bot
as permissões necessárias para capturar snapshots de tabela da tabelaTABLE
, que está localizada noDATASET
e armazene os snapshots da tabela no conjunto de dadosBACKUP
. - Grave uma consulta que crie snapshots mensais da tabela
TABLE
e 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-bot
para 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.serviceAccountAdmin roles/editor roles/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.user roles/bigquery.jobuser roles/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 do 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 do 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 do 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 do Cloud, abra a página do BigQuery.
No painel Explorer, expanda o nó do projeto
PROJECT
.Expanda o nó do conjunto de dados DATASET.
Selecione a 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 Save.
No painel Compartilhar, expanda o nó Editor de dados do BigQuery e verifique se snapshot-bot@PROJECT.iam.gserviceaccount.com conta de serviço está listada.
Clique em Fechar.
bq
No Console do 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 do Google Cloud, acesse a página do BigQuery.
No painel Explorer, expanda o nó do projeto
PROJECT
.Clique no menu do nó do conjunto de dados BACKUP e selecione Abrir.
Clique em Compartilhar conjunto de dados. O painel Permissões do conjunto de dados é aberto.
No campo Adicionar membros, 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 Adicionar.
No painel Permissões do conjunto de dados, verifique se a conta de serviço snapshot-bot@PROJECT.iam.gserviceaccount.com está listada no nó do Proprietário de dados do BigQuery.
Clique em Concluído.
Sua conta de serviço snapshot-bot
agora tem os seguintes papéis do IAM para os seguintes recursos:
Papel | Recurso | Resource type | 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 do Google Cloud, ative o Cloud Shell:
Digite o comando
bq query
a 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_date
em vez decurrent_date()
. Em uma consulta programada, o parâmetro@run_date
contém a data atual. Mas, em uma consulta interativa, o parâmetro@run_date
não é compatível. É possível usarcurrent_date()
em vez de@run_date
para testar uma consulta interativa antes de programá-la. - A consulta da ferramenta de linha de comando bq usa
@run_time
em vez decurrent_timestamp()
por um motivo semelhante. O parâmetro@run_time
não é compatível com consultas interativas, mascurrent_timestamp()
pode ser usado em vez de@run_time
para 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 ls
para receber a identidade do job de consulta programada:bq ls --transfer_config=true --transfer_location=us
A resposta será semelhante a:
name
displayName
dataSourceId
state
projects/12345/locations/us/transferConfigs/12345
Monthly snapshots of the TABLE table
scheduled_query
RUNNING
Com 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 do 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 do 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 do Google Cloud, acesse a página do BigQuery.
No painel Explorer, abra o conjunto de dados
BACKUP
e verifique se os snapshotsTABLE_YYYYMMDD
foram criados, em queYYYYMMDD
é o primeiro dia de cada mês. .Exemplo:
TABLE_20220601
TABLE_20220701
TABLE_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.