Crea snapshot di tabella
Questo documento descrive come creare uno snapshot di una tabella utilizzando la console Google Cloud, l'istruzione SQL CREATE SNAPSHOT TABLE
, il comando bq cp --snapshot
o l'API jobs.insert
. Questo
documento è destinato agli utenti che hanno familiarità con gli
snapshot di tabella di BigQuery.
Autorizzazioni e ruoli
Questa sezione descrive le autorizzazioni IAM (Identity and Access Management) necessarie per creare uno snapshot della tabella, nonché i ruoli IAM predefiniti che concedono queste autorizzazioni.
Autorizzazioni
Per creare uno snapshot della tabella, devi disporre delle seguenti autorizzazioni:
Autorizzazione | Risorsa | Notes |
---|---|---|
Tutti i seguenti elementi:bigquery.tables.get bigquery.tables.getData bigquery.tables.createSnapshot bigquery.datasets.get bigquery.jobs.create
|
La tabella di cui vuoi creare uno snapshot. | Devi disporre dell'autorizzazione bigquery.tables.deleteSnapshot per creare uno snapshot con data di scadenza, poiché la scadenza di uno snapshot equivale a eliminarlo in un secondo momento. |
bigquery.tables.create bigquery.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:
Role | Risorsa | Notes |
---|---|---|
Uno dei seguenti:bigquery.dataViewer bigquery.dataEditor bigquery.dataOwner bigquery.admin
|
La tabella di cui vuoi creare uno snapshot. | Per creare uno snapshot con data di scadenza si possono utilizzare solo bigquery.dataOwner e bigquery.admin . |
Uno dei seguenti:bigquery.dataEditor bigquery.dataOwner bigquery.admin
|
Il set di dati che contiene il nuovo snapshot della tabella. |
Limitazioni
Per informazioni sulle limitazioni degli snapshot delle tabelle, consulta le 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 lo snapshot di una tabella, il nome deve rispettare le stesse regole di denominazione valide per la creazione di una tabella.
- La creazione di snapshot della tabella è soggetta ai limiti di BigQuery sui job di copia.
- Il set di dati degli snapshot della tabella deve trovarsi nella stessa regione e nella stessa organizzazione del set di dati contenente 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 situata in un set di dati con sede nell'UE. Dovrai creare una copia della tabella.
- Il tempo impiegato da BigQuery per creare snapshot di tabelle potrebbe variare notevolmente tra le diverse esecuzioni, perché lo spazio di archiviazione sottostante è gestito in modo dinamico.
Crea uno snapshot della tabella
La best practice prevede la creazione di uno snapshot di tabella in un set di dati diverso dalla tabella di base. Questa prassi 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 della tabella, specifichi 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 expiration dello snapshot della tabella.
Crea uno snapshot della tabella con una scadenza
Puoi creare uno snapshot di una tabella che scade dopo 24 ore utilizzando una delle seguenti opzioni:
Console
Nella console Google Cloud, vai alla pagina BigQuery.
Nel riquadro Explorer, espandi i nodi del progetto e del set di dati della tabella di cui vuoi creare uno snapshot.
Fai clic sul nome della tabella di cui vuoi creare uno snapshot.
Nel riquadro della tabella che viene visualizzato, fai clic su Istantanea.
Nel riquadro Crea snapshot tabella visualizzato, inserisci le informazioni Progetto, Set di dati e Tabella per il nuovo snapshot della tabella.
Nel campo Data di scadenza, inserisci la data e l'ora comprese tra 24 ore a partire da ora.
Fai clic su Salva.
SQL
Utilizza l'istruzione DDL CREATE SNAPSHOT TABLE
:
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'Editor 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 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 del progetto contenente la tabella da cui stai creando lo snapshot.TABLE_DATASET_NAME
: il nome del set di dati contenente 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 a partire da 24 ore.
Fai clic su
Esegui.
Per ulteriori informazioni su come eseguire le query, consulta Eseguire una query interattiva.
bq
Inserisci il comando seguente 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 del progetto contenente la tabella da cui stai creando lo snapshot.TABLE_DATASET_NAME
: il nome del set di dati contenente 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 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
Richiama il metodo jobs.insert
con i seguenti parametri:
Parametro | Valore |
---|---|
projectId |
L'ID del progetto a cui si riferisce 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 del progetto contenente la tabella da cui stai creando lo snapshot.TABLE_DATASET_NAME
: il nome del set di dati contenente 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 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 a partire da 24 ore.
Come per le tabelle, se non viene specificata una scadenza, lo snapshot della tabella scade dopo la ora di scadenza predefinita della tabella o il set di dati che contiene lo snapshot della tabella.
Crea uno snapshot della tabella utilizzando il viaggio nel tempo
Puoi creare lo snapshot di una tabella com'era un'ora fa utilizzando una delle seguenti opzioni:
Console
Nella console Google Cloud, vai alla pagina BigQuery.
Nel riquadro Explorer, espandi i nodi del progetto e del set di dati della tabella di cui vuoi creare uno snapshot.
Fai clic sul nome della tabella di cui vuoi creare uno snapshot.
Nel riquadro della tabella che viene visualizzato, fai clic su Istantanea.
Nel riquadro Crea snapshot tabella visualizzato, inserisci le informazioni Progetto, Set di dati e Tabella per il nuovo snapshot della tabella.
Nel campo Ora snapshot, inserisci la data e l'ora di un'ora precedente.
Fai clic su Salva.
SQL
Utilizza l'istruzione DDL CREATE SNAPSHOT TABLE
con una clausola FOR SYSTEM_TIME AS OF
:
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'Editor 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 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 del progetto contenente la tabella da cui stai creando lo snapshot.TABLE_DATASET_NAME
: il nome del set di dati contenente 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 ulteriori informazioni su come eseguire le query, consulta Eseguire una query interattiva.
bq
Inserisci il comando seguente 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 del progetto contenente la tabella da cui stai creando lo snapshot.TABLE_DATASET_NAME
: il nome del set di dati contenente 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 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 metodo jobs.insert
con i seguenti parametri:
Parametro | Valore |
---|---|
projectId |
L'ID del progetto a cui si riferisce 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 del progetto contenente la tabella da cui stai creando lo snapshot.TABLE_DATASET_NAME
: il nome del set di dati contenente 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 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 ulteriori informazioni su come specificare una versione precedente di una tabella, consulta Accedere ai dati storici utilizzando il viaggio nel tempo.
Controllo dell'accesso alle tabelle
Per controllare l'accesso alle tabelle in BigQuery, consulta Introduzione ai controlli di accesso alle tabelle.
Quando crei uno snapshot della tabella, l'accesso a livello di tabella allo snapshot è impostato come segue:
- Se lo snapshot della tabella sovrascrive una tabella esistente, viene mantenuto l'accesso a livello di tabella per la tabella esistente. 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 dai criteri 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 il criterio di accesso di uno snapshot della tabella.
- Ripristina uno snapshot della tabella.
- Crea snapshot mensili di una tabella utilizzando un account di servizio che esegue una query pianificata.