Exemplos de uso do Amazon S3 Select em um objeto - Amazon Simple Storage Service

Exemplos de uso do Amazon S3 Select em um objeto

Importante

O Amazon S3 Select não está mais disponível para novos clientes. Os clientes existentes do Amazon S3 Select podem continuar usando o recurso normalmente. Saiba mais

É possível usar o S3 Select para selecionar conteúdo de um objeto usando o console do Amazon S3, a API REST e SDKs da AWS.

Para receber mais informações sobre as funções SQL compatíveis com o S3 Select, consulte Funções SQL.

Como selecionar o conteúdo de um objeto no console do Amazon S3
  1. Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

  2. No painel de navegação à esquerda, escolha Buckets.

  3. Escolha o bucket que contém o objeto do qual você deseja selecionar o conteúdo; depois, escolha o nome do objeto.

  4. Escolha Ações de objetoConsultar com o S3 Select.

  5. Defina as Configurações de entrada, com base no formato dos dados de entrada.

  6. Defina as Configurações de saída, com base no formato da saída que você deseja receber.

  7. Para extrair registros do objeto escolhido, em Consulta SQL, insira os comandos SQL SELECT. Para obter mais informações sobre como escrever comandos SQL, consulte Referência SQL para o Amazon S3 Select.

  8. Depois de inserir consultas SQL, escolha Executar consulta SQL. Depois, em Resultados da consulta, é possível ver os resultados das consultas SQL.

É possível usar SDKs da AWS para selecionar conteúdo de um objeto. Contudo, se o seu aplicativo exigir, você pode enviar solicitações REST diretamente. Para obter mais informações sobre o formato de solicitação e de resposta, consulte SelectObjectContent.

É possível usar o Amazon S3 Select para selecionar parte do conteúdo de um objeto usando o método selectObjectContent. Se esse método for bem-sucedido, ele retornará os resultados da expressão SQL.

Java

O código Java a seguir retorna o valor da primeira coluna para cada registro armazenado em um objeto que contém dados armazenados em formato CSV. Ele também solicita que mensagens de Progress e Stats sejam retornadas. É necessário fornecer um nome de bucket válido e um objeto que contenha dados em formato CSV.

Consulte instruções sobre como criar e testar uma amostra funcional em Getting Started no Guia do desenvolvedor do AWS SDK for Java.

package com.amazonaws; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.CSVInput; import com.amazonaws.services.s3.model.CSVOutput; import com.amazonaws.services.s3.model.CompressionType; import com.amazonaws.services.s3.model.ExpressionType; import com.amazonaws.services.s3.model.InputSerialization; import com.amazonaws.services.s3.model.OutputSerialization; import com.amazonaws.services.s3.model.SelectObjectContentEvent; import com.amazonaws.services.s3.model.SelectObjectContentEventVisitor; import com.amazonaws.services.s3.model.SelectObjectContentRequest; import com.amazonaws.services.s3.model.SelectObjectContentResult; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.concurrent.atomic.AtomicBoolean; import static com.amazonaws.util.IOUtils.copy; /** * This example shows how to query data from S3Select and consume the response in the form of an * InputStream of records and write it to a file. */ public class RecordInputStreamExample { private static final String BUCKET_NAME = "${my-s3-bucket}"; private static final String CSV_OBJECT_KEY = "${my-csv-object-key}"; private static final String S3_SELECT_RESULTS_PATH = "${my-s3-select-results-path}"; private static final String QUERY = "select s._1 from S3Object s"; public static void main(String[] args) throws Exception { final AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient(); SelectObjectContentRequest request = generateBaseCSVRequest(BUCKET_NAME, CSV_OBJECT_KEY, QUERY); final AtomicBoolean isResultComplete = new AtomicBoolean(false); try (OutputStream fileOutputStream = new FileOutputStream(new File (S3_SELECT_RESULTS_PATH)); SelectObjectContentResult result = s3Client.selectObjectContent(request)) { InputStream resultInputStream = result.getPayload().getRecordsInputStream( new SelectObjectContentEventVisitor() { @Override public void visit(SelectObjectContentEvent.StatsEvent event) { System.out.println( "Received Stats, Bytes Scanned: " + event.getDetails().getBytesScanned() + " Bytes Processed: " + event.getDetails().getBytesProcessed()); } /* * An End Event informs that the request has finished successfully. */ @Override public void visit(SelectObjectContentEvent.EndEvent event) { isResultComplete.set(true); System.out.println("Received End Event. Result is complete."); } } ); copy(resultInputStream, fileOutputStream); } /* * The End Event indicates all matching records have been transmitted. * If the End Event is not received, the results may be incomplete. */ if (!isResultComplete.get()) { throw new Exception("S3 Select request was incomplete as End Event was not received."); } } private static SelectObjectContentRequest generateBaseCSVRequest(String bucket, String key, String query) { SelectObjectContentRequest request = new SelectObjectContentRequest(); request.setBucketName(bucket); request.setKey(key); request.setExpression(query); request.setExpressionType(ExpressionType.SQL); InputSerialization inputSerialization = new InputSerialization(); inputSerialization.setCsv(new CSVInput()); inputSerialization.setCompressionType(CompressionType.NONE); request.setInputSerialization(inputSerialization); OutputSerialization outputSerialization = new OutputSerialization(); outputSerialization.setCsv(new CSVOutput()); request.setOutputSerialization(outputSerialization); return request; } }
JavaScript

Para obter um exemplo de JavaScript que usa o AWS SDK for JavaScript com a operação de API SelectObjectContent do S3 para selecionar registros dos arquivos JSON e CSV armazenados no Amazon S3, consulte a publicação de blog Adição de suporte ao Amazon S3 Select no AWS SDK for JavaScript.

Python

Para obter um exemplo do Python sobre o uso de consultas SQL para pesquisar dados carregados no Amazon S3 como um arquivo de valor separado por vírgulas (CSV) usando o S3 Select, consulte a publicação do blog Consultar dados sem servidores ou bancos de dados usando o Amazon S3 Select.