Crea snapshot delle tabelle

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 è rivolto 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) di cui hai bisogno per creare uno snapshot di tabella e i ruoli IAM predefiniti che concedono queste autorizzazioni.

Autorizzazioni

Per creare uno snapshot di una tabella, devi disporre delle seguenti autorizzazioni:

Autorizzazione Risorsa Note
Tutti i seguenti:

bigquery.tables.get
bigquery.tables.getData
bigquery.tables.createSnapshot
bigquery.datasets.get
bigquery.jobs.create
La tabella di cui vuoi acquisire uno snapshot. Poiché la scadenza dello snapshot ne comporta l'eliminazione in un secondo momento, per creare uno snapshot con una data di scadenza devi disporre dell'autorizzazione bigquery.tables.deleteSnapshot.
bigquery.tables.create
bigquery.tables.updateData
Il set di dati che contiene l'istantanea della tabella.

Ruoli

I ruoli BigQuery predefiniti che forniscono le autorizzazioni richieste sono i seguenti:

Role Risorsa Note
Almeno uno dei seguenti:

bigquery.dataViewer
bigquery.dataEditor
bigquery.dataOwner

E almeno uno dei seguenti:

bigquery.jobUser
bigquery.studioUser
bigquery.user
bigquery.studioAdmin
bigquery.admin
La tabella di cui vuoi acquisire uno snapshot. Solo bigquery.dataOwner, bigquery.admin e bigquery.studioAdmin possono essere utilizzati per creare uno snapshot con una data e un'ora di scadenza.
Almeno uno dei seguenti:

bigquery.dataEditor
bigquery.dataOwner
bigquery.studioAdmin
bigquery.admin
Il set di dati che contiene lo snapshot della nuova tabella.

Limitazioni

Per informazioni sulle limitazioni degli snapshot delle tabelle, consulta limitazioni degli snapshot delle tabelle.

Inoltre, la creazione di istantanee delle tabelle è soggetta alle seguenti limitazioni, che si applicano a tutti i job di copia delle tabelle:

  • Quando crei uno snapshot di una tabella, il nome deve rispettare le stesse regole di denominazione previste per la creazione di una tabella.
  • La creazione di snapshot delle tabelle è soggetta ai limiti di BigQuery per i job di copia.
  • Il set di dati di snapshot della tabella deve trovarsi nella stessa regione e nella stessa organizzazione del set di dati che contiene la tabella di cui stai acquisendo uno snapshot. Ad esempio, non puoi creare uno snapshot di una tabella in un set di dati basato negli Stati Uniti di una tabella situata in un set di dati basato nell'UE. Dovresti invece creare una copia della tabella.
  • Il tempo necessario a BigQuery per creare gli snapshot delle tabelle può variare notevolmente in base alle diverse esecuzioni perché lo spazio di archiviazione sottostante viene gestito dinamicamente.
  • Quando crei uno snapshot della tabella utilizzando la CLI BigQuery, lo snapshot ha la chiave di crittografia predefinita del set di dati di destinazione. Quando viene creato uno snapshot di tabella utilizzando SQL, lo snapshot ha la stessa chiave di crittografia della tabella di origine.

Crea uno snapshot 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 dal suo snapshot anche se il set di dati della tabella di base viene eliminato accidentalmente.

Quando crei uno snapshot tabella, specifichi la tabella di cui vuoi acquisire lo snapshot e un nome univoco per lo snapshot tabella. Se vuoi, puoi specificare l'ora dello snapshot e la relativa scadenza.

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

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Explorer, espandi i nodi del progetto e del set di dati della tabella di cui vuoi acquisire lo snapshot.

  3. Fai clic sul nome della tabella di cui vuoi acquisire uno snapshot.

  4. Nel riquadro della tabella visualizzato, fai clic su Istantanea.

    Fai clic su Snapshot.

  5. Nel riquadro Crea snapshot tabella visualizzato, inserisci le informazioni su Progetto, Set di dati e Tabella per il nuovo snapshot tabella.

  6. Nel campo Ora di scadenza, inserisci la data e l'ora di 24 ore da adesso.

  7. Fai clic su Salva.

SQL

Utilizza l'istruzione DDL CREATE SNAPSHOT TABLE:

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. 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 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 tra 24 ore.

  3. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire query, consulta Eseguire una query interattiva.

bq

Inserisci il seguente comando in Cloud Shell:

Vai a 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 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 progetto per cui fatturare 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 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 tra 24 ore.

Come per le tabelle, se non viene specificata una scadenza, lo snapshot della tabella scade dopo la data e l'ora di scadenza predefiniti della tabella o del set di dati che contiene lo snapshot della tabella.

Creare uno snapshot di una tabella utilizzando il viaggio nel tempo

Puoi creare un'istantanea di una tabella così com'era un'ora fa utilizzando una delle seguenti opzioni:

Console

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Explorer, espandi i nodi del progetto e del set di dati della tabella di cui vuoi acquisire lo snapshot.

  3. Fai clic sul nome della tabella di cui vuoi acquisire uno snapshot.

  4. Nel riquadro della tabella visualizzato, fai clic su Istantanea.

    Fai clic su Snapshot.

  5. Nel riquadro Crea snapshot tabella visualizzato, inserisci le informazioni su Progetto, Set di dati e Tabella per il nuovo snapshot tabella.

  6. Nel campo Ora istantanea, inserisci la data e l'ora di 1 ora fa.

  7. Fai clic su Salva.

SQL

Utilizza l'istruzione DDL CREATE SNAPSHOT TABLE con una clausola FOR SYSTEM_TIME AS OF:

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. 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 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.

  3. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire query, consulta Eseguire una query interattiva.

bq

Inserisci il seguente comando in Cloud Shell:

Vai a 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 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 progetto per cui fatturare 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 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 tabella, l'accesso a livello di tabella allo snapshot 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 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 all'istantanea della tabella.

Passaggi successivi