Exporte os resultados da consulta para o Amazon S3

Este documento descreve como exportar o resultado de uma consulta executada numa tabela do BigLake para o seu contentor do Amazon Simple Storage Service (Amazon S3).

Para obter informações sobre como os dados fluem entre o BigQuery e o Amazon S3, consulte Fluxo de dados ao exportar dados.

Limitações

Para ver uma lista completa das limitações aplicáveis às tabelas BigLake com base no Amazon S3 e no armazenamento de blobs, consulte o artigo Limitações.

Antes de começar

Certifique-se de que tem os seguintes recursos:

Exporte os resultados da consulta

O BigQuery Omni escreve na localização do Amazon S3 especificada, independentemente do conteúdo existente. A consulta de exportação pode substituir os dados existentes ou misturar o resultado da consulta com os dados existentes. Recomendamos que exporte o resultado da consulta para um contentor do Amazon S3 vazio.

Para executar uma consulta, selecione uma das seguintes opções:

SQL

No campo Editor de consultas, introduza uma consulta de exportação do GoogleSQL. O GoogleSQL é a sintaxe predefinida na Google Cloud consola.

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, introduza a seguinte declaração:

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

    Substitua o seguinte:

    • CONNECTION_REGION: a região onde a associação foi criada.
    • CONNECTION_NAME: o nome da associação que criou com a autorização necessária para escrever no contentor do Amazon S3.
    • BUCKET_NAME: o contentor do Amazon S3 onde quer escrever os dados.
    • PATH: o caminho onde quer escrever o ficheiro exportado. Tem de conter exatamente um caráter universal * em qualquer parte do diretório folha da string de caminho, por exemplo, ../aa/*, ../aa/b*c, ../aa/*bc e ../aa/bc*. O BigQuery substitui * por 0000..N consoante o número de ficheiros exportados. O BigQuery determina a quantidade e os tamanhos dos ficheiros. Se o BigQuery decidir exportar dois ficheiros, * no nome do ficheiro do primeiro ficheiro é substituído por 000000000000 e * no nome do ficheiro do segundo ficheiro é substituído por 000000000001.
    • FORMAT: os formatos suportados são JSON, AVRO, CSV e PARQUET.
    • QUERY: a consulta para analisar os dados que estão armazenados numa tabela do BigLake. O conjunto de dados que contém a tabela do BigLake usada na consulta tem de estar localizado na mesma região do Amazon S3 que o contentor do Amazon S3 de destino.

    • Clique em Executar.

Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

Java

Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

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

Resolução de problemas

Se receber um erro relacionado com quota failure, verifique se reservou capacidade para as suas consultas. Para mais informações sobre reservas de horários, consulte a secção Antes de começar neste documento.

O que se segue?