Este tópico descreve como usar o método Bucket.SelectObject para consultar arquivos CSV e JSON.
Observações
Os exemplos deste tópico usam o endpoint público da região China (Hangzhou). Para acessar o OSS a partir de outros serviços da Alibaba Cloud na mesma região, use um endpoint interno. Para obter mais informações sobre regiões e endpoints do OSS, consulte Regiões e endpoints.
As credenciais de acesso são obtidas de variáveis de ambiente. Para saber como configurar credenciais de acesso, consulte Configurar credenciais de acesso.
Este tópico demonstra como criar uma instância OSSClient com um endpoint do OSS. Para outras configurações, como uso de domínio personalizado ou autenticação via Security Token Service (STS), consulte Configurar um cliente (Go SDK V1).
Para consultar objetos, você precisa da permissão
oss:GetObject. Para obter mais informações, consulte Conceder uma política personalizada.O SelectObject permite consultar apenas objetos nos formatos CSV e JSON.
Código de exemplo
Consultar um objeto CSV
O código a seguir exemplifica como consultar um arquivo CSV.
package main
import (
"io"
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Error getting credentials: %v", err)
}
// Create an OSSClient instance.
// Set yourEndpoint to the Endpoint of the bucket. For example, for a bucket in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com. For other regions, set the Endpoint as needed.
// Set yourRegion to the region where the bucket is located. For example, for a bucket in the China (Hangzhou) region, set the region to cn-hangzhou. For other regions, set the region as needed.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Set the signature version.
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Error creating OSS client: %v", err)
}
// Specify the bucket name. For example, examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Error getting bucket: %v", err)
}
// Specify the full path of the object. The full path cannot contain the bucket name. For example, exampledir/exampledata.csv.
objectKey := "exampledir/exampledata.csv"
// Specify the full path of the local CSV file. For example, D:\\localpath\\exampledata.csv.
localCsvFile := "D:\\localpath\\exampledata.csv"
// Upload the local file to OSS.
if err := bucket.PutObjectFromFile(objectKey, localCsvFile); err != nil {
log.Fatalf("Error uploading file: %v", err)
}
// Use a SELECT statement to query data from the file.
selectRequest := oss.SelectRequest{
Expression: `select * from ossobject`,
}
// Execute the SELECT request.
body, err := bucket.SelectObject(objectKey, selectRequest)
if err != nil {
log.Fatalf("Error selecting object: %v", err)
}
defer body.Close()
// Read the content.
content, err := io.ReadAll(body)
if err != nil {
log.Fatalf("Error reading content: %v", err)
}
// Print the result.
log.Printf("Selected content: %s", string(content))
}
Consultar um objeto JSON
O código a seguir exemplifica como consultar um arquivo JSON.
package main
import (
"io"
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Error getting credentials: %v", err)
}
// Create an OSSClient instance.
// Set yourEndpoint to the Endpoint of the bucket. For example, for a bucket in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com. For other regions, set the Endpoint as needed.
// Set yourRegion to the region where the bucket is located. For example, for a bucket in the China (Hangzhou) region, set the region to cn-hangzhou. For other regions, set the region as needed.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Set the signature version.
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Error creating OSS client: %v", err)
}
// Specify the bucket name. For example, examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Error getting bucket: %v", err)
}
// Specify the full path of the object. The full path cannot contain the bucket name. For example, exampledir/exampledata.json.
objectKey := "exampledir/exampledata.json"
// Specify the full path of the local JSON file. For example, D:\\localpath\\exampledata.json.
localJsonFile := "D:\\localpath\\exampledata.json"
// Upload the local file to OSS.
if err := bucket.PutObjectFromFile(objectKey, localJsonFile); err != nil {
log.Fatalf("Error uploading file: %v", err)
}
// Use a SELECT statement to query data from the file.
selectRequest := oss.SelectRequest{
Expression: `select * from ossobject`,
}
// Execute the SELECT request.
body, err := bucket.SelectObject(objectKey, selectRequest)
if err != nil {
log.Fatalf("Error selecting object: %v", err)
}
defer body.Close()
// Read the content.
content, err := io.ReadAll(body)
if err != nil {
log.Fatalf("Error reading content: %v", err)
}
// Print the result.
log.Printf("Selected content: %s", string(content))
}
Referências
Para obter o código completo de consulta de arquivos, consulte o exemplo no GitHub.
Para obter mais informações sobre a operação de API de consulta de arquivos, consulte SelectObject.