Datasets verwalten

In diesem Dokument wird beschrieben, wie Sie Datasets kopieren, Datasets an einem anderen Speicherort neu erstellen, Datasets sichern, Datasets löschen, Tabellen aus gelöschten Datasets wiederherstellen und Datasets in BigQuery wiederherstellen.

Als BigQuery-Administrator können Sie den Zugriff auf Tabellen und Ansichten steuern, die von Analysten verwendet werden. Weitere Informationen zu Datasets finden Sie unter Einführung in Datasets.

Sie können den Namen eines vorhandenen Datasets nicht ändern oder ein Dataset nach der Erstellung nicht verschieben. Als Behelfslösung zum Ändern des Dataset-Namens können Sie ein Dataset kopieren und den Namen des Ziel-Datasets ändern. Zum Verschieben eines Datasets können Sie eine der folgenden Methoden verwenden:

Erforderliche Rollen

In diesem Abschnitt werden die Rollen und Berechtigungen beschrieben, die Sie zum Verwalten von Datasets benötigen. Wenn sich das Quell- oder Ziel-Dataset in dem Projekt befindet, das Sie zum Kopieren verwenden, benötigen Sie keine zusätzlichen Berechtigungen oder Rollen für dieses Dataset.

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zur Verwaltung von Datasets benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Verwalten von Datasets erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Zur Verwaltung von Datasets sind die folgenden Berechtigungen erforderlich:

  • Dataset kopieren:
    • bigquery.transfers.update für das Zielprojekt
    • bigquery.jobs.create für das Zielprojekt
    • bigquery.datasets.get für das Quell- und das Ziel-Dataset
    • bigquery.tables.list für das Quell- und das Ziel-Dataset
    • bigquery.datasets.update für das Ziel-Dataset:
    • bigquery.tables.create für das Ziel-Dataset:
  • Dataset löschen:
    • bigquery.datasets.delete für das Projekt
    • bigquery.tables.delete für das Projekt
  • So stellen Sie ein gelöschtes Dataset wieder her:
    • bigquery.datasets.create für das Projekt
    • bigquery.datasets.get für das Dataset

Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Einführung in IAM.

Datasets kopieren

Sie können ein Dataset, einschließlich partitionierter Daten, innerhalb einer Region oder regionenübergreifend kopieren, ohne Daten in BigQuery zu extrahieren, zu verschieben oder neu zu laden. BigQuery verwendet den BigQuery Data Transfer Service im Backend, um Datasets zu kopieren. Standortüberlegungen zum Übertragen von Daten finden Sie unter Standort und Übertragung von Daten.

Für jede Dataset-Kopiekonfiguration kann jeweils eine Übertragungsausführung aktiv sein. Weitere Übertragungsausführungen werden in die Warteschlange gestellt. Wenn Sie die Google Cloud Console verwenden, können Sie wiederkehrende Kopien planen und eine E-Mail oder Pub/Sub-Benachrichtigungen mit BigQuery Data Transfer Service konfigurieren.

Beschränkungen

Beim Kopieren von Datasets gelten die folgenden Einschränkungen:

  • Sie können die folgenden Ressourcen nicht aus einem Quell-Dataset kopieren:

    • Ansichten.
    • Routinen, einschließlich UDFs.
    • Externe Tabellen.
    • CDC-Tabellen (Change Data Capture), wenn der Kopierjob regionenübergreifend ist. Das Kopieren von CDC-Tabellen innerhalb derselben Region wird unterstützt.
    • Der regionenübergreifende Kopierjob für Tabellen wird für Tabellen, die mit vom Kunden verwalteten verschlüsselten Schlüsseln (CMEK) verschlüsselt sind, nicht unterstützt, wenn das Ziel-Dataset nicht mit CMEK verschlüsselt ist und kein CMEK angegeben wurde. Das regionenübergreifende Kopieren von Tabellen mit Standardverschlüsselung wird ebenfalls unterstützt.

      Sie können alle verschlüsselten Tabellen innerhalb derselben Region kopieren, einschließlich Tabellen, die mit CMEK verschlüsselt wurden.

  • Sie können die folgenden Ressourcen nicht als Ziel-Datasets für Kopierjobs verwenden:

    • Schreiboptimierter Speicher.
    • Mit CMEK verschlüsseltes Dataset, wenn sich der Kopierjob in den verschiedenen Regionen befindet und die Quelltabelle nicht mit CMEK verschlüsselt ist.

      Mit CMEK verschlüsselte Tabellen sind jedoch als Zieltabellen zulässig, wenn innerhalb derselben Region kopiert wird.

  • Die Mindesthäufigkeit zwischen Kopierjobs beträgt 12 Stunden.

  • Das Anfügen von Daten an eine partitionierte Tabelle im Ziel-Dataset wird nicht unterstützt.

  • Wenn eine Tabelle sowohl im Quell-Dataset als auch im Ziel-Dataset vorhanden ist und die Quelltabelle seit der letzten erfolgreichen Kopie nicht geändert wurde, wird sie übersprungen. Die Quelltabelle wird auch dann übersprungen, wenn das Kästchen Zieltabellen überschreiben angeklickt ist.

  • Beim Kürzen von Tabellen im Ziel-Dataset erkennt der Dataset-Kopierjob keine Änderungen an Ressourcen im Ziel-Dataset, bevor der Kopierjob gestartet wird. Der Dataset-Kopierjob überschreibt alle Daten im Ziel-Dataset, einschließlich der Tabellen und des Schemas.

  • In der Zieltabelle werden möglicherweise keine Änderungen an den Quelltabellen nach dem Start eines Kopierjobs widergespiegelt.

  • Das Kopieren eines Datasets wird in BigQuery Omni-Regionen nicht unterstützt.

  • Wenn Sie ein Dataset in ein Projekt in einem anderen VPC Service Controls-Dienstperimeter kopieren möchten, müssen Sie die folgenden Regeln für ausgehenden Traffic festlegen:

    • In der VPC Service Controls-Konfiguration des Dienstperimeters des Zielprojekts muss das IAM-Hauptkonto die folgenden Methoden haben:

      • bigquery.datasets.get
      • bigquery.tables.list
      • bigquery.tables.get,
      • bigquery.tables.getData
    • In der Konfiguration des Dienstperimeters von VPC Service Controls im Quellprojekt muss für das verwendete IAM-Hauptkonto die Methode auf All Methods festgelegt sein.

Dataset kopieren

Wählen Sie eine der folgenden Optionen aus:

Console

  1. Aktivieren Sie den BigQuery Data Transfer Service für Ihr Ziel-Dataset.

    BigQuery Data Transfer Service API aktivieren

  2. Prüfen Sie, ob Sie die erforderlichen Rollen haben.

    Wenn Sie Benachrichtigungen über die Übertragungsausführung für Pub/Sub einrichten möchten (Option 2 später in diesen Schritten), benötigen Sie die Berechtigung pubsub.topics.setIamPolicy.

    Wenn Sie nur E-Mail-Benachrichtigungen einrichten, sind keine Pub/Sub-Berechtigungen erforderlich. Weitere Informationen finden Sie unter Ausführungsbenachrichtigungen für BigQuery Data Transfer Service.

  3. Erstellen Sie ein BigQuery-Dataset in derselben Region oder in einer anderen Region als Ihr Quell-Dataset.

Option 1: BigQuery-Kopierfunktion verwenden

Verwenden Sie zum Erstellen einer einmaligen Übertragung die BigQuery-Kopierfunktion:

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie ein Dataset aus.

  3. Klicken Sie im Bereich Dataset-Informationen auf Kopieren und gehen Sie dann so vor:

    1. Erstellen Sie im Feld Dataset entweder ein neues Dataset oder wählen Sie eine vorhandene Dataset-ID aus der Liste aus.

      Dataset-Namen müssen innerhalb eines Projekts eindeutig sein. Das Projekt und das Dataset können sich in verschiedenen Regionen befinden, aber für das Kopieren von regionenübergreifenden Datasets werden nicht alle Regionen unterstützt.

      Im Feld Speicherort wird der Speicherort des Quell-Datasets angezeigt.

    2. Optional: Klicken Sie auf das Kästchen Zieltabellen überschreiben, um sowohl die Daten als auch das Schema der Zieltabellen mit den Quelltabellen zu überschreiben. Die Quell- und die Zieltabelle müssen dasselbe Partitionierungsschema haben.

    3. Klicken Sie zum Kopieren des Datasets auf Kopieren.

Option 2: BigQuery Data Transfer Service verwenden

Verwenden Sie den BigQuery Data Transfer Service in der Google Cloud Console des Zielprojekts, um wiederkehrende Kopien zu planen und E-Mail- oder Pub/Sub-Benachrichtigungen zu konfigurieren:

  1. Rufen Sie die Seite Datenübertragungen auf.

    Zu "Datenübertragungen"

  2. Klicken Sie auf Übertragung erstellen.

  3. Wählen Sie in der Liste Quelle die Option Dataset-Kopie aus.

  4. Geben Sie im Feld Anzeigename einen Namen für die Übertragungsausführung ein.

  5. Führen Sie im Abschnitt Zeitplanoptionen folgende Schritte aus:

    1. Wählen Sie für Wiederholungshäufigkeit aus, wie oft die Übertragung ausgeführt werden soll:

      Wenn Sie Benutzerdefiniert auswählen, geben Sie eine benutzerdefinierte Häufigkeit ein, z. B. every day 00:00. Weitere Informationen finden Sie unter Zeitplan formatieren.

    2. Geben Sie für Start date and run time (Startdatum und Laufzeit) das Datum und die Uhrzeit für den Start der Übertragung ein. Wenn Sie Jetzt starten auswählen, ist diese Option deaktiviert.

  6. Wählen Sie im Abschnitt Zieleinstellungen ein Ziel-Dataset zum Speichern Ihrer Übertragungsdaten aus. Sie können auch auf NEUES DATASET ERSTELLEN klicken, um ein neues Dataset zu erstellen, bevor Sie es für diese Übertragung auswählen.

  7. Geben Sie im Abschnitt Details zur Datenquelle die folgenden Informationen ein:

    1. Geben Sie unter Quell-Dataset die ID des Datasets ein, das Sie kopieren möchten.
    2. Geben Sie unter Quellprojekt die Projekt-ID Ihres Quell-Datasets ein.
  8. Klicken Sie auf das Kästchen Zieltabellen überschreiben, um sowohl die Daten als auch das Schema der Zieltabellen mit den Quelltabellen zu überschreiben. Die Quell- und die Zieltabelle müssen dasselbe Partitionierungsschema haben.

  9. Wählen Sie im Menü Dienstkonto ein Dienstkonto aus den Dienstkonten aus, die mit Ihrem Google Cloud-Projekt verknüpft sind. Sie können Ihre Übertragung mit einem Dienstkonto verknüpfen, anstatt Ihre Nutzeranmeldedaten zu verwenden. Weitere Informationen zur Verwendung von Dienstkonten mit Datenübertragungen finden Sie unter Dienstkonten verwenden.

    • Wenn Sie sich mit einer föderierten Identität angemeldet haben, ist ein Dienstkonto zum Erstellen einer Übertragung erforderlich. Wenn Sie sich mit einem Google-Konto angemeldet haben, ist ein Dienstkonto für die Übertragung optional.
    • Das Dienstkonto muss die erforderlichen Rollen haben.
  10. Optional: Gehen Sie im Abschnitt Benachrichtigungsoptionen so vor:

    • Klicken Sie auf die Ein/Aus-Schaltfläche, um E-Mail-Benachrichtigungen zu aktivieren. Wenn Sie diese Option aktivieren, erhält der Inhaber der Übertragungskonfiguration eine E-Mail-Benachrichtigung, wenn eine Übertragung fehlschlägt.
    • Klicken Sie zum Aktivieren von Pub/Sub-Benachrichtigungen auf die Ein/Aus-Schaltfläche und wählen Sie entweder ein Thema aus der Liste aus oder klicken Sie auf Thema erstellen. Mit dieser Option werden Pub/Sub-Ausführungsbenachrichtigungen für Ihre Übertragung konfiguriert.
  11. Klicken Sie auf Speichern.

bq

  1. Aktivieren Sie den BigQuery Data Transfer Service für Ihr Ziel-Dataset.

  2. Prüfen Sie, ob Sie die erforderlichen Rollen haben.

  3. Zum Erstellen eines BigQuery-Datasets verwenden Sie den Befehl bq mk mit dem Dataset-Erstellungs-Flag --dataset und dem Flag location:

    bq mk \
      --dataset \
      --location=LOCATION \
      PROJECT:DATASET

    Ersetzen Sie dabei Folgendes:

    • LOCATION: der Standort, an den Sie das Dataset kopieren möchten
    • PROJECT: die Projekt-ID Ihres Ziel-Datasets
    • DATASET: der Name des Ziel-Datasets
  4. Verwenden Sie zum Kopieren eines Datasets den Befehl bq mk mit dem Flag --transfer_config für die Übertragungserstellung und dem Flag --data_source. Sie müssen das Flag --data_source auf cross_region_copy setzen. Eine vollständige Liste der gültigen Werte für --data_source finden Sie unter transfer-config-Flags in der Referenz zum bq-Befehlszeilentool.

    bq mk \
      --transfer_config \
      --project_id=PROJECT \
      --data_source=cross_region_copy \
      --target_dataset=DATASET \
      --display_name=NAME \
     --service_account_name=SERCICE_ACCOUNT \
      --params='PARAMETERS'

    Ersetzen Sie dabei Folgendes:

    • NAME: der Anzeigename für den Kopierjob oder die Übertragungskonfiguration

    • SERVICE_ACCOUNT ist der Name des Dienstkontos, der zur Authentifizierung der Übertragung verwendet wird. Das Dienstkonto sollte zum selben project_id gehören, das für die Erstellung der Übertragung verwendet wurde, und sollte alle erforderlichen Berechtigungen haben.

    • PARAMETERS: die Parameter für die Übertragungskonfiguration im JSON-Format

      Die Parameter für die Konfiguration einer Dataset-Kopie umfassen Folgendes:

      • source_dataset_id: die ID des Quell-Datasets, das Sie kopieren möchten
      • source_project_id: die ID des Projekts, in dem sich das Quell-Dataset befindet
      • overwrite_destination_table: ein optionales Flag, mit dem Sie die Tabellen einer vorherigen Kopie kürzen und alle Daten aktualisieren können

      Die Quell- und die Zieltabelle müssen dasselbe Partitionierungsschema haben.

    Die folgenden Beispiele zeigen die Formatierung der Parameter entsprechend der Umgebung Ihres Systems:

    • Linux: Verwenden Sie einfache Anführungszeichen, um den JSON-String einzuschließen. Beispiel:

      '{"source_dataset_id":"mydataset","source_project_id":"mysourceproject","overwrite_destination_table":"true"}'
      
    • Windows-Befehlszeile: Verwenden Sie doppelte Anführungszeichen, um den JSON-String einzuschließen, und maskieren Sie doppelte Anführungszeichen im String mit einem umgekehrten Schrägstrich. Beispiel:

      "{\"source_dataset_id\":\"mydataset\",\"source_project_id\":\"mysourceproject\",\"overwrite_destination_table\":\"true\"}"
      
    • PowerShell: Verwenden Sie einfache Anführungszeichen, um den JSON-String einzuschließen und maskieren Sie doppelte Anführungszeichen im String mit einem umgekehrten Schrägstrich. Beispiel:

      '{\"source_dataset_id\":\"mydataset\",\"source_project_id\":\"mysourceproject\",\"overwrite_destination_table\":\"true\"}'
      

    Mit dem folgenden Befehl erstellen Sie beispielsweise eine Dataset-Kopierkonfiguration namens My Transfer mit einem Ziel-Dataset mydataset sowie ein Projekt mit der ID myproject.

    bq mk \
      --transfer_config \
      --project_id=myproject \
      --data_source=cross_region_copy \
      --target_dataset=mydataset \
      --display_name='My Transfer' \
      --params='{
          "source_dataset_id":"123_demo_eu",
          "source_project_id":"mysourceproject",
          "overwrite_destination_table":"true"
          }'

API

  1. Aktivieren Sie den BigQuery Data Transfer Service für Ihr Ziel-Dataset.

  2. Prüfen Sie, ob Sie die erforderlichen Rollen haben.

  3. Rufen Sie zum Erstellen eines BigQuery-Datasets die Methode datasets.insert mit einer definierten Dataset-Ressource auf.

  4. Zum Kopieren eines Datasets verwenden Sie die Methode projects.locations.transferConfigs.create und geben eine Instanz der Ressource TransferConfig an.

Java

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// Sample to copy dataset from another gcp project
public class CopyDataset {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String destinationProjectId = "MY_DESTINATION_PROJECT_ID";
    final String destinationDatasetId = "MY_DESTINATION_DATASET_ID";
    final String sourceProjectId = "MY_SOURCE_PROJECT_ID";
    final String sourceDatasetId = "MY_SOURCE_DATASET_ID";
    Map<String, Value> params = new HashMap<>();
    params.put("source_project_id", Value.newBuilder().setStringValue(sourceProjectId).build());
    params.put("source_dataset_id", Value.newBuilder().setStringValue(sourceDatasetId).build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(destinationDatasetId)
            .setDisplayName("Your Dataset Copy Name")
            .setDataSourceId("cross_region_copy")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .setSchedule("every 24 hours")
            .build();
    copyDataset(destinationProjectId, transferConfig);
  }

  public static void copyDataset(String projectId, TransferConfig transferConfig)
      throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      CreateTransferConfigRequest request =
          CreateTransferConfigRequest.newBuilder()
              .setParent(parent.toString())
              .setTransferConfig(transferConfig)
              .build();
      TransferConfig config = dataTransferServiceClient.createTransferConfig(request);
      System.out.println("Copy dataset created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("Copy dataset was not created." + ex.toString());
    }
  }
}

Python

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

Installieren Sie den Python-Client für die BigQuery Data Transfer API mit pip install google-cloud-bigquery-datatransfer. Erstellen Sie dann eine Übertragungskonfiguration, um das Dataset zu kopieren.
from google.cloud import bigquery_datatransfer

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

destination_project_id = "my-destination-project"
destination_dataset_id = "my_destination_dataset"
source_project_id = "my-source-project"
source_dataset_id = "my_source_dataset"
transfer_config = bigquery_datatransfer.TransferConfig(
    destination_dataset_id=destination_dataset_id,
    display_name="Your Dataset Copy Name",
    data_source_id="cross_region_copy",
    params={
        "source_project_id": source_project_id,
        "source_dataset_id": source_dataset_id,
    },
    schedule="every 24 hours",
)
transfer_config = transfer_client.create_transfer_config(
    parent=transfer_client.common_project_path(destination_project_id),
    transfer_config=transfer_config,
)
print(f"Created transfer config: {transfer_config.name}")

Sie können das vorherige Dataset löschen, um zusätzliche Speicherkosten zu vermeiden.

Dataset-Kopierjobs aufrufen

So rufen Sie den Status und die Details eines Dataset-Kopierjobs in der Google Cloud Console auf:

  1. Rufen Sie in der Google Cloud Console die Seite Datenübertragungen auf.

    Zu "Datenübertragungen"

  2. Wählen Sie eine Übertragung aus, für die Sie die Übertragungsdetails anzeigen möchten, und gehen Sie dann so vor:

    1. Wählen Sie auf der Seite Übertragungsdetails eine Übertragungsausführung aus.

    2. Klicken Sie zum Aktualisieren auf Aktualisieren.

Datasets an einem anderen Standort neu erstellen

So verschieben Sie ein Dataset manuell von einem Standort an einen anderen:

  1. Exportieren Sie die Daten aus Ihren BigQuery-Tabellen in einen Cloud Storage-Bucket, der sich am selben Standort wie das Dataset oder an einem Standort im Dataset befindet. Wenn sich Ihr Dataset zum Beispiel am multiregionalen Standort EU befindet, können Sie Ihre Daten in den Standort europe-west1 Belgien exportieren, der Teil der EU ist.

    Beim Exportieren von Daten aus BigQuery fallen keine Gebühren an. Dies ist jedoch anders, wenn Sie die exportierten Daten in Cloud Storage speichern. BigQuery-Exporte unterliegen den Limits für Exportjobs.

  2. Kopieren oder verschieben Sie die Daten aus Ihrem Cloud Storage-Export-Bucket in einen neuen Bucket, den Sie am Zielspeicherort erstellt haben. Wenn Sie zum Beispiel Ihre Daten aus der Multiregion US in die asia-northeast1-Region „Tokio” verschieben, werden die Daten in einen Bucket übertragen, den Sie in Tokio erstellt haben. Weitere Informationen zum Übertragen von Cloud Storage-Objekten finden Sie in der Cloud Storage-Dokumentation unter Objekte kopieren, umbenennen und verschieben.

    Bei der Übertragung von Daten zwischen Regionen fallen in Cloud Storage Gebühren für ausgehenden Netzwerk-Traffic an.

  3. Erstellen Sie am neuen Standort ein neues BigQuery-Dataset und laden Sie dann Ihre Daten aus dem Cloud Storage-Bucket in das neue Dataset.

    Beim Laden der Daten in BigQuery fallen keine Kosten an. Das gilt jedoch nicht für das Speichern von Daten in Cloud Storage. Hier werden Gebühren berechnet, bis Sie die Daten oder den Bucket löschen. Es fallen außerdem Kosten an, wenn Sie die Daten in BigQuery speichern, nachdem sie geladen wurden. Das Laden von Daten in BigQuery unterliegt den Limits für Ladejobs.

Sie können auch Cloud Composer verwenden, um große Datasets programmatisch zu verschieben und zu kopieren.

Weitere Informationen zur Verwendung von Cloud Storage zum Speichern und Verschieben großer Datasets finden Sie unter Cloud Storage mit Big Data verwenden.

Datasets sichern

Informationen zum Steuern des Zugriffs auf Datasets in BigQuery finden Sie unter Zugriff auf Datasets steuern. Informationen zur Datenverschlüsselung finden Sie unter Verschlüsselung inaktiver Daten.

Datasets löschen

Wenn Sie ein Dataset über die Google Cloud Console löschen, werden die Tabellen und Ansichten im Dataset, einschließlich ihrer Daten, gelöscht. Wenn Sie ein Dataset mit dem bq-Befehlszeilentool löschen, müssen Sie das Flag -r verwenden, um die Tabellen und Ansichten zu löschen.

Wählen Sie eine der folgenden Optionen aus, um ein Dataset zu löschen:

Console

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie ein Dataset aus.

  3. Maximieren Sie die Option Aktionen und klicken Sie auf Löschen.

  4. Geben Sie im Dialogfeld Dataset löschen den Wert delete in das Feld ein und klicken Sie auf Löschen.

SQL

Zum Löschen eines Datasets verwenden Sie die DROP SCHEMA-DDL-Anweisung.

Im folgenden Beispiel wird ein Dataset mit dem Namen mydataset erstellt:

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

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    DROP SCHEMA IF EXISTS mydataset;

    Standardmäßig funktioniert dies nur mit dem Löschen eines leeren Datasets. Wenn Sie ein Dataset und dessen gesamten Inhalt löschen möchten, verwenden Sie das Schlüsselwort CASCADE:

    DROP SCHEMA IF EXISTS mydataset CASCADE;

  3. Klicken Sie auf Ausführen.

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

bq

Verwenden Sie den Befehl bq rm mit dem Flag --dataset oder -d, das optional ist. Wenn Ihr Dataset Tabellen enthält, müssen Sie das Flag -r verwenden, um alle Tabellen im Dataset zu entfernen. Wenn Sie das Flag -r verwenden, können Sie das Flag --dataset oder -d weglassen.

Nachdem Sie den Befehl ausgeführt haben, fordert das System eine Bestätigung an. Sie können die Bestätigung mit dem Flag -f überspringen.

Wenn Sie eine Tabelle in einem anderen Projekt als Ihrem Standardprojekt löschen, fügen Sie dem Dataset-Namen die Projekt-ID im folgenden Format hinzu: PROJECT_ID:DATASET.

bq rm -r -f -d PROJECT_ID:DATASET

Ersetzen Sie dabei Folgendes:

  • PROJECT_ID: Ihre Projekt-ID.
  • DATASET: der Name des zu löschenden Datasets

Beispiele:

Mit dem folgenden Befehl entfernen Sie ein Dataset mit dem Namen mydataset und alle darin enthaltenen Tabellen aus Ihrem Standardprojekt. Der Befehl verwendet das Flag -d.

bq rm -r -d mydataset

Geben Sie bei entsprechender Aufforderung y ein und drücken Sie die Eingabetaste.

Geben Sie den folgenden Befehl ein, um mydataset und alle darin enthaltenen Tabellen aus myotherproject zu entfernen. Für den Befehl wird nicht das optionale Flag -d verwendet. Das Flag -f wird zum Überspringen der Bestätigung verwendet.

bq rm -r -f myotherproject:mydataset

Mit dem Befehl bq ls können Sie prüfen, ob das Dataset gelöscht wurde.

API

Rufen Sie die Methode datasets.delete auf, um das Dataset zu löschen. Setzen Sie dann den Parameter deleteContents auf true, um die darin enthaltenen Tabellen zu löschen.

C#

Im folgenden Codebeispiel wird ein leeres Dataset gelöscht.

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von C# in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery C# API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

Installieren Sie den Python-Client für die BigQuery Data Transfer API mit pip install google-cloud-bigquery-datatransfer. Erstellen Sie dann eine Übertragungskonfiguration, um das Dataset zu kopieren.

using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryDeleteDataset
{
    public void DeleteDataset(
        string projectId = "your-project-id",
        string datasetId = "your_empty_dataset"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        // Delete a dataset that does not contain any tables
        client.DeleteDataset(datasetId: datasetId);
        Console.WriteLine($"Dataset {datasetId} deleted.");
    }
}

Im folgenden Codebeispiel werden ein Dataset und sein gesamter Inhalt gelöscht:

// Copyright(c) 2018 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
//

using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryDeleteDatasetAndContents
{
    public void DeleteDatasetAndContents(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_with_tables"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        // Use the DeleteDatasetOptions to delete a dataset and its contents
        client.DeleteDataset(
            datasetId: datasetId,
            options: new DeleteDatasetOptions() { DeleteContents = true }
        );
        Console.WriteLine($"Dataset {datasetId} and contents deleted.");
    }
}

Go

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

Installieren Sie den Python-Client für die BigQuery Data Transfer API mit pip install google-cloud-bigquery-datatransfer. Erstellen Sie dann eine Übertragungskonfiguration, um das Dataset zu kopieren.
import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// deleteDataset demonstrates the deletion of an empty dataset.
func deleteDataset(projectID, datasetID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	ctx := context.Background()

	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	// To recursively delete a dataset and contents, use DeleteWithContents.
	if err := client.Dataset(datasetID).Delete(ctx); err != nil {
		return fmt.Errorf("Delete: %v", err)
	}
	return nil
}

Java

Im folgenden Codebeispiel wird ein leeres Dataset gelöscht.

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

Installieren Sie den Python-Client für die BigQuery Data Transfer API mit pip install google-cloud-bigquery-datatransfer. Erstellen Sie dann eine Übertragungskonfiguration, um das Dataset zu kopieren.
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQuery.DatasetDeleteOption;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.DatasetId;

public class DeleteDataset {

  public static void runDeleteDataset() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    deleteDataset(projectId, datasetName);
  }

  public static void deleteDataset(String projectId, String datasetName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      DatasetId datasetId = DatasetId.of(projectId, datasetName);
      boolean success = bigquery.delete(datasetId, DatasetDeleteOption.deleteContents());
      if (success) {
        System.out.println("Dataset deleted successfully");
      } else {
        System.out.println("Dataset was not found");
      }
    } catch (BigQueryException e) {
      System.out.println("Dataset was not deleted. \n" + e.toString());
    }
  }
}

Im folgenden Codebeispiel werden ein Dataset und sein gesamter Inhalt gelöscht:

/*
 * Copyright 2020 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.bigquery;

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.DatasetId;

// Sample to delete dataset with contents.
public class DeleteDatasetAndContents {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    deleteDatasetAndContents(projectId, datasetName);
  }

  public static void deleteDatasetAndContents(String projectId, String datasetName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      DatasetId datasetId = DatasetId.of(projectId, datasetName);
      // Use the force parameter to delete a dataset and its contents
      boolean success = bigquery.delete(datasetId, BigQuery.DatasetDeleteOption.deleteContents());
      if (success) {
        System.out.println("Dataset deleted with contents successfully");
      } else {
        System.out.println("Dataset was not found");
      }
    } catch (BigQueryException e) {
      System.out.println("Dataset was not deleted with contents. \n" + e.toString());
    }
  }
}

Node.js

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Node.js in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Node.js API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

Installieren Sie den Python-Client für die BigQuery Data Transfer API mit pip install google-cloud-bigquery-datatransfer. Erstellen Sie dann eine Übertragungskonfiguration, um das Dataset zu kopieren.
// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function deleteDataset() {
  // Deletes a dataset named "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = 'my_dataset';

  // Create a reference to the existing dataset
  const dataset = bigquery.dataset(datasetId);

  // Delete the dataset and its contents
  await dataset.delete({force: true});
  console.log(`Dataset ${dataset.id} deleted.`);
}

PHP

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von PHP in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery PHP API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

Installieren Sie den Python-Client für die BigQuery Data Transfer API mit pip install google-cloud-bigquery-datatransfer. Erstellen Sie dann eine Übertragungskonfiguration, um das Dataset zu kopieren.
use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->delete();
printf('Deleted dataset %s' . PHP_EOL, $datasetId);

Python

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

Installieren Sie den Python-Client für die BigQuery Data Transfer API mit pip install google-cloud-bigquery-datatransfer. Erstellen Sie dann eine Übertragungskonfiguration, um das Dataset zu kopieren.

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set model_id to the ID of the model to fetch.
# dataset_id = 'your-project.your_dataset'

# Use the delete_contents parameter to delete a dataset and its contents.
# Use the not_found_ok parameter to not receive an error if the dataset has already been deleted.
client.delete_dataset(
    dataset_id, delete_contents=True, not_found_ok=True
)  # Make an API request.

print("Deleted dataset '{}'.".format(dataset_id))

Ruby

Im folgenden Codebeispiel wird ein leeres Dataset gelöscht.

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Ruby in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Ruby API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

Installieren Sie den Python-Client für die BigQuery Data Transfer API mit pip install google-cloud-bigquery-datatransfer. Erstellen Sie dann eine Übertragungskonfiguration, um das Dataset zu kopieren.
require "google/cloud/bigquery"

def delete_dataset dataset_id = "my_empty_dataset"
  bigquery = Google::Cloud::Bigquery.new

  # Delete a dataset that does not contain any tables
  dataset = bigquery.dataset dataset_id
  dataset.delete
  puts "Dataset #{dataset_id} deleted."
end

Im folgenden Codebeispiel werden ein Dataset und sein gesamter Inhalt gelöscht:

# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require "google/cloud/bigquery"

def delete_dataset_and_contents dataset_id = "my_dataset_with_tables"
  bigquery = Google::Cloud::Bigquery.new

  # Use the force parameter to delete a dataset and its contents
  dataset = bigquery.dataset dataset_id
  dataset.delete force: true
  puts "Dataset #{dataset_id} and contents deleted."
end

Tabellen aus gelöschten Datasets wiederherstellen

Sie können Tabellen aus einem gelöschten Dataset wiederherstellen, die sich im Zeitstempelfenster des Datasets befinden. Informationen zum Wiederherstellen des gesamten Datensatzes finden Sie unter Datensätze wiederherstellen.

  1. Erstellen Sie ein Dataset mit dem gleichen Namen und am selben Speicherort wie das Original.
  2. Wählen Sie einen Zeitstempel von vor dem Löschen des ursprünglichen Datasets aus. Verwenden Sie dazu ein Format mit den Millisekunden seit der Epoche, z. B. 1418864998000.
  3. Kopieren Sie die Tabelle originaldataset.table1 zum Zeitpunkt 1418864998000 in das neue Dataset:

    bq cp originaldataset.table1@1418864998000 mydataset.mytable
    

    Wenn Sie die Namen der nicht leeren Tabellen im gelöschten Dataset ermitteln möchten, stellen Sie eine Abfrage für die INFORMATION_SCHEMA.TABLE_STORAGE-Ansicht des Datasets innerhalb des Zeitstempelfensters.

Datasets wiederherstellen

Sie können den Löschvorgang für einen Datensatz rückgängig machen, um ihn in den Zustand wiederherzustellen, in dem er sich vor dem Löschen befand. Sie können nur Datasets wiederherstellen, die sich noch im Zeitreisefenster befinden. Diese Wiederherstellung umfasst alle Objekte, die im Datensatz enthalten waren, die Datensatzeigenschaften und die Sicherheitseinstellungen. Informationen zu nicht wiederhergestellten Ressourcen finden Sie unter Einschränkungen beim Wiederherstellen von Datensätzen.

Einschränkungen beim Wiederherstellen von Datasets

  • Wiederhergestellte Datensätze können auf Sicherheitsprinzipale verweisen, die nicht mehr vorhanden sind.
  • Verweise auf ein gelöschtes Dataset in verknüpften Datasets werden durch das Rückgängigmachen des Löschens nicht wiederhergestellt. Abonnenten müssen sich noch einmal anmelden, um die Verknüpfungen manuell wiederherzustellen.
  • Unternehmens-Tags werden nicht wiederhergestellt, wenn Sie die Wiederherstellung der gelöschten Elemente aktivieren.
  • Sie müssen materialisierte Ansichten manuell aktualisieren und autorisierte Ansichten, autorisierte Datasets und autorisierte Routinen noch einmal autorisieren. Wenn autorisierte Ressourcen (Ansichten, Datasets und Routinen) gelöscht werden, dauert es bis zu 24 Stunden, bis die Autorisierung zum Löschen erfolgt. Wenn Sie also weniger als 24 Stunden nach dem Löschen die Wiederherstellung eines Datensatzes mit einer autorisierten Ressource anfordern, ist eine erneute Autorisierung möglicherweise nicht erforderlich. Es empfiehlt sich, die Autorisierung immer zu überprüfen, nachdem Sie die Löschung von Ressourcen rückgängig gemacht haben.

Dataset wiederherstellen

Wählen Sie eine der folgenden Optionen aus, um ein Dataset wiederherzustellen:

SQL

Verwenden Sie die DDL-Anweisung (Datendefinitionssprache) UNDROP SCHEMA:

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

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    UNDROP SCHEMA DATASET_ID;

    Ersetzen Sie DATASET_ID durch das Dataset, dessen Löschen Sie rückgängig machen möchten.

  3. Geben Sie den Speicherort des Datensatzes an, dessen Löschen Sie rückgängig machen möchten.

  4. Klicken Sie auf Ausführen.

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

API

Rufen Sie die Methode datasets.undelete auf.

Wenn Sie die Wiederherstellung eines Datensatzes rückgängig machen, können die folgenden Fehler auftreten:

  • ALREADY_EXISTS: In der Region, in der Sie die Wiederherstellung versucht haben, ist bereits ein Dataset mit demselben Namen vorhanden. Sie können Datasets nicht mit der Wiederherstellungsfunktion überschreiben oder zusammenführen.
  • NOT_FOUND: das Dataset, das Sie wiederherstellen möchten, hat sein Zeitreisefenster überschritten, es hat nie existiert oder Sie haben den richtigen Speicherort des Datasets nicht angegeben.
  • ACCESS_DENIED: Sie haben nicht die erforderlichen Berechtigungen, um die Wiederherstellung dieses Datasets zu veranlassen.

Kontingente

Informationen zu Kopierkontingenten finden Sie unter Kopierjobs. Die Verwendung für Exportjobs ist in INFORMATION_SCHEMA verfügbar. Informationen zum Abfragen der Ansicht INFORMATION_SCHEMA.JOBS finden Sie unter JOBS-Ansicht.

Preise

Preisinformationen zum Kopieren von Datensätzen finden Sie unter Preise für die Datenreplikation.

BigQuery sendet komprimierte Daten beim regionenübergreifenden Kopieren, sodass die in Rechnung gestellten Daten möglicherweise unter der tatsächlichen Größe Ihres Datasets liegen. Weitere Informationen finden Sie unter BigQuery-Preise.

Nächste Schritte