github.com/aavshr/aws-sdk-go@v1.41.3/service/s3/eventstream_example_test.go (about)

     1  package s3
     2  
     3  import (
     4  	"encoding/csv"
     5  	"fmt"
     6  	"io"
     7  	"os"
     8  
     9  	"github.com/aavshr/aws-sdk-go/aws"
    10  	"github.com/aavshr/aws-sdk-go/aws/session"
    11  )
    12  
    13  func ExampleS3_SelectObjectContent() {
    14  	sess := session.Must(session.NewSession())
    15  	svc := New(sess)
    16  
    17  	/*
    18  	   Example myObjectKey CSV content:
    19  
    20  	   name,number
    21  	   gopher,0
    22  	   ᵷodɥǝɹ,1
    23  	*/
    24  
    25  	// Make the Select Object Content API request using the object uploaded.
    26  	resp, err := svc.SelectObjectContent(&SelectObjectContentInput{
    27  		Bucket:         aws.String("myBucket"),
    28  		Key:            aws.String("myObjectKey"),
    29  		Expression:     aws.String("SELECT name FROM S3Object WHERE cast(number as int) < 1"),
    30  		ExpressionType: aws.String(ExpressionTypeSql),
    31  		InputSerialization: &InputSerialization{
    32  			CSV: &CSVInput{
    33  				FileHeaderInfo: aws.String(FileHeaderInfoUse),
    34  			},
    35  		},
    36  		OutputSerialization: &OutputSerialization{
    37  			CSV: &CSVOutput{},
    38  		},
    39  	})
    40  	if err != nil {
    41  		fmt.Fprintf(os.Stderr, "failed making API request, %v\n", err)
    42  		return
    43  	}
    44  	defer resp.EventStream.Close()
    45  
    46  	results, resultWriter := io.Pipe()
    47  	go func() {
    48  		defer resultWriter.Close()
    49  		for event := range resp.EventStream.Events() {
    50  			switch e := event.(type) {
    51  			case *RecordsEvent:
    52  				resultWriter.Write(e.Payload)
    53  			case *StatsEvent:
    54  				fmt.Printf("Processed %d bytes\n", *e.Details.BytesProcessed)
    55  			}
    56  		}
    57  	}()
    58  
    59  	// Printout the results
    60  	resReader := csv.NewReader(results)
    61  	for {
    62  		record, err := resReader.Read()
    63  		if err == io.EOF {
    64  			break
    65  		}
    66  		fmt.Println(record)
    67  	}
    68  
    69  	if err := resp.EventStream.Err(); err != nil {
    70  		fmt.Fprintf(os.Stderr, "reading from event stream failed, %v\n", err)
    71  	}
    72  }