Abfrageergebnisse nach Amazon S3 exportieren

Dieses Dokument beschreibt, wie Sie das Ergebnis einer Abfrage, die auf eine BigLake-Tabelle angewendet wird, in Ihren Amazon S3-Bucket (Amazon Simple Storage Service) exportieren.

Informationen zum Datenfluss zwischen BigQuery und Amazon S3 finden Sie unter Datenfluss beim Exportieren von Daten.

Beschränkungen

Eine vollständige Liste der Beschränkungen, die für BigLake-Tabellen basierend auf Amazon S3 und Blob Storage gelten, finden Sie unter Beschränkungen.

Hinweise

Es müssen die folgenden Ressourcen erstellt sein:

Abfrageergebnisse exportieren

BigQuery Omni schreibt in den angegebenen Amazon S3-Speicherort, unabhängig davon, ob bereits Inhalte vorhanden sind. Die Exportabfrage kann vorhandene Daten überschreiben oder das Abfrageergebnis mit vorhandenen Daten kombinieren. Wir empfehlen, das Abfrageergebnis in einen leeren Amazon S3-Bucket zu exportieren.

Wählen Sie eine der folgenden Optionen aus, um eine Abfrage auszuführen:

SQL

Geben Sie im Feld Abfrageeditor eine GoogleSQL-Exportabfrage ein. GoogleSQL ist in der Google Cloud Console die Standardsyntax.

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

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

       EXPORT DATA WITH CONNECTION `CONNECTION_REGION.CONNECTION_NAME`
       OPTIONS(uri="s3://BUCKET_NAME/PATH", format="FORMAT", ...)
       AS QUERY

    Dabei gilt:

    • CONNECTION_REGION: die Region, in der die Verbindung erstellt wurde.
    • CONNECTION_NAME: der Verbindungsname, den Sie mit der erforderlichen Berechtigung zum Schreiben in den Amazon S3-Bucket erstellt haben.
    • BUCKET_NAME: der Amazon S3-Bucket, in den Sie die Daten schreiben möchten.
    • PATH: der Pfad, in den Sie die exportierte Datei schreiben möchten. Er muss genau einen Platzhalter * im Blattverzeichnis des Pfadstrings enthalten, z. B. ../aa/*, ../aa/b*c, ../aa/*bc oder ../aa/bc*. BigQuery ersetzt * abhängig von der Anzahl der exportierten Dateien durch 0000..N. BigQuery bestimmt die Anzahl und Größe der Dateien. Wenn BigQuery zwei Dateien exportiert, wird * im Dateinamen der ersten Datei durch 000000000000 und * im Dateinamen der zweiten Datei durch 000000000001 ersetzt.
    • FORMAT: Unterstützte Formate sind JSON, AVRO, CSV und PARQUET.
    • QUERY: Abfrage zur Analyse der Daten, die in einer BigLake-Tabelle gespeichert sind.

    • Klicken Sie auf Ausführen.

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

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.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;

// Sample to export query results to Amazon S3 bucket
public class ExportQueryResultsToS3 {

  public static void main(String[] args) throws InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    String externalTableName = "MY_EXTERNAL_TABLE_NAME";
    // connectionName should be in the format of connection_region.connection_name. e.g.
    // aws-us-east-1.s3-write-conn
    String connectionName = "MY_CONNECTION_REGION.MY_CONNECTION_NAME";
    // destinationUri must contain exactly one * anywhere in the leaf directory of the path string
    // e.g. ../aa/*, ../aa/b*c, ../aa/*bc, and ../aa/bc*
    // BigQuery replaces * with 0000..N depending on the number of files exported.
    // BigQuery determines the file count and sizes.
    String destinationUri = "s3://your-bucket-name/*";
    String format = "EXPORT_FORMAT";
    // Export result of query to find states starting with 'W'
    String query =
        String.format(
            "EXPORT DATA WITH CONNECTION `%s` OPTIONS(uri='%s', format='%s') "
              + "AS SELECT * FROM %s.%s.%s WHERE name LIKE 'W%%'",
            connectionName, destinationUri, format, projectId, datasetName, externalTableName);
    exportQueryResultsToS3(query);
  }

  public static void exportQueryResultsToS3(String query) throws InterruptedException {
    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();

      TableResult results = bigquery.query(QueryJobConfiguration.of(query));

      results
          .iterateAll()
          .forEach(row -> row.forEach(val -> System.out.printf("%s,", val.toString())));

      System.out.println("Query results exported to Amazon S3 successfully.");
    } catch (BigQueryException e) {
      System.out.println("Query not performed \n" + e.toString());
    }
  }
}

Fehlerbehebung

Wenn ein Fehler mit quota failure angezeigt wird, prüfen Sie, ob Sie für Ihre Abfragen reservierte Kapazität haben. Weitere Informationen zu Slot-Reservierungen finden Sie in diesem Dokument unter Vorbereitung.

Nächste Schritte