Tabellen-Snapshots erstellen

In diesem Dokument wird beschrieben, wie Sie mit der Google Cloud Console, der SQL-Anweisung CREATE SNAPSHOT TABLE, dem bq cp --snapshot-Befehl oder der jobs.insert API einen Snapshot einer Tabelle erstellen. Dieses Dokument richtet sich an Nutzer, die mit BigQuery-Tabellen-Snapshots vertraut sind.

Berechtigungen und Rollen

In diesem Abschnitt werden die IAM-Berechtigungen (Identity and Access Management) beschrieben, die Sie zum Erstellen eines Tabellen-Snapshots benötigen, und die vordefinierten IAM-Rollen, die diese Berechtigungen gewähren.

Berechtigungen

Zum Erstellen eines Tabellen-Snapshots benötigen Sie die folgenden Berechtigungen:

Berechtigung Ressource Hinweise
Alle der Folgenden:

bigquery.tables.get
bigquery.tables.getData
bigquery.tables.createSnapshot
bigquery.datasets.get
bigquery.jobs.create
Die Tabelle, von der Sie einen Snapshot erstellen möchten. Da der Snapshot nach Ablauf des Snapshots später gelöscht wird, benötigen Sie zum Erstellen eines Snapshots mit einer Ablaufzeit die Berechtigung bigquery.tables.deleteSnapshot.
bigquery.tables.create
bigquery.tables.updateData
Das Dataset, das den Tabellen-Snapshot enthält.

Rollen

Die folgenden vordefinierten BigQuery-Rollen bieten die erforderlichen Berechtigungen:

Rolle Ressource Hinweise
Mindestens eine der folgenden:

bigquery.dataViewer
bigquery.dataEditor
bigquery.dataOwner

Und mindestens eine der folgenden:

bigquery.jobUser
bigquery.studioUser
bigquery.user
bigquery.studioAdmin
bigquery.admin
Die Tabelle, von der Sie einen Snapshot erstellen möchten. Zum Erstellen eines Snapshots mit Ablaufzeit können nur bigquery.dataOwner, bigquery.admin und bigquery.studioAdmin verwendet werden.
Mindestens eine der folgenden:

bigquery.dataEditor
bigquery.dataOwner
bigquery.studioAdmin
bigquery.admin
Das Dataset, das den neuen Tabellen-Snapshot enthält.

Beschränkungen

Informationen zu den Beschränkungen von Tabellen-Snapshots finden Sie unter Beschränkungen von Tabellen-Snapshots.

Außerdem unterliegt das Erstellen von Tabellen-Snapshots den folgenden Beschränkungen, die für alle Tabellenkopierjobs gelten:

  • Wenn Sie einen Tabellen-Snapshot erstellen, muss dessen Name denselben Namensregeln wie beim Erstellen einer Tabelle entsprechen.
  • Das Erstellen von Tabellen-Snapshots unterliegt den Limits für BigQuery-Kopierjobs.
  • Das Tabellen-Snapshot-Dataset muss sich in derselben Region und unter derselben Organisation wie das Dataset befinden, das die Tabelle des Snapshots enthält. Beispielsweise können Sie keinen Tabellen-Snapshot in einem US-basierten Dataset einer Tabelle erstellen, die sich in einem EU-basierten Dataset befindet. Sie müssen stattdessen eine Kopie der Tabelle anlegen.
  • Die Zeit, die BigQuery zum Erstellen von Tabellen-Snapshots benötigt, kann in verschiedenen Ausführungen erheblich variieren, da der zugrunde liegende Speicher dynamisch verwaltet wird.
  • Wenn Sie einen Tabellen-Snapshot mit der BigQuery-Befehlszeile erstellen, hat der Snapshot den Standardverschlüsselungsschlüssel des Ziel-Datasets. Wenn Sie einen Tabellen-Snapshot mit SQL erstellen, hat der Snapshot denselben Verschlüsselungsschlüssel wie die Quelltabelle.

Tabellen-Snapshot erstellen

Es empfiehlt sich, einen Tabellen-Snapshot in einem anderen Dataset als die Basistabelle zu erstellen. Mit dieser Vorgehensweise kann die Basistabelle aus ihrem Tabellen-Snapshot wiederhergestellt werden, auch wenn das Dataset der Basistabelle versehentlich gelöscht wird.

Wenn Sie einen Tabellen-Snapshot erstellen, geben Sie die Tabelle an, die Sie erstellen möchten, sowie einen eindeutigen Namen für den Tabellen-Snapshot. Optional können Sie die Zeit des Snapshots und den Ablauf des Tabellen-Snapshots angeben.

Tabellen-Snapshot mit Ablauf erstellen

Sie können mit einer der folgenden Optionen einen Snapshot einer Tabelle erstellen, der nach 24 Stunden abläuft:

Console

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Maximieren Sie im Bereich Explorer die Projekt- und Dataset-Knoten der Tabelle, von der Sie einen Snapshot erstellen möchten.

  3. Klicken Sie auf den Namen der Tabelle, von der Sie einen Snapshot erstellen möchten.

  4. Klicken Sie im Tabellenbereich auf Snapshot.

    Klicken Sie auf Snapshot.

  5. Geben Sie im angezeigten Bereich Tabellen-Snapshot erstellen die Informationen für Projekt, Dataset und Tabelle für den neuen Tabellen-Snapshot ein.

  6. Geben Sie im Feld Ablaufzeit das Datum und die Uhrzeit für 24 Stunden ab jetzt ein.

  7. Klicken Sie auf Speichern.

SQL

Verwenden Sie die DDL-Anweisung CREATE SNAPSHOT TABLE:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    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');

    Dabei gilt:

    • SNAPSHOT_PROJECT_ID: die Projekt-ID des Projekts, in dem der Snapshot erstellt werden soll.
    • SNAPSHOT_DATASET_NAME: der Name des Datasets, in dem der Snapshot erstellt werden soll.
    • SNAPSHOT_NAME: der Name des Snapshots, den Sie erstellen.
    • TABLE_PROJECT_ID: die Projekt-ID des Projekts, das die Tabelle enthält, aus der Sie den Snapshot erstellen.
    • TABLE_DATASET_NAME: der Name des Datasets, das die Tabelle enthält, aus der Sie den Snapshot erstellen.
    • TABLE_NAME: der Name der Tabelle, aus der Sie den Snapshot erstellen.
    • TIMESTAMP_VALUE: ein Zeitstempelwert, der das Datum und die Uhrzeit in 24 Stunden ab jetzt darstellt.

  3. Klicken Sie auf Ausführen.

Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.

bq

Führen Sie dazu in Cloud Shell den folgenden Befehl aus.

Zu 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

Dabei gilt:

  • TABLE_PROJECT_ID: die Projekt-ID des Projekts, das die Tabelle enthält, aus der Sie den Snapshot erstellen.
  • TABLE_DATASET_NAME: der Name des Datasets, das die Tabelle enthält, aus der Sie den Snapshot erstellen.
  • TABLE_NAME: der Name der Tabelle, aus der Sie den Snapshot erstellen.
  • SNAPSHOT_PROJECT_ID: die Projekt-ID des Projekts, in dem der Snapshot erstellt werden soll.
  • SNAPSHOT_DATASET_NAME: der Name des Datasets, in dem der Snapshot erstellt werden soll.
  • SNAPSHOT_NAME: der Name des Snapshots, den Sie erstellen.

Das Flag --no_clobber ist erforderlich.

API

Rufen Sie die Methode jobs.insert mit den folgenden Parametern auf:

Parameter Wert
projectId Die Projekt-ID des Projekts, das für diesen Vorgang abgerechnet wird.
Anfragetext
{
  "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"
    }
  }
}

Dabei gilt:

  • TABLE_PROJECT_ID: die Projekt-ID des Projekts, das die Tabelle enthält, aus der Sie den Snapshot erstellen.
  • TABLE_DATASET_NAME: der Name des Datasets, das die Tabelle enthält, aus der Sie den Snapshot erstellen.
  • TABLE_NAME: der Name der Tabelle, aus der Sie den Snapshot erstellen.
  • SNAPSHOT_PROJECT_ID: die Projekt-ID des Projekts, in dem der Snapshot erstellt werden soll.
  • SNAPSHOT_DATASET_NAME: der Name des Datasets, in dem der Snapshot erstellt werden soll.
  • SNAPSHOT_NAME: der Name des Snapshots, den Sie erstellen.
  • TIMESTAMP_VALUE: ein Zeitstempelwert, der das Datum und die Uhrzeit in 24 Stunden ab jetzt darstellt.

Wie bei Tabellen läuft der Tabellen-Snapshot, wenn keine Ablaufzeit angegeben ist, nach der Standardablaufzeit für die Tabelle oder das Dataset ab, das den Tabellen-Snapshot enthält.

Tabellenübersicht mit Zeitreise erstellen

Sie können einen Tabellen-Snapshot einer Tabelle von vor einer Stunde erstellen. Verwenden Sie dazu eine der folgenden Optionen:

Console

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Maximieren Sie im Bereich Explorer die Projekt- und Dataset-Knoten der Tabelle, von der Sie einen Snapshot erstellen möchten.

  3. Klicken Sie auf den Namen der Tabelle, von der Sie einen Snapshot erstellen möchten.

  4. Klicken Sie im Tabellenbereich auf Snapshot.

    Klicken Sie auf Snapshot.

  5. Geben Sie im angezeigten Bereich Tabellen-Snapshot erstellen die Informationen für Projekt, Dataset und Tabelle für den neuen Tabellen-Snapshot ein.

  6. Geben Sie im Feld Snapshot-Zeit das Datum und die Uhrzeit von vor einer Stunde ein.

  7. Klicken Sie auf Speichern.

SQL

Verwenden Sie die DDL-Anweisung CREATE SNAPSHOT TABLE mit einer FOR SYSTEM_TIME AS OF-Klausel:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    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);

    Dabei gilt:

    • SNAPSHOT_PROJECT_ID: die Projekt-ID des Projekts, in dem der Snapshot erstellt werden soll.
    • SNAPSHOT_DATASET_NAME: der Name des Datasets, in dem der Snapshot erstellt werden soll.
    • SNAPSHOT_NAME: der Name des Snapshots, den Sie erstellen.
    • TABLE_PROJECT_ID: die Projekt-ID des Projekts, das die Tabelle enthält, aus der Sie den Snapshot erstellen.
    • TABLE_DATASET_NAME: der Name des Datasets, das die Tabelle enthält, aus der Sie den Snapshot erstellen.
    • TABLE_NAME: der Name der Tabelle, aus der Sie den Snapshot erstellen.

  3. Klicken Sie auf Ausführen.

Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.

bq

Führen Sie dazu in Cloud Shell den folgenden Befehl aus.

Zu Cloud Shell

bq cp \
--no_clobber \
--snapshot \
TABLE_PROJECT_ID:TABLE_DATASET_NAME.TABLE_NAME@-3600000 \
SNAPSHOT_PROJECT_ID:SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME

Dabei gilt:

  • TABLE_PROJECT_ID: die Projekt-ID des Projekts, das die Tabelle enthält, aus der Sie den Snapshot erstellen.
  • TABLE_DATASET_NAME: der Name des Datasets, das die Tabelle enthält, aus der Sie den Snapshot erstellen.
  • TABLE_NAME: der Name der Tabelle, aus der Sie den Snapshot erstellen.
  • SNAPSHOT_PROJECT_ID: die Projekt-ID des Projekts, in dem der Snapshot erstellt werden soll.
  • SNAPSHOT_DATASET_NAME: der Name des Datasets, in dem der Snapshot erstellt werden soll.
  • SNAPSHOT_NAME: der Name des Snapshots, den Sie erstellen.

Das Flag --no_clobber ist erforderlich.

API

Rufen Sie die Methode jobs.insert mit den folgenden Parametern auf:

Parameter Wert
projectId Die Projekt-ID des Projekts, das für diesen Vorgang abgerechnet wird.
Anfragetext
{
  "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"
    }
  }
}

Dabei gilt:

  • TABLE_PROJECT_ID: die Projekt-ID des Projekts, das die Tabelle enthält, aus der Sie den Snapshot erstellen.
  • TABLE_DATASET_NAME: der Name des Datasets, das die Tabelle enthält, aus der Sie den Snapshot erstellen.
  • TABLE_NAME: der Name der Tabelle, aus der Sie den Snapshot erstellen.
  • SNAPSHOT_PROJECT_ID: die Projekt-ID des Projekts, in dem der Snapshot erstellt werden soll.
  • SNAPSHOT_DATASET_NAME: der Name des Datasets, in dem der Snapshot erstellt werden soll.
  • SNAPSHOT_NAME: der Name des Snapshots, den Sie erstellen.

Weitere Informationen zum Angeben einer früheren Version einer Tabelle finden Sie unter Auf Verlaufsdaten über Zeitreisen zugreifen.

Tabellenzugriffssteuerung

Informationen zum Steuern des Zugriffs auf Tabellen in BigQuery finden Sie unter Einführung in die Tabellenzugriffssteuerung.

Wenn Sie einen Tabellen-Snapshot erstellen, wird der Zugriff auf Tabellenebene auf den Tabellen-Snapshot so festgelegt:

  • Wenn der Tabellen-Snapshot eine vorhandene Tabelle überschreibt, wird der Zugriff auf Tabellenebene für die vorhandene Tabelle beibehalten. Tags werden nicht aus der Basistabelle kopiert.
  • Wenn der Tabellen-Snapshot eine neue Ressource ist, wird der Zugriff auf Tabellenebene für den Tabellen-Snapshot durch die Zugriffsrichtlinien des Datasets bestimmt, in dem der Tabellen-Snapshot erstellt wird. Außerdem werden Tags aus der Basistabelle in den Tabellen-Snapshot kopiert.

Nächste Schritte