Exportar resultados de consulta para o Amazon S3

Neste documento, descrevemos como exportar o resultado de uma consulta executada em uma tabela do BigLake para o bucket do Amazon Simple Storage Service (Amazon S3).

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

Antes de começar

Confira se você tem os seguintes recursos:

Exportar resultados da consulta

O BigQuery Omni é gravado em um local específico do Amazon S3, independentemente de qualquer conteúdo existente. A consulta de exportação pode substituir os dados ou combinar o resultado da consulta com os dados existentes. É recomendável exportar o resultado da consulta para um bucket vazio do Amazon S3.

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

SQL

No campo Editor de consultas, insira uma consulta de exportação do GoogleSQL. O GoogleSQL é a sintaxe padrão no Console do Google Cloud.

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

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

    Substitua:

    • CONNECTION_REGION: a região em que a conexão foi criada.
    • CONNECTION_NAME: o nome da conexão que você criou com a permissão necessária para gravar no bucket do S3.
    • BUCKET_NAME: o bucket do Amazon S3 em que você quer gravar os dados.
    • PATH: o caminho em que você quer gravar o arquivo exportado. Ele precisa conter exatamente um caractere curinga * em qualquer lugar no diretório da string do caminho, por exemplo, ../aa/*, ../aa/b*c, ../aa/*bc e ../aa/bc*. O BigQuery substitui * por 0000..N dependendo do número de arquivos exportados. O BigQuery determina a contagem e os tamanhos de arquivos. Se o BigQuery decidir exportar dois arquivos, o * no primeiro nome do arquivo será substituído por 000000000000, e o * no segundo nome do arquivo, substituído por 000000000001:
    • FORMAT: os formatos compatíveis são JSON, AVRO e CSV e PARQUET
    • QUERY: a consulta para analisar os dados armazenados em uma tabela do BigLake.

    • Clique em Executar.

Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.

Java

Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar 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());
    }
  }
}

Solução de problemas

Se você receber um erro relacionado a quota failure, verifique se tem reserva de capacidade para as consultas. Para mais informações sobre reservas de slot, consulte Antes de começar neste documento.

Limitações

Para acessar uma lista completa de limitações que se aplicam a tabelas do BigLake baseadas no Amazon S3 e no Armazenamento de Blobs, consulte Limitações.

A seguir