Tabellendaten in Cloud Storage exportieren

Auf dieser Seite wird gezeigt, wie Sie Daten aus BigQuery-Tabellen in Cloud Storage exportieren oder daraus extrahieren.

Nach dem Laden der Daten in BigQuery können Sie die Daten in verschiedenen Formaten exportieren. BigQuery kann in einer Datei bis zu 1 GB logische Daten exportieren. Wenn Sie mehr als 1 GB Daten exportieren möchten, müssen Sie dafür mehrere Dateien verwenden. Beim Export in mehrere Dateien variiert die Größe der Dateien.

Sie können die Ergebnisse einer Abfrage auch mit der Anweisung EXPORT DATA exportieren. Mit EXPORT DATA OPTIONS können Sie das Format der exportierten Daten angeben.

Anstatt Daten aus BigLake zu exportieren, können Sie auch einen Dienst wie Dataflow verwenden, um Daten aus BigQuery zu lesen. Weitere Informationen dazu, wie Sie Dataflow zum Lesen und Schreiben in BigQuery verwenden, finden Sie in der BigQuery I/O-Dokumentation.

Exportbeschränkungen

Wenn Sie Daten aus BigQuery exportieren, sollten Sie Folgendes beachten:

  • Tabellendaten können nicht in eine lokale Datei, nicht in Google Sheets und nicht in Google Drive exportiert werden. Der einzige unterstützte Exportspeicherort ist Cloud Storage. Informationen zum Speichern von Abfrageergebnissen finden Sie unter Abfrageergebnisse herunterladen und speichern.
  • Sie können bis zu 1 GB an logischen Tabellendaten in eine einzelne Datei exportieren. Wenn Sie mehr als 1 GB Daten exportieren, verwenden Sie einen Platzhalter, um die Daten in mehrere Dateien zu exportieren. Wenn Sie Daten in mehrere Dateien exportieren, variiert die Größe der Dateien. Wenn Sie die Größe der exportierten Datei begrenzen möchten, können Sie Ihre Daten partitionieren und jede Partition exportieren.
  • Die Größe der generierten Datei bei Verwendung der EXPORT DATA-Anweisung ist nicht gewährleistet.
  • Die Anzahl der Dateien, die von einem Extraktionsjob generiert werden, kann variieren.
  • Verschachtelte und wiederkehrende Daten können nicht im CSV-Format exportiert werden. Verschachtelte und wiederkehrende Daten werden für Avro-, JSON- und Parquet-Exporte unterstützt.
  • Beim Exportieren von Daten in das JSON-Format werden INT64-Datentypen (Ganzzahl) als JSON-Strings codiert, um die 64-Bit-Genauigkeit beizubehalten, wenn die Daten von anderen Systemen gelesen werden.
  • Daten aus mehreren Tabellen können nicht mit einem einzelnen Extraktionsjob exportiert werden.
  • Beim Exportieren von Daten mit der Google Cloud -Konsole können Sie nur den Komprimierungstyp GZIP auswählen.
  • Wenn Sie eine Tabelle im JSON-Format exportieren, werden die Symbole <, > und & mit der Unicode-Notation \uNNNN konvertiert, wobei N eine Hexadezimalzahl ist. Aus profit&loss wird beispielsweise profit\u0026loss. Diese Unicode-Konvertierung erfolgt, um Sicherheitslücken zu vermeiden.
  • Die Reihenfolge der exportierten Tabellendaten ist nur dann garantiert, wenn Sie die Anweisung EXPORT DATA verwenden und in query_statement eine ORDER BY-Klausel angeben. Wenn Sie in mehrere Dateien exportieren, wird die Reihenfolge global für alle generierten Dateien beibehalten.
  • BigQuery unterstützt keine Cloud Storage-Ressourcenpfade, die nach dem anfänglichen doppelten Schrägstrich weitere, aufeinanderfolgende Schrägstriche enthalten. Cloud Storage-Objektnamen können mehrere aufeinanderfolgende Schrägstriche ("/") enthalten. BigQuery wandelt diese jedoch in einen einzelnen Schrägstrich um. Der folgende Ressourcenpfad ist beispielsweise in Cloud Storage gültig, funktioniert aber nicht in BigQuery: gs://bucket/my//object//name.
  • Alle neuen Daten, die während der Ausführung eines Extraktionsjobs in BigQuery geladen werden, sind in diesem Extraktionsjob nicht enthalten. Sie müssen einen neuen Extraktionsjob erstellen, um die neuen Daten zu exportieren.

Hinweis

Weisen Sie IAM-Rollen (Identity and Access Management) zu, die Nutzern die erforderlichen Berechtigungen zum Ausführen der einzelnen Aufgaben in diesem Dokument gewähren.

Erforderliche Berechtigungen

Zum Ausführen der Aufgaben in diesem Dokument benötigen Sie die folgenden Berechtigungen.

Berechtigungen für den Export von Daten aus einer BigQuery-Tabelle

Zum Exportieren von Daten aus einer BigQuery-Tabelle benötigen Sie die IAM-Berechtigung bigquery.tables.export.

Jede der folgenden vordefinierten IAM-Rollen enthält die Berechtigung bigquery.tables.export:

  • roles/bigquery.dataViewer
  • roles/bigquery.dataOwner
  • roles/bigquery.dataEditor
  • roles/bigquery.admin

Berechtigungen zum Ausführen eines Extraktionsjobs

Zum Ausführen eines Extraktionsjobs benötigen Sie die IAM-Berechtigung bigquery.jobs.create.

Jede der folgenden vordefinierten IAM-Rollen enthält die Berechtigungen, die Sie zum Ausführen eines Extraktionsjobs benötigen:

  • roles/bigquery.user
  • roles/bigquery.jobUser
  • roles/bigquery.admin

Berechtigungen zum Schreiben der Daten in den Cloud Storage-Bucket

Zum Schreiben der Daten in einen vorhandenen Cloud Storage-Bucket benötigen Sie die folgenden IAM-Berechtigungen:

  • storage.objects.create
  • storage.objects.delete

Jede der folgenden vordefinierten IAM-Rollen enthält die Berechtigungen, die Sie benötigen, um die Daten in einen vorhandenen Cloud Storage-Bucket zu schreiben:

  • roles/storage.objectAdmin
  • roles/storage.admin

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

Exportformate und Komprimierungstypen

BigQuery unterstützt die folgenden Datenformate und Komprimierungstypen für exportierte Daten.

Datenformat Unterstützte Komprimierungstypen Details
CSV GZIP

Sie können das CSV-Trennzeichen in Ihren exportierten Daten mithilfe des --field_delimiter-bq-Befehlszeilentool-Flags oder des configuration.extract.fieldDelimiter-Extrahierungsjob-Attributs festlegen.

Verschachtelte und wiederkehrende Daten werden nicht unterstützt.

JSON GZIP Verschachtelte und wiederkehrende Daten werden unterstützt.
Avro DEFLATE, SNAPPY

GZIP wird für Avro-Exporte nicht unterstützt.

Verschachtelte und wiederkehrende Daten werden unterstützt. Siehe Avro-Exportdetails.

Parquet SNAPPY, GZIP, ZSTD

Verschachtelte und wiederkehrende Daten werden unterstützt. Weitere Informationen finden Sie unter Parquet-Exportdetails.

Daten exportieren

In den folgenden Abschnitten wird beschrieben, wie Sie Ihre Tabellendaten, Tabellenmetadaten und Abfrageergebnisse in Cloud Storage exportieren.

Tabellendaten exportieren

Sie können Tabellendaten mit den folgenden Methoden exportieren:

  • Google Cloud Console verwenden
  • Mit dem Befehl bq extract im bq-Befehlszeilentool.
  • Durch Senden eines extract-Jobs über die API oder die Clientbibliotheken

Entscheiden Sie sich für eine der folgenden Möglichkeiten:

Console

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

    Zur Seite "BigQuery"

  2. Klicken Sie im linken Bereich auf  Explorer:

    Hervorgehobener Button für den Explorer-Bereich.

    Wenn das linke Steuerfeld nicht angezeigt wird, klicken Sie auf  Linkes Steuerfeld maximieren, um es zu öffnen.

  3. Maximieren Sie im Bereich Explorer Ihr Projekt, klicken Sie auf Datasets und dann auf Ihr Dataset.

  4. Klicken Sie auf Übersicht > Tabellen und wählen Sie dann eine Tabelle aus.

  5. Klicken Sie im Detailbereich auf Hochladen Exportieren / Synchronisieren > Cloud Storage.

  6. Gehen Sie im Dialogfeld Nach Google Cloud Storage exportieren folgendermaßen vor:

    • Wählen Sie unter GCS-Speicherort den Bucket, den Ordner oder die Datei aus, in den bzw. die Sie die Daten exportieren möchten.
    • Wählen Sie unter Exportformat das Format für die exportierten Daten aus: CSV, JSON (durch Zeilenumbruch getrennt), Avro oder Parquet.
    • Wählen Sie unter Komprimierung ein Komprimierungsformat aus oder wählen Sie None für keine Komprimierung aus.
  7. Klicken Sie auf Speichern, um die Tabelle zu exportieren.

Klicken Sie im Bereich Explorer auf Jobverlauf und suchen Sie nach einem Job vom Typ EXTRACT, um den Fortschritt des Jobs zu prüfen.

Verwenden Sie die EXPORT DATA OPTIONS-Anweisung, um Ansichten in Cloud Storage zu exportieren.

SQL

Verwenden Sie die Anweisung EXPORT DATA. Im folgenden Beispiel werden ausgewählte Felder aus einer Tabelle mit dem Namen mydataset.table1 exportiert:

  1. Rufen Sie in der Google Cloud Console die Seite BigQuery auf.

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    EXPORT DATA
      OPTIONS (
        uri = 'gs://bucket/folder/*.csv',
        format = 'CSV',
        overwrite = true,
        header = true,
        field_delimiter = ';')
    AS (
      SELECT field1, field2
      FROM mydataset.table1
      ORDER BY field1
    );

  3. Klicken Sie auf Ausführen.

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

bq

Führen Sie den Befehl bq extract mit dem Flag --destination_format aus.

Optional: Geben Sie das Flag --location an und legen Sie als Wert Ihren Standort fest.

Andere optionale Flags sind:

  • --compression: Der Komprimierungstyp, der für exportierte Dateien verwendet werden soll.
  • --field_delimiter: Das Zeichen, das die Begrenzung zwischen den Spalten in der Ausgabedatei für CSV-Exporte angibt. Es kann sowohl \t als auch tab als Tabulatortrennzeichen verwendet werden.
  • --print_header: Wenn dieses Flag angegeben ist, werden bei Formaten mit Headern wie CSV entsprechende Kopfzeilen ausgegeben.
bq extract --location=location \
--destination_format format \
--compression compression_type \
--field_delimiter delimiter \
--print_header=boolean \
project_id:dataset.table \
gs://bucket/filename.ext

Wobei:

  • location ist der Name Ihres Standorts. Das Flag --location ist optional. Wenn Sie BigQuery beispielsweise in der Region Tokio verwenden, können Sie für das Flag den Wert asia-northeast1 festlegen. Mit der Datei .bigqueryrc lässt sich für den Standort ein Standardwert angeben.
  • format ist das Format für die exportierten Daten: CSV, NEWLINE_DELIMITED_JSON, AVRO oder PARQUET.
  • compression_type ist ein unterstützter Komprimierungstyp für das Datenformat. Weitere Informationen finden Sie unter Exportformate und Komprimierungstypen.
  • delimiter ist das Trennzeichen für Spalten in CSV-Exporten. \t und tab sind akzeptierte Namen für das Tabulatorzeichen.
  • boolean ist true oder false. Wenn true festgelegt ist, werden Header an die exportierten Daten ausgegeben, sofern das Datenformat Header unterstützt. Der Standardwert ist true.
  • project_id ist die Projekt-ID.
  • dataset ist der Name des Quell-Datasets.
  • table ist die Tabelle, die Sie exportieren. Wenn Sie einen Partitions-Decorator verwenden, müssen Sie den Tabellenpfad in einfache Anführungszeichen setzen oder das Zeichen $ maskieren.
  • bucket ist der Name des Cloud Storage-Buckets, in den Sie Daten exportieren. Das BigQuery-Dataset und der Cloud Storage-Bucket müssen sich am selben Standort befinden.
  • filename.ext ist der Name und die Erweiterung der exportierten Datendatei. Mit einem Platzhalter können Sie in mehrere Dateien exportieren.

Beispiele:

Mit dem folgenden Befehl wird beispielsweise mydataset.mytable in eine komprimierte GZIP-Datei mit dem Namen myfile.csv exportiert. Die Datei myfile.csv wird in einem Cloud Storage-Bucket namens example-bucket gespeichert.

bq extract \
--compression GZIP \
'mydataset.mytable' \
gs://example-bucket/myfile.csv

Das Standardzielformat ist CSV. Für Exporte in eine JSON- oder Avro-Datei verwenden Sie das Flag destination_format und legen dafür NEWLINE_DELIMITED_JSON oder AVRO fest.

bq extract \
--destination_format NEWLINE_DELIMITED_JSON \
'mydataset.mytable' \
gs://example-bucket/myfile.json

Mit dem folgenden Befehl wird mydataset.mytable in eine mit Snappy komprimierte Avro-Datei exportiert. Der Name der Datei lautet myfile.avro. myfile.avro wird in einen Cloud Storage-Bucket namens example-bucket exportiert.

bq extract \
--destination_format AVRO \
--compression SNAPPY \
'mydataset.mytable' \
gs://example-bucket/myfile.avro

Mit dem folgenden Befehl wird eine einzelne Partition von mydataset.my_partitioned_table in eine CSV-Datei in Cloud Storage exportiert:

bq extract \
--destination_format CSV \
'mydataset.my_partitioned_table$0' \
gs://example-bucket/single_partition.csv

API

Zum Exportieren von Daten erstellen Sie einen extract-Job und legen dafür die Jobkonfiguration fest.

Optional: Geben Sie Ihren Standort im Attribut location im Abschnitt jobReference der Jobressource an.

  1. Erstellen Sie einen Extrahierungsjob, der auf die BigQuery-Quelldaten und auf das Cloud Storage-Ziel verweist.

  2. Geben Sie die Quelltabelle mithilfe des Konfigurationsobjekts sourceTable an, das die Projekt-ID, die Dataset-ID und die Tabellen-ID enthält.

  3. Das Attribut destination URI(s) muss vollständig qualifiziert sein und das Format gs://bucket/filename.ext haben. Jeder URI kann genau ein Platzhalterzeichen (*) enthalten, das nach dem Bucket-Namen stehen muss.

  4. Geben Sie das Datenformat an. Legen Sie dazu das Attribut configuration.extract.destinationFormat fest. Geben Sie beispielsweise für dieses Attribut für den Export einer JSON-Datei den Wert NEWLINE_DELIMITED_JSON an.

  5. Rufen Sie zur Prüfung des Jobstatus jobs.get(job_id) mit der ID des Jobs auf, die von der ursprünglichen Anfrage zurückgegeben wurde.

    • Wenn status.state = DONE zurückgegeben wird, wurde der Job erfolgreich abgeschlossen.
    • Wenn das Attribut status.errorResult zurückgegeben wird, ist die Anfrage fehlgeschlagen. Das Objekt enthält in diesem Fall Angaben zur Fehlerursache.
    • Wenn status.errorResult nicht zurückgegeben wird, wurde der Job erfolgreich abgeschlossen. Es können aber nichtsdestotrotz einige nicht schwerwiegende Fehler aufgetreten sein. Nicht schwerwiegende Fehler werden im Attribut status.errors des Objekts des zurückgegebenen Jobs aufgeführt.

API-Hinweise:

  • Als Best Practice generieren Sie eine eindeutige ID und übergeben Sie diese als jobReference.jobId, wenn Sie jobs.insert zum Erstellen eines Ladejobs aufrufen. Diese Vorgehensweise ist weniger anfällig für Netzwerkfehler, da der Client anhand der bekannten Job-ID einen Abruf oder einen neuen Versuch ausführen kann.

  • Das Aufrufen von jobs.insert für eine bestimmte Job-ID ist idempotent. Das bedeutet, dass Sie den Aufruf für eine bestimmte Job-ID beliebig oft wiederholen können. Maximal einer dieser Vorgänge wird erfolgreich sein.

C#

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der C#-Einrichtungsanleitung 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.


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

public class BigQueryExtractTable
{
    public void ExtractTable(
        string projectId = "your-project-id",
        string bucketName = "your-bucket-name")
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        // Define a destination URI. Use a single wildcard URI if you think
        // your exported data will be larger than the 1 GB maximum value.
        string destinationUri = $"gs://{bucketName}/shakespeare-*.csv";
        BigQueryJob job = client.CreateExtractJob(
            projectId: "bigquery-public-data",
            datasetId: "samples",
            tableId: "shakespeare",
            destinationUri: destinationUri
        );
        job = job.PollUntilCompleted().ThrowOnAnyError();  // Waits for the job to complete.
        Console.Write($"Exported table to {destinationUri}.");
    }
}

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.

import (
	"context"
	"fmt"

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

// exportTableAsCompressedCSV demonstrates using an export job to
// write the contents of a table into Cloud Storage as CSV.
func exportTableAsCSV(projectID, gcsURI string) error {
	// projectID := "my-project-id"
	// gcsUri := "gs://mybucket/shakespeare.csv"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	srcProject := "bigquery-public-data"
	srcDataset := "samples"
	srcTable := "shakespeare"

	gcsRef := bigquery.NewGCSReference(gcsURI)
	gcsRef.FieldDelimiter = ","

	extractor := client.DatasetInProject(srcProject, srcDataset).Table(srcTable).ExtractorTo(gcsRef)
	extractor.DisableHeader = true
	// You can choose to run the job in a specific location for more complex data locality scenarios.
	// Ex: In this example, source dataset and GCS bucket are in the US.
	extractor.Location = "US"

	job, err := extractor.Run(ctx)
	if err != nil {
		return err
	}
	status, err := job.Wait(ctx)
	if err != nil {
		return err
	}
	if err := status.Err(); err != nil {
		return err
	}
	return nil
}

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.cloud.RetryOption;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.Table;
import com.google.cloud.bigquery.TableId;
import org.threeten.bp.Duration;

public class ExtractTableToCsv {

  public static void runExtractTableToCsv() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "bigquery-public-data";
    String datasetName = "samples";
    String tableName = "shakespeare";
    String bucketName = "my-bucket";
    String destinationUri = "gs://" + bucketName + "/path/to/file";
    // For more information on export formats available see:
    // https://cloud.google.com/bigquery/docs/exporting-data#export_formats_and_compression_types
    // For more information on Job see:
    // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html

    String dataFormat