github.com/aliyun/aliyun-oss-go-sdk@v3.0.2+incompatible/sample/select_object.go (about)

     1  package sample
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	
     7  	"github.com/aliyun/aliyun-oss-go-sdk/oss"
     8  )
     9  
    10  // SelectObjectSample shows how to get data from csv/json object by sql
    11  func SelectObjectSample() {
    12  	// Create a bucket
    13  	bucket, err := GetTestBucket(bucketName)
    14  	if err != nil {
    15  		HandleError(err)
    16  	}
    17  
    18  	//
    19  	// Create a Csv object
    20  	//
    21  	err = bucket.PutObjectFromFile(objectKey, localCsvFile)
    22  	if err != nil {
    23  		HandleError(err)
    24  	}
    25  
    26  	// Create Csv Meta
    27  	csvMeta := oss.CsvMetaRequest{}
    28  	ret, err := bucket.CreateSelectCsvObjectMeta(objectKey, csvMeta)
    29  	if err != nil {
    30  		HandleError(err)
    31  	}
    32  	fmt.Println("csv file meta:", ret)
    33  
    34  	// case 1: Isn't NULL
    35  	selReq := oss.SelectRequest{}
    36  	selReq.Expression = "select Year, StateAbbr, CityName, PopulationCount from ossobject where CityName != ''"
    37  	selReq.InputSerializationSelect.CsvBodyInput.FileHeaderInfo = "Use"
    38  
    39  	body, err := bucket.SelectObject(objectKey, selReq)
    40  	if err != nil {
    41  		HandleError(err)
    42  	}
    43  	defer body.Close()
    44  
    45  	databyte, err := ioutil.ReadAll(body)
    46  	if err != nil {
    47  		HandleError(err)
    48  	}
    49  	fmt.Println("some data in SelectCSVObject result:", string(databyte[:9]))
    50  
    51  	// case 2: Like
    52  	selReq = oss.SelectRequest{}
    53  	selReq.Expression =  "select Year, StateAbbr, CityName, Short_Question_Text from ossobject where Measure like '%blood pressure%Years'"
    54  	selReq.InputSerializationSelect.CsvBodyInput.FileHeaderInfo = "Use"
    55  	body, err = bucket.SelectObject(objectKey, selReq)
    56  	if err != nil {
    57  		HandleError(err)
    58  	}
    59  	defer body.Close()
    60  
    61  	databyte, err = ioutil.ReadAll(body)
    62  	if err != nil {
    63  		HandleError(err)
    64  	}
    65  	fmt.Println("some data in SelectCSVObject result:", string(databyte[:9]))
    66  
    67  	// delete object
    68  	err = bucket.DeleteObject(objectKey)
    69  	if err != nil {
    70  		HandleError(err)
    71  	}
    72  
    73  	//
    74  	// Create a LINES json object
    75  	//
    76  	err = bucket.PutObjectFromFile(objectKey, localJSONLinesFile)
    77  	if err != nil {
    78  		HandleError(err)
    79  	}
    80  
    81  	// Create LINES JSON Meta
    82  	jsonMeta := oss.JsonMetaRequest{
    83  		InputSerialization: oss.InputSerialization {
    84  			JSON: oss.JSON {
    85  				JSONType:"LINES",
    86  			},
    87  		},
    88  	}
    89  	restSt, err := bucket.CreateSelectJsonObjectMeta(objectKey, jsonMeta)
    90  	if err != nil {
    91  		HandleError(err)
    92  	}
    93  	fmt.Println("csv json meta:", restSt)
    94  
    95  	// case 1: sql where A=B
    96  	selReq = oss.SelectRequest{}
    97  	selReq.Expression = "select * from ossobject where party = 'Democrat'"
    98  	selReq.OutputSerializationSelect.JsonBodyOutput.RecordDelimiter = ","
    99  	selReq.InputSerializationSelect.JsonBodyInput.JSONType = "LINES"
   100  
   101  	body, err = bucket.SelectObject(objectKey, selReq)
   102  	if err != nil {
   103  		HandleError(err)
   104  	}
   105  	defer body.Close()
   106  
   107  	databyte, err = ioutil.ReadAll(body)
   108  	if err != nil {
   109  		HandleError(err)
   110  	}
   111  	fmt.Println("some data in SelectJsonObject result:", string(databyte[:9]))
   112  
   113  	// case 2: LIKE
   114  	selReq = oss.SelectRequest{}
   115  	selReq.Expression = "select person.firstname, person.lastname from ossobject where person.birthday like '1959%'"
   116  	selReq.OutputSerializationSelect.JsonBodyOutput.RecordDelimiter = ","
   117  	selReq.InputSerializationSelect.JsonBodyInput.JSONType = "LINES"
   118  
   119  	body, err = bucket.SelectObject(objectKey, selReq)
   120  	if err != nil {
   121  		HandleError(err)
   122  	}
   123  	defer body.Close()
   124  
   125  	databyte, err = ioutil.ReadAll(body)
   126  	if err != nil {
   127  		HandleError(err)
   128  	}
   129  	fmt.Println("some data in SelectJsonObject result:", string(databyte[:9]))
   130  
   131  	// delete object
   132  	err = bucket.DeleteObject(objectKey)
   133  	if err != nil {
   134  		HandleError(err)
   135  	}
   136  
   137  	//
   138  	// Create a Document json object
   139  	//
   140  	err = bucket.PutObjectFromFile(objectKey, localJSONFile)
   141  	if err != nil {
   142  		HandleError(err)
   143  	}
   144  
   145  	// case 1: int avg, max, min 
   146  	selReq = oss.SelectRequest{}
   147  	selReq.Expression = `
   148  	select 
   149  		avg(cast(person.cspanid as int)), max(cast(person.cspanid as int)), 
   150  		min(cast(person.cspanid as int)) 
   151  	from 
   152  		ossobject.objects[*] 
   153  	where 
   154  		person.cspanid = 1011723
   155  	`
   156  	selReq.OutputSerializationSelect.JsonBodyOutput.RecordDelimiter = ","
   157  	selReq.InputSerializationSelect.JsonBodyInput.JSONType = "Document"
   158  	
   159  	body, err = bucket.SelectObject(objectKey, selReq)
   160  	if err != nil {
   161  		HandleError(err)
   162  	}
   163  	defer body.Close()
   164  
   165  	databyte, err = ioutil.ReadAll(body)
   166  	if err != nil {
   167  		HandleError(err)
   168  	}
   169  	fmt.Println("data:", string(databyte))
   170  
   171  	// case 2: Concat
   172  	selReq = oss.SelectRequest{}
   173  	selReq.Expression = `
   174  	select 
   175  		person 
   176  	from 
   177  		ossobject.objects[*] 
   178  	where 
   179  		(person.firstname || person.lastname) = 'JohnKennedy'
   180  	`
   181  	selReq.OutputSerializationSelect.JsonBodyOutput.RecordDelimiter = ","
   182  	selReq.InputSerializationSelect.JsonBodyInput.JSONType = "Document"
   183  	
   184  	body, err = bucket.SelectObject(objectKey, selReq)
   185  	if err != nil {
   186  		HandleError(err)
   187  	}
   188  	defer body.Close()
   189  
   190  	databyte, err = ioutil.ReadAll(body)
   191  	if err != nil {
   192  		HandleError(err)
   193  	}
   194  	fmt.Println("some data in SelectJsonObject result:", string(databyte[:9]))
   195  	
   196  	// Delete the object and bucket
   197  	err = DeleteTestBucketAndObject(bucketName)
   198  	if err != nil {
   199  		HandleError(err)
   200  	}
   201  
   202  	fmt.Println("SelectObjectSample completed")
   203  }