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 su come i dati fluiscono tra BigQuery e Amazon S3, consulta Flusso di dati durante l'esportazione dei dati.

Limitazioni

Per un elenco completo delle limitazioni che si applicano alle tabelle BigLake basate su Amazon S3 e Blob Storage, consulta Limitazioni.

Prima di iniziare

Assicurati di disporre delle seguenti risorse:

Esportare i risultati delle query

BigQuery Omni scrive nella posizione 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, seleziona una delle seguenti opzioni:

SQL

Nel campo Editor di 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 di 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 principale 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 memorizzati in una tabella BigLake.

    • Fai clic su Esegui.

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

Java

Prima di provare questo esempio, segui le istruzioni di configurazione Java riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Java.

Per autenticarti in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, 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 ricevi un errore relativo a quota failure, controlla se hai riservato la capacità per le tue query. Per ulteriori informazioni sulle prenotazioni degli slot, consulta la sezione Prima di iniziare in questo documento.

Passaggi successivi