Datasets verwalten

In diesem Dokument wird beschrieben, wie Datasets in BigQuery verwaltet werden. Wenn Sie ein Dataset erstellt haben, können Sie es so verwalten:

Hinweis

Erteilen Sie IAM-Rollen (Identity and Access Management), die Nutzern die erforderlichen Berechtigungen zum Ausführen der einzelnen Aufgaben in diesem Dokument geben. Die Berechtigungen, die zum Ausführen einer Aufgabe erforderlich sind (sofern zutreffend), werden im Abschnitt "Erforderliche Berechtigungen" der Aufgabe aufgelistet.

Datasets umbenennen

Derzeit können Sie den Namen eines vorhandenen Datasets nicht ändern, aber Sie können ein Dataset kopieren. Siehe Datasets kopieren.

Datasets kopieren

Unter Datasets kopieren erfahren Sie, wie Sie ein Dataset kopieren, auch regionenübergreifend.

Dataset verschieben

Wenn Sie ein Dataset manuell von einem Standort an einen anderen verschieben möchten, gehen Sie so vor:

  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.

    Beim Übertragen von Daten zwischen Regionen fallen in Cloud Storage Gebühren für ausgehenden Netzwerktraffic an.

  3. Nachdem Sie die Daten in einen Cloud Storage-Bucket am neuen Standort übertragen haben, erstellen Sie dort ein neues BigQuery-Dataset. Laden Sie Ihre Daten dann aus dem Cloud Storage-Bucket in BigQuery.

    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.

Existenz eines Datasets prüfen

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.

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

// Sample to check dataset exist
public class DatasetExists {

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

  public static void datasetExists(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();

      Dataset dataset = bigquery.getDataset(DatasetId.of(datasetName));
      if (dataset != null) {
        System.out.println("Dataset already exists.");
      } else {
        System.out.println("Dataset not found.");
      }
    } catch (BigQueryException e) {
      System.out.println("Something went wrong. \n" + e.toString());
    }
  }
}

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Python-Einrichtungsanleitung in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.

from google.cloud import bigquery
from google.cloud.exceptions import NotFound

client = bigquery.Client()

# TODO(developer): Set dataset_id to the ID of the dataset to determine existence.
# dataset_id = "your-project.your_dataset"

try:
    client.get_dataset(dataset_id)  # Make an API request.
    print("Dataset {} already exists".format(dataset_id))
except NotFound:
    print("Dataset {} is not found".format(dataset_id))

Datasets löschen

Sie können ein Dataset auf folgenden Wegen löschen:

  • Google Cloud Console verwenden.
  • Verwenden Sie die DROP SCHEMA-DDL-Anweisung.
  • Verwenden Sie den Befehl bq rm im bq-Befehlszeilentool.
  • Rufen Sie die API-Methode datasets.delete auf.
  • Verwenden Sie die Client-Bibliotheken.

Erforderliche Berechtigungen

Zum Löschen eines Datasets benötigen Sie die folgenden IAM-Berechtigungen:

  • bigquery.datasets.delete (zum Löschen eines Datasets)
  • bigquery.tables.delete (zum Löschen von Tabellen und Ansichten)

Jede der folgenden vordefinierten IAM-Rollen enthält die Berechtigungen, die Sie zum Löschen eines Datasets benötigen:

  • roles/bigquery.dataOwner
  • roles/bigquery.admin

Wenn Sie die Berechtigung bigquery.datasets.create haben, können Sie die von Ihnen erstellten Datasets und Tabellen außerdem löschen.

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.

Dataset löschen

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

Console

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

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

  3. Geben Sie im Dialogfeld Dataset löschen "delete" in das Textfeld ein und klicken Sie dann 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 Abfragen ausführen.

bq

Verwenden Sie den Befehl bq rm mit dem optionalen Flag --dataset oder -d, um ein Dataset zu löschen. Wenn Sie ein Dataset mit dem bq-Befehlszeilentool entfernen, müssen Sie den Befehl bestätigen. Sie können die Bestätigung mit dem Flag -f überspringen.

Wenn das Dataset außerdem Tabellen enthält, müssen Sie das Flag -r verwenden, um alle Tabellen im Dataset zu entfernen. 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 Folgendes:

  • project_id ist die Projekt-ID.
  • dataset ist der Name des zu löschenden Datasets.

Beispiele:

Geben Sie den folgenden Befehl ein, um mydataset und alle darin enthaltenen Tabellen aus Ihrem Standardprojekt zu entfernen. Für den Befehl wird das optionale Flag -d verwendet.

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

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.


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.");
    }
}

Einfach loslegen (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.

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.

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.

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

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.


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.

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, solange Sie sich noch im Zeitstempelfenster des Datasets befinden. Dazu kopieren Sie jede Tabelle im gelöschten Dataset mithilfe eines Tabellen-Decorators in ein neu erstelltes Dataset. Sie müssen andere mit dem Dataset verknüpfte Objekte wie Ansichten, materialisierte Ansichten und Routinen manuell neu erstellen.

Erforderliche Rollen

Sie müssen ein Mitglied der Rolle roles/bigquery.admin sein, um eine Tabelle aus einem gelöschten Dataset wiederherstellen zu können.

Tabelle aus einem gelöschten Dataset wiederherstellen

So stellen Sie eine Tabelle aus einem gelöschten Dataset wieder her:

  1. Dataset erstellen:

    bq mk tmp_dataset
    
  2. Wählen Sie einen Zeitstempel aus der Zeit vor dem Löschen des ursprünglichen Datasets mit einem Format aus Millisekunden seit der Epoche. Beispiel: 1418864998000.

  3. Kopieren Sie die Tabelle original_dataset.table1 zum Zeitpunkt 1418864998000 in das neue Dataset tmp_dataset:

    bq cp original_dataset.table1@1418864998000 tmp_dataset.table1
    
  4. Wiederholen Sie Schritt 4 für jede Tabelle im gelöschten Dataset.

Dataset-Sicherheit

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.

Weitere Informationen