Abfrageergebnisse nach Amazon S3 exportieren

Mit BigQuery Omni können Sie das Ergebnis einer Abfrage direkt nach Amazon S3 exportieren.

Vorbereitung

Prüfen Sie, ob Sie die richtige IAM-Richtlinie (Identity and Access Management) für Amazon Web Services (AWS) haben:

Abfrage ausführen

Verwenden Sie zum Ausführen einer Abfrage die Google Cloud Console oder das bq-Befehlszeilentool:

Console

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

    Zur Seite „BigQuery“

  2. Geben Sie im Feld Abfrageeditor eine Standard-SQL-Exportabfrage ein. Standard-SQL ist in der Cloud Console die Standardsyntax.

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

    Ersetzen Sie Folgendes:

    • CONNECTION_REGION: Die Region, in der die Verbindung erstellt wurde.
    • CONNECTION_NAME: Der Verbindungsname, den Sie mit der erforderlichen Berechtigung zum Schreiben in den S3-Bucket erstellt haben.
    • BUCKET_NAME: Der Amazon S3-Bucket, den Sie für Schreibvorgänge erstellt haben.
    • 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 und CSV.
    • QUERY: Die Abfrage, die Sie ausführen möchten, um die Daten zu analysieren.
  3. Klicken Sie auf Ausführen.

bq

Verwenden Sie den Befehl query und geben Sie die Standard-SQL-Syntax mit dem Flag --nouse_legacy_sql oder --use_legacy_sql=false an.

Geben Sie Folgendes ein, um die Exportabfrage auszuführen:

bq query --nouse_legacy_sql \
EXPORT DATA WITH CONNECTION CONNECTION_REGION.CONNECTION_NAME \
OPTIONS(uri="s3://BUCKET_NAME/PATH", format="FORMAT", ...) \
AS QUERY

Ersetzen Sie Folgendes:

  • CONNECTION_REGION: Die Region, in der die Verbindung erstellt wurde.
  • CONNECTION_NAME: Der Verbindungsname, den Sie mit der erforderlichen Berechtigung zum Schreiben in den S3-Bucket erstellt haben.
  • BUCKET_NAME: Der Amazon S3-Bucket, den Sie für Schreibvorgänge erstellt haben.
  • 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 und CSV.
  • QUERY: Die Abfrage, die Sie ausführen möchten, um die Daten zu analysieren.

Java

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

Weitere Informationen