Crie instantâneos de tabelas com uma consulta agendada
Este documento descreve como criar instantâneos mensais de uma tabela através de uma conta de serviço que executa uma consulta DDL agendada. O documento explica o seguinte exemplo:
- No projeto
PROJECT
, crie uma conta de serviço com o nomesnapshot-bot
. - Conceda à conta de serviço
snapshot-bot
as autorizações de que necessita para tirar capturas instantâneas de tabelas da tabelaTABLE
, que se encontra no conjunto de dadosDATASET
, e armazene as capturas instantâneas de tabelas no conjunto de dadosBACKUP
. - Escreva uma consulta que crie instantâneos mensais da tabela
TABLE
e os coloque no conjunto de dadosBACKUP
. Uma vez que não pode substituir uma imagem instantânea de tabela existente, as imagens instantâneas de tabela têm de ter nomes exclusivos. Para o conseguir, a consulta anexa a data atual aos nomes das imagens instantâneas das tabelas; por exemplo,TABLE_20220521
. As capturas de ecrã das tabelas expiram após 40 dias. - Agende a execução da consulta pela conta de serviço
snapshot-bot
no primeiro dia de cada mês.
Este documento destina-se a utilizadores que estão familiarizados com o BigQuery e as cópias instantâneas de tabelas do BigQuery.
Autorizações e funções
Esta secção descreve as autorizações de gestão de identidade e de acesso (IAM) de que precisa para criar uma conta de serviço e agendar uma consulta, bem como as funções de IAM predefinidas que concedem essas autorizações.
Autorizações
Para trabalhar com uma conta de serviço, precisa das seguintes autorizações:
Autorização | Recurso | Tipo de recurso |
---|---|---|
iam.serviceAccounts.*
|
PROJECT |
Projeto |
Para agendar uma consulta, precisa da seguinte autorização:
Autorização | Recurso | Tipo de recurso |
---|---|---|
bigquery.jobs.create
|
PROJECT |
Projeto |
Funções
As funções predefinidas que fornecem as autorizações necessárias para trabalhar com uma conta de serviço são as seguintes:
Role | Recurso | Tipo de recurso |
---|---|---|
Qualquer uma das seguintes opções:roles/iam.serviceAccountAdmin roles/editor roles/owner
|
PROJECT |
Projeto |
As funções predefinidas do BigQuery que fornecem as autorizações necessárias para agendar uma consulta são as seguintes:
Role | Recurso | Tipo de recurso |
---|---|---|
Qualquer uma das seguintes opções:roles/bigquery.user roles/bigquery.jobuser roles/bigquery.admin `
|
PROJECT |
Projeto |
Crie a conta de serviço snapshot-bot
Siga estes passos para criar a snapshot-bot
conta de serviço
e conceder-lhe as
autorizações de que precisa para executar
consultas no projeto PROJECT
:
Consola
Na Google Cloud consola, aceda à 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, introduza snapshot-bot.
Clique em Criar e continuar.
Conceda à conta de serviço as autorizações de que necessita para executar tarefas do BigQuery:
Na secção Conceda a esta conta de serviço acesso ao projeto, selecione a função Utilizador do BigQuery.
Clique em Concluído.
O BigQuery cria a conta de serviço com o endereço de email
snapshot-bot@PROJECT.iam.gserviceaccount.com
.
Para verificar se o BigQuery criou a conta de serviço com as autorizações que especificou, siga estes passos:
Consola
Verifique se o BigQuery criou a conta de serviço:
Na Google Cloud consola, aceda à página Contas de serviço:
Selecione o projeto
PROJECT
.Clique em snapshot-bot@PROJECT.iam.gserviceaccount.com.
Verifique se a mensagem Estado da conta de serviço indica que a sua conta de serviço está ativa.
Verifique se o BigQuery concedeu à sua conta de serviço a autorização de que necessita para executar consultas:
Na Google Cloud consola, aceda à página Gerir recursos:
Clique em
PROJECT
.Clique em Mostrar painel de informações.
No separador Autorizações, expanda o nó Utilizador do BigQuery.
Confirme se a sua conta de serviço snapshot-bot está listada.
Conceda autorizações à conta de serviço
Esta secção descreve como conceder à conta de serviço snapshot-bot
as autorizações necessárias para criar instantâneos de tabelas da tabela DATASET.TABLE
no conjunto de dados BACKUP
.
Autorização para tirar instantâneos da tabela base
Para conceder à conta de serviço snapshot-bot
as autorizações necessárias para tirar instantâneos da tabela DATASET.TABLE
, siga estes passos:
Consola
Na Google Cloud consola, abra a página BigQuery.
No painel Explorador, expanda o nó do projeto
PROJECT
.Expanda o nó do conjunto de dados DATASET.
Selecione a tabela TABLE.
Clique em Partilhar. É aberto o painel Partilhar.
Clique em Adicionar diretor. O painel Conceder acesso é aberto.
Em Novos membros, introduza o endereço de email da conta de serviço: snapshot-bot@PROJECT.iam.gserviceaccount.com.
No menu pendente Selecionar uma função, selecione a função Editor de dados do BigQuery.
Clique em Guardar.
No painel Partilhar, 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
Na Google Cloud consola, ative o Cloud Shell:
Introduza o seguinte 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 associação de políticas foi adicionada.
Autorização para criar tabelas no conjunto de dados de destino
Conceda à conta de serviço snapshot-bot
as autorizações de que necessita para criar instantâneos de tabelas no conjunto de dados BACKUP
da seguinte forma:
Consola
Na Google Cloud consola, aceda à página BigQuery.
No painel Explorador, expanda o nó do projeto
PROJECT
.Clique no menu do nó do conjunto de dados BACKUP e selecione Abrir.
Clique em Partilhar conjunto de dados. É aberto o painel Autorizações do conjunto de dados.
No campo Adicionar membros, introduza o endereço de email da conta de serviço: snapshot-bot@PROJECT.iam.gserviceaccount.com.
No menu pendente Selecionar uma função, selecione a função Proprietário de dados do BigQuery.
Clique em Adicionar.
No painel Autorizaçõ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.
A sua conta de serviço snapshot-bot
tem agora as seguintes funções do IAM para os seguintes recursos:
Função | Recurso | Tipo do recurso | Finalidade |
---|---|---|---|
Editor de dados do BigQuery | PROJECT:DATASET.TABLE |
Tabela | Tire fotos da mesa TABLE . |
Proprietário de dados do BigQuery | PROJECT:BACKUP |
Conjunto de dados | Criar e eliminar instantâneos de tabelas no conjunto de dados BACKUP . |
Utilizador do BigQuery | PROJECT |
Projeto | Execute a consulta agendada que cria as capturas instantâneas da tabela. |
Estas funções fornecem as autorizações de que a snapshot-bot
conta de serviço
precisa para executar consultas que criam instantâneos de tabelas da DATASET.TABLE
tabela
e colocam os instantâneos de tabelas no conjunto de dados BACKUP
.
Escreva uma consulta com várias declarações
Esta secção descreve como escrever uma
consulta com várias declarações
que cria uma imagem instantânea da tabela
da tabela DATASET.TABLE
através da
CREATE SNAPSHOT TABLE
declaração DDL.
A captura de ecrã é guardada 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;
Agende a consulta mensal
Agende a execução da consulta às 05:00 no primeiro dia de cada mês da seguinte forma:
bq
Na Google Cloud consola, ative o Cloud Shell:
Introduza o seguinte comando
bq query
: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;'
O BigQuery agenda a consulta.
A consulta com várias declarações no comando da ferramenta de linhas de comando bq difere da consulta que executou na consola da seguinte forma: Google Cloud
- A consulta da ferramenta de linhas de comando bq usa
@run_date
em vez decurrent_date()
. Numa consulta agendada, o parâmetro@run_date
contém a data atual. No entanto, numa consulta interativa, o parâmetro@run_date
não é suportado. Pode usarcurrent_date()
em vez de@run_date
para testar uma consulta interativa antes de a agendar. - A consulta da ferramenta de linha de comandos bq usa
@run_time
em vez decurrent_timestamp()
por um motivo semelhante: o parâmetro@run_time
não é suportado em consultas interativas, mascurrent_timestamp()
pode ser usado em vez de@run_time
para testar a consulta interativa. - A consulta da ferramenta de linhas de comando bq usa uma barra e aspas duplas
\"
em vez de aspas simples'
porque as aspas simples são usadas para incluir a consulta.
Configure a conta de serviço para executar a consulta agendada
A consulta está atualmente agendada para ser executada com as suas credenciais.
Atualize a consulta agendada para ser executada com as credenciais da snapshot-bot
conta de serviço
da seguinte forma:
Execute o comando
bq ls
para obter a identidade da tarefa de consulta agendada:bq ls --transfer_config=true --transfer_location=us
O resultado tem um aspeto semelhante ao seguinte:
name
displayName
dataSourceId
state
projects/12345/locations/us/transferConfigs/12345
Monthly snapshots of the TABLE table
scheduled_query
RUNNING
Usando 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 agendada foi atualizada com êxito.
Verifique o seu trabalho
Esta secção descreve como verificar se a sua consulta está agendada corretamente, como ver se ocorreram erros quando a consulta foi executada e como verificar se as capturas de ecrã mensais estão a ser criadas.
Veja a consulta agendada
Para verificar se o BigQuery agendou a consulta de instantâneos da tabela mensalmente, siga estes passos:
Consola
Na Google Cloud consola, aceda à página Consultas agendadas:
Clique em Instantâneos mensais da tabela TABLE.
Clique em Configuração.
Verifique se a string de consulta contém a sua consulta e se a execução da consulta está agendada para o primeiro dia de cada mês.
Veja o histórico de execuções da consulta agendada
Depois de a consulta agendada ter sido executada, pode ver se foi executada com êxito da seguinte forma:
Consola
Na Google Cloud consola, aceda à página Consultas agendadas:
Clique na descrição da consulta, Instantâneos mensais da tabela TABLE.
Clique em Histórico de execuções.
Pode ver a data e a hora em que a consulta foi executada, se a execução foi bem-sucedida e, caso contrário, que erros ocorreram. Para ver mais detalhes sobre uma execução específica, clique na respetiva linha na tabela Histórico de execuções. O painel Detalhes da execução apresenta detalhes adicionais.
Veja os resumos das tabelas
Para verificar se as imagens instantâneas das tabelas estão a ser criadas, siga estes passos:
Consola
Na Google Cloud consola, aceda à página BigQuery:
No painel Explorador, abra o conjunto de dados
BACKUP
e verifique se foram criadas as capturas de ecrãTABLE_YYYYMMDD
, ondeYYYYMMDD
é o primeiro dia de cada mês.Por exemplo:
TABLE_20220601
TABLE_20220701
TABLE_20220801
O que se segue?
- Para mais informações sobre os instantâneos de tabelas, consulte o artigo Trabalhar com instantâneos de tabelas.
- Para mais informações sobre o agendamento de consultas, consulte o artigo Agendar consultas.
- Para mais informações sobre as Google Cloud contas de serviço, consulte o artigo Contas de serviço.