Crea snapshot di tabella con una query pianificata
Questo documento descrive come creare snapshot mensili di una tabella utilizzando un service account che esegue una query DDL pianificata. Il documento illustra il seguente esempio:
- Nel progetto
PROJECT, crea un account di servizio denominatosnapshot-bot. - Concedi al account di servizio
snapshot-botle autorizzazioni necessarie per acquisire snapshot della tabellaTABLE, che si trova nel set di datiDATASET, e archiviare gli snapshot della tabella nel set di datiBACKUP. - Scrivi una query che crei snapshot mensili della tabella
TABLEe li inserisca nel set di datiBACKUP. Poiché non puoi sovrascrivere uno snapshot della tabella esistente, gli snapshot della tabella devono avere nomi univoci. Per farlo, la query aggiunge la data corrente ai nomi degli snapshot delle tabelle, ad esempioTABLE_20220521. Gli snapshot delle tabelle scadono dopo 40 giorni. - Pianifica il account di servizio
snapshot-botper eseguire la query il primo giorno di ogni mese.
Questo documento è rivolto agli utenti che hanno familiarità con BigQuery e con gli snapshot delle tabelle BigQuery.
Autorizzazioni e ruoli
Questa sezione descrive le autorizzazioni di Identity and Access Management (IAM) necessarie per creare un account di servizio e pianificare una query, nonché i ruoli IAM predefiniti che concedono queste autorizzazioni.
Autorizzazioni
Per lavorare con un account di servizio, devi disporre delle seguenti autorizzazioni:
| Autorizzazione | Risorsa | Tipo di risorsa |
|---|---|---|
iam.serviceAccounts.*
|
PROJECT |
Progetto |
Per pianificare una query, devi disporre della seguente autorizzazione:
| Autorizzazione | Risorsa | Tipo di risorsa |
|---|---|---|
bigquery.jobs.create
|
PROJECT |
Progetto |
Ruoli
I ruoli predefiniti che forniscono le autorizzazioni necessarie per lavorare con un account di servizio sono i seguenti:
| Role | Risorsa | Tipo di risorsa |
|---|---|---|
Uno dei seguenti:roles/iam.serviceAccountAdminroles/editorroles/owner
|
PROJECT |
Progetto |
I ruoli BigQuery predefiniti che forniscono le autorizzazioni necessarie per pianificare una query sono i seguenti:
| Role | Risorsa | Tipo di risorsa |
|---|---|---|
Uno dei seguenti:roles/bigquery.userroles/bigquery.jobuserroles/bigquery.admin
|
PROJECT |
Progetto |
Crea il account di servizio snapshot-bot
Segui questi passaggi per creare il service account snapshot-bot e concedergli le autorizzazioni necessarie per eseguire query nel progetto PROJECT:
Console
Nella console Google Cloud , vai alla pagina Service account:
Seleziona il progetto
PROJECT.Crea il account di servizio
snapshot-bot:Fai clic su Crea account di servizio.
Nel campo Nome service account, inserisci snapshot-bot.
Fai clic su Crea e continua.
Concedi al account di servizio le autorizzazioni necessarie per eseguire i job BigQuery:
Nella sezione Concedi a questo account di servizio l'accesso al progetto, seleziona il ruolo BigQuery User.
Fai clic su Fine.
BigQuery crea il account di servizio con l'indirizzo email
snapshot-bot@PROJECT.iam.gserviceaccount.com.
Per verificare che BigQuery abbia creato il account di servizio con le autorizzazioni specificate, segui questi passaggi:
Console
Verifica che BigQuery abbia creato il account di servizio:
Nella console Google Cloud , vai alla pagina Service account:
Seleziona il progetto
PROJECT.Fai clic su snapshot-bot@PROJECT.iam.gserviceaccount.com.
Verifica che il messaggio Stato del service account indichi che il tuo account di servizio è attivo.
Verifica che BigQuery abbia concesso al tuo account di servizio l'autorizzazione necessaria per eseguire query:
Nella console Google Cloud , vai alla pagina Gestisci risorse:
Fai clic su
PROJECT.Fai clic su Mostra riquadro informazioni.
Nella scheda Autorizzazioni, espandi il nodo Utente BigQuery.
Verifica che il tuo account di servizio snapshot-bot sia elencato.
Concedi le autorizzazioni al service account
Questa sezione descrive come concedere al account di servizio snapshot-bot le autorizzazioni necessarie per creare snapshot della tabella DATASET.TABLE nel set di dati BACKUP.
Autorizzazione per acquisire snapshot della tabella di base
Per concedere al account di servizio snapshot-bot le autorizzazioni necessarie per acquisire snapshot della tabella DATASET.TABLE, segui questi passaggi:
Console
Nella console Google Cloud , apri la pagina BigQuery.
Nel riquadro a sinistra, fai clic su Spazio di esplorazione:

Se non vedi il riquadro a sinistra, fai clic su Espandi riquadro sinistro per aprirlo.
Nel riquadro Explorer, espandi il nodo del progetto
PROJECT.Fai clic su Set di dati, quindi sul set di dati DATASET.
Fai clic su Panoramica > Tabelle, quindi sulla tabella TABLE.
Fai clic su Condividi. Viene visualizzato il riquadro Condividi.
Fai clic su Aggiungi entità. Viene visualizzato il riquadro Concedi l'accesso.
In Nuove entità, inserisci l'indirizzo email del service account: snapshot-bot@PROJECT.iam.gserviceaccount.com.
Dal menu a discesa Seleziona un ruolo, seleziona il ruolo BigQuery Data Editor.
Fai clic su Salva.
Nel riquadro Condividi, espandi il nodo BigQuery Data Editor e verifica che sia elencato il account di servizio snapshot-bot@PROJECT.iam.gserviceaccount.com.
Fai clic su Chiudi.
bq
Nella console Google Cloud , attiva Cloud Shell:
Inserisci il seguente 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
BigQuery conferma che la nuova associazione della policy è stata aggiunta.
Autorizzazione per creare tabelle nel set di dati di destinazione
Concedi al account di servizio snapshot-bot le autorizzazioni necessarie per creare snapshot delle tabelle nel set di dati BACKUP come segue:
Console
Nella console Google Cloud , vai alla pagina BigQuery.
Nel riquadro a sinistra, fai clic su Spazio di esplorazione:

Nel riquadro Explorer, espandi il nodo del progetto
PROJECT.Fai clic su Set di dati, quindi sul set di dati BACKUP.
Fai clic su Condividi > Gestisci autorizzazioni. Viene visualizzato il riquadro delle autorizzazioni del set di dati.
Fai clic su Aggiungi entità. Nel campo Nuove entità, inserisci l'indirizzo email del account di servizio: snapshot-bot@PROJECT.iam.gserviceaccount.com.
Dal menu a discesa Seleziona un ruolo, seleziona il ruolo BigQuery Data Owner.
Fai clic su Salva.
Nel riquadro delle autorizzazioni del set di dati, verifica che il account di servizio snapshot-bot@PROJECT.iam.gserviceaccount.com sia elencato nel nodo BigQuery Data Owner.
Fai clic su Chiudi.
Il tuo account di servizio snapshot-bot ora ha i seguenti ruoli IAM per le seguenti risorse:
| Ruolo | Risorsa | Tipo di risorsa | Finalità |
|---|---|---|---|
| BigQuery Data Editor | PROJECT:DATASET.TABLE |
Tabella | Scatta snapshot della tabella TABLE. |
| Proprietario dati BigQuery | PROJECT:BACKUP |
Set di dati | Creare ed eliminare snapshot delle tabelle nel set di dati BACKUP. |
| Utente BigQuery | PROJECT |
Progetto | Esegui la query pianificata che crea gli snapshot della tabella. |
Questi ruoli forniscono le autorizzazioni necessarie al account di servizio snapshot-bot per eseguire query che creano snapshot della tabella DATASET.TABLE e li inseriscono nel set di dati BACKUP.
Scrivi una query con più istruzioni
Questa sezione descrive come scrivere una query con più istruzioni che crea uno snapshot della tabella DATASET.TABLE utilizzando l'istruzione DDL CREATE SNAPSHOT TABLE.
Lo snapshot viene salvato nel set di dati BACKUP e scade dopo un giorno.
-- 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;
Pianifica la query mensile
Pianifica l'esecuzione della query alle 05:00 del primo giorno di ogni mese come segue:
bq
Nella console Google Cloud , attiva Cloud Shell:
Inserisci il seguente 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;'
BigQuery pianifica la query.
La query con più istruzioni nel comando dello strumento a riga di comando bq differisce dalla query eseguita nella console Google Cloud come segue:
- La query dello strumento a riga di comando bq utilizza
@run_dateanzichécurrent_date(). In una query pianificata, il parametro@run_datecontiene la data corrente. Tuttavia, in una query interattiva, il parametro@run_datenon è supportato. Puoi utilizzarecurrent_date()anziché@run_dateper testare una query interattiva prima di pianificarla. - La query dello strumento a riga di comando bq utilizza
@run_timeanzichécurrent_timestamp()per un motivo simile: il parametro@run_timenon è supportato nelle query interattive, ma è possibile utilizzarecurrent_timestamp()anziché@run_timeper testare la query interattiva. - La query dello strumento a riga di comando bq utilizza una barra e una virgoletta doppia
\"anziché una virgoletta singola'perché le virgolette singole vengono utilizzate per racchiudere la query.
Configura il account di servizio per eseguire la query pianificata
Al momento, la query è pianificata per l'esecuzione utilizzando le tue credenziali.
Aggiorna la query pianificata in modo che venga eseguita con le credenziali del account di servizio snapshot-bot come segue:
Esegui il comando
bq lsper ottenere l'identità del job di query pianificata:bq ls --transfer_config=true --transfer_location=us
L'output è simile al seguente:
namedisplayNamedataSourceIdstateprojects/12345/locations/us/transferConfigs/12345Monthly snapshots of the TABLE tablescheduled_queryRUNNINGUtilizzando l'identificatore nel campo
name, esegui il seguente comandobq update:bq update --transfer_config --update_credentials \ --service_account_name=snapshot-bot@PROJECT.iam.gserviceaccount.com \ projects/12345/locations/us/transferConfigs/12345
Cloud Shell conferma che la query pianificata è stata aggiornata correttamente.
Controlla il tuo lavoro
Questa sezione descrive come verificare che la query sia pianificata correttamente, come controllare se si sono verificati errori durante l'esecuzione della query e come verificare che vengano creati gli snapshot mensili.
Visualizza la query programmata
Per verificare che BigQuery abbia pianificato la query mensile sugli snapshot delle tabelle, segui questi passaggi:
Console
Nella console Google Cloud , vai alla pagina Query programmate:
Fai clic su Istantanee mensili della tabella TABLE.
Fai clic su Configurazione.
Verifica che la stringa di query contenga la tua query e che la tua query sia pianificata per l'esecuzione il primo giorno di ogni mese.
Visualizza la cronologia delle esecuzioni della query programmata
Dopo l'esecuzione della query pianificata, puoi verificare se è stata eseguita correttamente come segue:
Console
Nella console Google Cloud , vai alla pagina Query programmate:
Fai clic sulla descrizione della query, Istantanee mensili della tabella TABLE.
Fai clic su Cronologia esecuzioni.
Puoi visualizzare la data e l'ora di esecuzione della query, se l'esecuzione è andata a buon fine e, in caso contrario, quali errori si sono verificati. Per visualizzare ulteriori dettagli su una determinata esecuzione, fai clic sulla riga corrispondente nella tabella Cronologia esecuzioni. Il riquadro Dettagli esecuzione mostra ulteriori dettagli.
Visualizza gli snapshot della tabella
Per verificare che gli snapshot della tabella vengano creati, segui questi passaggi:
Console
Nella console Google Cloud , vai alla pagina BigQuery.
Nel riquadro a sinistra, fai clic su Spazio di esplorazione:

Nel riquadro Explorer, apri il set di dati
BACKUPe verifica che siano stati creati gli snapshotTABLE_YYYYMMDD, doveYYYYMMDDè il primo giorno di ogni mese.Ad esempio:
TABLE_20220601TABLE_20220701TABLE_20220801
Passaggi successivi
- Per saperne di più sugli snapshot delle tabelle, consulta Utilizzo degli snapshot delle tabelle.
- Per saperne di più sulla pianificazione delle query, consulta Pianificazione delle query.
- Per ulteriori informazioni sui service account Google Cloud , consulta Service account.