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 }