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
, crie uma conta de serviço chamadaPROJECT snapshot-bot
. - Conceda à conta de serviço
snapshot-bot
as permissões necessárias para capturar snapshots de tabela da tabela
, que está localizada noTABLE
e armazene os snapshots da tabela no conjunto de dadosDATASET
.BACKUP - Grave uma consulta que crie snapshots mensais da tabela
e os coloque no conjunto de dadosTABLE
. 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,BACKUP
; Os snapshots da tabela expiram após 40 dias.TABLE _20220521 - 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.*
|
|
Projeto |
Para programar uma consulta, você precisa desta permissões:
Permissão | Recurso | Resource type |
---|---|---|
bigquery.jobs.create
|
|
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
|
|
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 `
|
|
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
:
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@
.
Para verificar se o BigQuery criou a conta de serviço com as permissões que você especificou, siga estas etapas:
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
no conjunto de dados
.
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
, siga estas etapas:
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 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.
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.dataEditorDATASET .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
da seguinte maneira:
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ó 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 | Tipo de recurso | Finalidade |
---|---|---|---|
Editor de dados do BigQuery |
|
Tabela | Tire snapshots da tabela . |
Proprietário de dados do BigQuery |
|
Conjunto de dados | Crie e exclua snapshots da tabela no conjunto de dados . |
Usuário do BigQuery |
|
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
e colocam os snapshots de tabela no conjunto de dados
.
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
usando a
instrução DDL CREATE SNAPSHOT TABLE
.
O snapshot é salvo no conjunto de dados
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:
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, " CLONEPROJECT .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 tablescheduled_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:
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:
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:
No console do Google Cloud, acesse a página do BigQuery.
No painel Explorer, abra o conjunto de dados
e verifique se os snapshotsBACKUP
foram criados, em queTABLE _YYYYMMDDYYYYMMDD
é 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.