Ejemplos de uso de Amazon S3 Select en un objeto - Amazon Simple Storage Service

Ejemplos de uso de Amazon S3 Select en un objeto

importante

Amazon S3 Select ya no está disponible para los nuevos clientes. Los clientes actuales de Amazon S3 Select pueden seguir utilizando la característica de la forma habitual. Más información

Puede utilizar S3 Select para seleccionar contenido de un objeto con la consola de Amazon S3, la API de REST y los SDK de AWS.

Para obtener más información sobre las funciones de SQL admitidas para S3 Select, consulte Funciones SQL.

Para seleccionar contenido de un objeto en la consola de Amazon S3
  1. Inicie sesión AWS Management Console Management Console y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

  2. En el panel de navegación izquierdo, elija Instancias.

  3. Elija el bucket que contiene el objeto del que desea seleccionar el contenido y, a continuación, elija el nombre del objeto.

  4. Elija Acciones de objetos y Consultar con S3 Select.

  5. Configure Configuración de entrada en función del formato de los datos de entrada.

  6. Configure Configuración de salida en función del formato de la salida que desee recibir.

  7. Para extraer registros del objeto elegido, en Consulta SQL, introduzca los comandos SELECT SQL. Para obtener más información sobre cómo escribir comandos SQL, consulte Referencia de SQL para Amazon S3 Select.

  8. Después de introducir las consultas SQL, seleccione Ejecutar consulta SQL. A continuación, en Resultados de la consulta, puede ver los resultados de sus consultas SQL.

Puede utilizar los SDK de AWS para seleccionar contenido de un objeto. Sin embargo, si su aplicación lo requiere, puede enviar solicitudes REST directamente. Para obtener más información sobre el formato de solicitud y respuesta, consulte SelectObjectContent.

Puede utilizar Amazon S3 Select para seleccionar parte del contenido de un objeto mediante el método selectObjectContent. Si este método funciona correctamente, devuelve los resultados de la expresión SQL.

Java

En el siguiente ejemplo de código Java se devuelve el valor de la primera columna de cada uno de los registros almacenados en un objeto que contiene datos en formato CSV. También se solicita la devolución de mensajes Progress y Stats. Se debe proporcionar un nombre de bucket válido y un objeto que contenga datos en formato CSV.

Para obtener instrucciones sobre cómo crear y probar una muestra funcional, consulte Introducción en la Guía del desarrollador de 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 obtener un ejemplo de JavaScript que utiliza AWS SDK for JavaScript con la operación de la API de S3 SelectObjectContent para seleccionar registros de archivos JSON y CSV almacenados en Amazon S3, consulte la publicación de blog Introducción de ayuda para Amazon S3 Select en AWS SDK for JavaScript.

Python

Para obtener un ejemplo de Python sobre el uso de consultas SQL para buscar en los datos que se han cargado en Amazon S3 como un archivo de valores separados por comas (CSV) mediante S3 Select, consulte la publicación de blog Consulta de datos sin servidores o bases de datos mediante Amazon S3 Select.