Esportazione dei risultati di una query in Amazon S3

Questo documento descrive come esportare il risultato di una query eseguita su un la tabella BigLake al 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 nel campo Posizione Amazon S3 indipendentemente da eventuali contenuti. La query di esportazione può sovrascrivere dati esistenti o combinare il risultato della query con i dati esistenti. Ti consigliamo di esportare il risultato della query in un nel bucket Amazon S3.

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 una connessione.
    • CONNECTION_NAME: il nome della connessione che viene creato con l'autorizzazione necessaria per scrivere nel bucket Amazon S3.
    • BUCKET_NAME: il bucket Amazon S3 in cui scrivere i dati.
    • PATH: il percorso in cui scrivere l'URL in cui vuoi esportare i file. Deve contenere esattamente un carattere jolly * in qualsiasi punto nella 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, poi * nel il nome file del primo file viene sostituito da 000000000000 e * nel il nome file del secondo file è 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 nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Java BigQuery documentazione di riferimento.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura 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 ricevi un errore relativo a quota failure, controlla di aver prenotato 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 Blob Storage, consulta le limitazioni.

Passaggi successivi