Todos os produtos
Search
Central de documentação

Object Storage Service:Query files (Go SDK V1)

Última atualização: Sep 22, 2026

Este tópico descreve como usar o método Bucket.SelectObject para consultar arquivos CSV e JSON.

Observações

  • Neste tópico, usamos 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 mais informações sobre regiões e endpoints do OSS, consulte Regions and endpoints.

  • Neste tópico, obtemos as credenciais de acesso a partir de variáveis de ambiente. Para mais informações sobre como configurar credenciais de acesso, consulte Configure access credentials.

  • Este tópico demonstra como criar uma instância OSSClient com um endpoint do OSS. Para configurações alternativas, como usar um domínio personalizado ou autenticar com credenciais do Security Token Service (STS), consulte Configure a client (Go SDK V1).

  • Para consultar objetos, é necessária a permissão oss:GetObject. Para mais informações, consulte Grant a custom policy.

  • O SelectObject permite consultar apenas objetos nos formatos CSV e JSON.

Código de exemplo

Consultar um objeto CSV

O código a seguir mostra 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 mostra 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 acessar o código de exemplo completo para consulta de arquivos, consulte o exemplo no GitHub.

  • Para mais informações sobre a operação da API de consulta de arquivos, consulte SelectObject.