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 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 avere le seguenti risorse:

Esporta i risultati della query

BigQuery Omni scrive nella località Amazon S3 specificata, indipendentemente 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, selezionare 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 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 leaf 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 da 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, consulta Eseguire una query interattiva.

Java

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

Per eseguire l'autenticazione in 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 visualizzi un errore relativo a quota failure, controlla se hai prenotato la capacità per le tue query. Per saperne di più 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, consulta Limitazioni.

Passaggi successivi