Creare snapshot delle tabelle
Questo documento descrive come creare uno snapshot di una tabella utilizzando la
Google Cloud console, l'CREATE SNAPSHOT TABLE
istruzione SQL, il
bq cp --snapshot comando,
o l'jobs.insert API. Questo
documento è destinato agli utenti che hanno familiarità con gli snapshot delle tabelle BigQuery
.
Autorizzazioni e ruoli
Questa sezione descrive le autorizzazioni di Identity and Access Management (IAM) necessarie per creare uno snapshot di tabella e i ruoli IAM predefiniti che concedono queste autorizzazioni.
Autorizzazioni
Per creare uno snapshot di tabella, devi disporre delle seguenti autorizzazioni:
| Autorizzazione | Risorsa | Note |
|---|---|---|
Tutte le seguenti:bigquery.tables.getbigquery.tables.getDatabigquery.tables.createSnapshotbigquery.datasets.getbigquery.jobs.create
|
La tabella di cui vuoi creare uno snapshot. | Poiché la scadenza dello snapshot elimina lo snapshot in un secondo momento, per
creare uno snapshot con un tempo di scadenza devi disporre dell'autorizzazione
bigquery.tables.deleteSnapshot. |
bigquery.tables.createbigquery.tables.updateData
|
Il set di dati che contiene lo snapshot della tabella. |
Ruoli
I ruoli BigQuery predefiniti che forniscono le autorizzazioni richieste sono i seguenti:
| Ruolo | Risorsa | Note |
|---|---|---|
Almeno uno dei seguenti:bigquery.dataViewerbigquery.dataEditorbigquery.dataOwnerE almeno uno dei seguenti: bigquery.jobUserbigquery.studioUserbigquery.userbigquery.studioAdminbigquery.admin
|
La tabella di cui vuoi creare uno snapshot. | Solo bigquery.dataOwner, bigquery.admin e bigquery.studioAdmin possono essere utilizzati per creare uno snapshot con un tempo di scadenza. |
Almeno uno dei seguenti:bigquery.dataEditorbigquery.dataOwnerbigquery.studioAdminbigquery.admin
|
Il set di dati che contiene il nuovo snapshot della tabella. |
Limitazioni
Per informazioni sulle limitazioni degli snapshot delle tabelle, consulta Limitazioni degli snapshot delle tabelle.
Inoltre, la creazione di snapshot delle tabelle è soggetta alle seguenti limitazioni, che si applicano a tutti i job di copia delle tabelle:
- Quando crei uno snapshot di tabella, il suo nome deve rispettare le stesse regole di denominazione della creazione di una tabella.
- La creazione di snapshot delle tabelle è soggetta ai limiti di BigQuery per i job di copia.
- Il set di dati dello snapshot della tabella deve trovarsi nella stessa regione e nella stessa organizzazione, del set di dati che contiene la tabella di cui stai creando uno snapshot. Ad esempio, non puoi creare uno snapshot di tabella in un set di dati con sede negli Stati Uniti di una tabella che si trova in un set di dati con sede nell'UE. Dovrai invece creare una copia della tabella.
- Il tempo impiegato da BigQuery per creare gli snapshot delle tabelle può variare in modo significativo tra le diverse esecuzioni perché lo spazio di archiviazione sottostante viene gestito in modo dinamico.
- Quando crei uno snapshot di tabella utilizzando la CLI bq, lo snapshot ha la chiave di crittografia predefinita del set di dati di destinazione. Quando crei uno snapshot di tabella utilizzando SQL, lo snapshot ha la stessa chiave di crittografia della tabella di origine.
Creare uno snapshot di tabella
La best practice consiste nel creare uno snapshot di tabella in un set di dati diverso dalla tabella di base. Questa pratica consente di ripristinare la tabella di base dallo snapshot della tabella anche se il set di dati della tabella di base viene eliminato accidentalmente.
Quando crei uno snapshot di tabella, devi specificare la tabella di cui vuoi creare uno snapshot e un nome univoco per lo snapshot della tabella. Facoltativamente, puoi specificare l'ora dello snapshot e la scadenza dello snapshot della tabella .
Creare uno snapshot di tabella con una scadenza
Puoi creare uno snapshot di una tabella che scade dopo 24 ore utilizzando una delle seguenti opzioni:
Console
Nella Google Cloud console, vai alla pagina BigQuery.
Nel riquadro a sinistra, fai clic su Spazio di esplorazione:

Se non vedi il riquadro a sinistra, fai clic su Espandi riquadro a sinistra per aprirlo.
Nel riquadro Spazio di esplorazione , espandi il progetto, fai clic su Set di dati e poi sul set di dati.
Fai clic su Panoramica > Tabelle e poi sul nome della tabella di cui vuoi creare uno snapshot.
Nel riquadro dei dettagli visualizzato, fai clic su Snapshot.

Nel riquadro Crea snapshot tabella visualizzato, inserisci le informazioni su Progetto, Set di dati e Tabella per il nuovo snapshot della tabella.
Nel campo Ora di scadenza, inserisci la data e l'ora per 24 ore da ora.
Fai clic su Salva.
SQL
Utilizza l'istruzione DDL
CREATE SNAPSHOT TABLE:
Nella Google Cloud console, vai alla pagina BigQuery.
Nell'editor di query, inserisci la seguente istruzione:
CREATE SNAPSHOT TABLE SNAPSHOT_PROJECT_ID.SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME CLONE TABLE_PROJECT_ID.TABLE_DATASET_NAME.TABLE_NAME OPTIONS ( expiration_timestamp = TIMESTAMP 'TIMESTAMP_VALUE');
Sostituisci quanto segue:
SNAPSHOT_PROJECT_ID: l'ID progetto del progetto in cui creare lo snapshot.SNAPSHOT_DATASET_NAME: il nome del set di dati in cui creare lo snapshot.SNAPSHOT_NAME: il nome dello snapshot che stai creando.TABLE_PROJECT_ID: l'ID progetto del progetto che contiene la tabella da cui stai creando lo snapshot.TABLE_DATASET_NAME: il nome del set di dati che contiene la tabella da cui stai creando lo snapshot.TABLE_NAME: il nome della tabella da cui stai creando lo snapshot.TIMESTAMP_VALUE: Un valore timestamp che rappresenta la data e l'ora 24 ore da ora.
Fai clic su Esegui.
Per saperne di più su come eseguire le query, consulta Eseguire una query interattiva.
bq
Inserisci il seguente comando in Cloud Shell:
bq cp \ --snapshot \ --no_clobber \ --expiration=86400 \ TABLE_PROJECT_ID:TABLE_DATASET_NAME.TABLE_NAME \ SNAPSHOT_PROJECT_ID:SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME
Sostituisci quanto segue:
TABLE_PROJECT_ID: l'ID progetto del progetto che contiene la tabella da cui stai creando lo snapshot.TABLE_DATASET_NAME: il nome del set di dati che contiene la tabella da cui stai creando lo snapshot.TABLE_NAME: il nome della tabella da cui stai creando lo snapshot.SNAPSHOT_PROJECT_ID: l'ID progetto del progetto in cui creare lo snapshot.SNAPSHOT_DATASET_NAME: il nome del set di dati in cui creare lo snapshot.SNAPSHOT_NAME: il nome dello snapshot che stai creando.
Il flag --no_clobber è obbligatorio.
API
Chiama il
jobs.insert metodo con
i seguenti parametri:
| Parametro | Valore |
|---|---|
projectId |
L'ID progetto del progetto da fatturare per questa operazione. |
| Corpo della richiesta | { "configuration": { "copy": { "sourceTables": [ { "projectId": "TABLE_PROJECT_ID", "datasetId": "TABLE_DATASET_NAME", "tableId": "TABLE_NAME" } ], "destinationTable": { "projectId": "SNAPSHOT_PROJECT_ID", "datasetId": "SNAPSHOT_DATASET_NAME", "tableId": "SNAPSHOT_NAME" }, "operationType": "SNAPSHOT", "writeDisposition": "WRITE_EMPTY", "destinationExpirationTime":"TIMESTAMP_VALUE" } } } |
Sostituisci quanto segue:
TABLE_PROJECT_ID: l'ID progetto del progetto che contiene la tabella da cui stai creando lo snapshot.TABLE_DATASET_NAME: il nome del set di dati che contiene la tabella da cui stai creando lo snapshot.TABLE_NAME: il nome della tabella da cui stai creando lo snapshot.SNAPSHOT_PROJECT_ID: l'ID progetto del progetto in cui creare lo snapshot.SNAPSHOT_DATASET_NAME: il nome del set di dati in cui creare lo snapshot.SNAPSHOT_NAME: il nome dello snapshot che stai creando.TIMESTAMP_VALUE: Un valore timestamp che rappresenta la data e l'ora 24 ore da ora.
Come per le tabelle, se non viene specificata una scadenza, lo snapshot della tabella scade dopo il tempo di scadenza predefinito della tabella o del set di dati che contiene lo snapshot della tabella.
Creare uno snapshot di tabella utilizzando Time Travel
Puoi creare uno snapshot di tabella di una tabella così com'era un'ora fa utilizzando una delle seguenti opzioni:
Console
Nella Google Cloud console, vai alla pagina BigQuery.
Nel riquadro a sinistra, fai clic su Spazio di esplorazione:

Nel riquadro Spazio di esplorazione , espandi il progetto, fai clic su Set di dati e poi sul set di dati.
Fai clic su Panoramica > Tabelle e poi sul nome della tabella di cui vuoi creare uno snapshot.
Nel riquadro dei dettagli visualizzato, fai clic su Snapshot.

Nel riquadro Crea snapshot tabella visualizzato, inserisci le informazioni su Progetto, Set di dati e Tabella per il nuovo snapshot della tabella.
Nel campo Ora dello snapshot, inserisci la data e l'ora di un'ora fa.
Fai clic su Salva.
SQL
Utilizza l'istruzione DDL
CREATE SNAPSHOT TABLE
con una clausola FOR SYSTEM_TIME AS OF:
Nella Google Cloud console, vai alla pagina BigQuery.
Nell'editor di query, inserisci la seguente istruzione:
CREATE SNAPSHOT TABLE SNAPSHOT_PROJECT_ID.SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME CLONE TABLE_PROJECT_ID.TABLE_DATASET_NAME.TABLE_NAME FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);
Sostituisci quanto segue:
SNAPSHOT_PROJECT_ID: l'ID progetto del progetto in cui creare lo snapshot.SNAPSHOT_DATASET_NAME: il nome del set di dati in cui creare lo snapshot.SNAPSHOT_NAME: il nome dello snapshot che stai creando.TABLE_PROJECT_ID: l'ID progetto del progetto che contiene la tabella da cui stai creando lo snapshot.TABLE_DATASET_NAME: il nome del set di dati che contiene la tabella da cui stai creando lo snapshot.TABLE_NAME: il nome della tabella da cui stai creando lo snapshot.
Fai clic su Esegui.
Per saperne di più su come eseguire le query, consulta Eseguire una query interattiva.
bq
Inserisci il seguente comando in Cloud Shell:
bq cp \ --no_clobber \ --snapshot \ TABLE_PROJECT_ID:TABLE_DATASET_NAME.TABLE_NAME@-3600000 \ SNAPSHOT_PROJECT_ID:SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME
Sostituisci quanto segue:
TABLE_PROJECT_ID: l'ID progetto del progetto che contiene la tabella da cui stai creando lo snapshot.TABLE_DATASET_NAME: il nome del set di dati che contiene la tabella da cui stai creando lo snapshot.TABLE_NAME: il nome della tabella da cui stai creando lo snapshot.SNAPSHOT_PROJECT_ID: l'ID progetto del progetto in cui creare lo snapshot.SNAPSHOT_DATASET_NAME: il nome del set di dati in cui creare lo snapshot.SNAPSHOT_NAME: il nome dello snapshot che stai creando.
Il flag --no_clobber è obbligatorio.
API
Chiama il
jobs.insert
metodo con i seguenti parametri:
| Parametro | Valore |
|---|---|
projectId |
L'ID progetto del progetto da fatturare per questa operazione. |
| Corpo della richiesta | { "configuration": { "copy": { "sourceTables": [ { "projectId": "TABLE_PROJECT_ID", "datasetId": "TABLE_DATASET_NAME", "tableId": "TABLE_NAME@-360000" } ], "destinationTable": { "projectId": "SNAPSHOT_PROJECT_ID", "datasetId": "SNAPSHOT_DATASET_NAME", "tableId": "SNAPSHOT_NAME" }, "operationType": "SNAPSHOT", "writeDisposition": "WRITE_EMPTY" } } } |
Sostituisci quanto segue:
TABLE_PROJECT_ID: l'ID progetto del progetto che contiene la tabella da cui stai creando lo snapshot.TABLE_DATASET_NAME: il nome del set di dati che contiene la tabella da cui stai creando lo snapshot.TABLE_NAME: il nome della tabella da cui stai creando lo snapshot.SNAPSHOT_PROJECT_ID: l'ID progetto del progetto in cui creare lo snapshot.SNAPSHOT_DATASET_NAME: il nome del set di dati in cui creare lo snapshot.SNAPSHOT_NAME: il nome dello snapshot che stai creando.
Per saperne di più su come specificare una versione precedente di una tabella, consulta Accedere ai dati storici utilizzando Time Travel.
Controllo dell'accesso alle tabelle
Per controllare l'accesso alle tabelle in BigQuery, consulta Controllare l'accesso alle risorse con IAM.
Quando crei uno snapshot di tabella, l'accesso a livello di tabella allo snapshot della tabella viene impostato come segue:
- Se lo snapshot della tabella sovrascrive una tabella esistente, l'accesso a livello di tabella per la tabella esistente viene mantenuto. I tag non vengono copiati dalla tabella di base.
- Se lo snapshot della tabella è una nuova risorsa, l'accesso a livello di tabella per lo snapshot della tabella è determinato dalle policy di accesso del set di dati in cui viene creato lo snapshot della tabella. Inoltre, i tag vengono copiati dalla tabella di base allo snapshot della tabella.
Passaggi successivi
- Aggiorna la descrizione, la data di scadenza o la policy di accesso di uno snapshot di tabella.
- Ripristina uno snapshot di tabella.
- Crea snapshot mensili di una tabella utilizzando un account di servizio che esegue una query pianificata.