Esportazione dei risultati di una query in Amazon S3

Questo documento descrive come esportare il risultato di una query eseguita su una tabella BigLake nel tuo bucket Amazon Simple Storage Service (Amazon S3).

Per informazioni sul flusso di dati tra BigQuery e Amazon S3, consulta Flusso di dati durante l'esportazione dei dati.

Prima di iniziare

Assicurati di disporre delle seguenti risorse:

Esporta i risultati della query

BigQuery Omni scrive nella località Amazon S3 specificata a prescindere dai contenuti esistenti. La query di esportazione può sovrascrivere i dati esistenti o combinare il risultato della query con i dati esistenti. Ti consigliamo di esportare il risultato della query in un bucket Amazon S3 vuoto.

Per eseguire una query, seleziona una delle seguenti opzioni:

SQL

Nel campo Editor query, inserisci una query di esportazione GoogleSQL. GoogleSQL è la sintassi predefinita nella console Google Cloud.

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor query, inserisci la seguente istruzione:

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

    Sostituisci quanto segue:

    • CONNECTION_REGION: la regione in cui è stata creata la connessione.
    • CONNECTION_NAME: il nome della connessione che hai creato con l'autorizzazione necessaria per scrivere nel bucket Amazon S3.
    • BUCKET_NAME: il bucket Amazon S3 in cui vuoi scrivere i dati.
    • PATH: il percorso in cui vuoi scrivere il file esportato. Deve contenere esattamente un carattere jolly * in qualsiasi punto della directory foglia della stringa del percorso, ad esempio ../aa/*, ../aa/b*c, ../aa/*bc e ../aa/bc*. BigQuery sostituisce * con 0000..N a seconda del numero di file esportati. BigQuery determina il numero e le dimensioni dei file. Se BigQuery decide di esportare due file, * nel nome del primo file viene sostituito con 000000000000 e * nel nome del secondo file viene sostituito da 000000000001.
    • FORMAT: i formati supportati sono JSON, AVRO, CSV e PARQUET.
    • QUERY: la query per analizzare i dati archiviati in una tabella BigLake.

    • Fai clic su Esegui.

Per ulteriori informazioni su come eseguire le query, vedi Eseguire una query interattiva.

Java

Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Java di BigQuery.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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

Risoluzione dei problemi

Se viene visualizzato un errore relativo a quota failure, verifica di aver prenotato capacità per le tue query. Per ulteriori informazioni sulle prenotazioni di slot, consulta Prima di iniziare in questo documento.

Limitazioni

Per un elenco completo delle limitazioni che si applicano alle tabelle BigLake basate su Amazon S3 e Archiviazione BLOB, vedi Limitazioni.

Passaggi successivi