All Products
Search
Document Center

Object Storage Service:Kueri file (Go SDK V1)

Last Updated:Nov 29, 2025

Topik ini menjelaskan cara menggunakan metode Bucket.SelectObject untuk melakukan kueri terhadap file CSV dan JSON.

Catatan penggunaan

  • Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lain yang berada di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Regions and endpoints.

  • Pada topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi selengkapnya tentang cara mengonfigurasi kredensial akses, lihat Configure access credentials.

  • Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Configure a client (Go SDK V1).

  • Untuk melakukan kueri terhadap file, Anda harus memiliki izin oss:GetObject. Untuk informasi selengkapnya, lihat Attach a custom policy to a RAM user.

  • Hanya objek dalam format CSV dan JSON yang dapat dikueri menggunakan SelectObject.

Kode contoh

Kueri objek CSV

Kode berikut memberikan contoh cara melakukan kueri terhadap file CSV.

package main

import (
	"io"
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Error getting credentials: %v", err)
	}

	// Buat instans OSSClient.
	// Setel yourEndpoint ke Endpoint bucket. Misalnya, untuk bucket di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, sesuaikan Endpoint-nya.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk bucket di wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, sesuaikan nilainya.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Setel versi signature.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		log.Fatalf("Error creating OSS client: %v", err)
	}

	// Tentukan nama bucket. Misalnya, examplebucket.
	bucketName := "examplebucket"
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		log.Fatalf("Error getting bucket: %v", err)
	}

	// Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampledata.csv.
	objectKey := "exampledir/exampledata.csv"
	// Tentukan path lengkap file CSV lokal. Misalnya, D:\\localpath\\exampledata.csv.
	localCsvFile := "D:\\localpath\\exampledata.csv"

	// Unggah file lokal ke OSS.
	if err := bucket.PutObjectFromFile(objectKey, localCsvFile); err != nil {
		log.Fatalf("Error uploading file: %v", err)
	}

	// Gunakan pernyataan SELECT untuk mengkueri data dari file.
	selectRequest := oss.SelectRequest{
		Expression: `select * from ossobject`,
	}

	// Eksekusi permintaan SELECT.
	body, err := bucket.SelectObject(objectKey, selectRequest)
	if err != nil {
		log.Fatalf("Error selecting object: %v", err)
	}
	defer body.Close()

	// Baca konten.
	content, err := io.ReadAll(body)
	if err != nil {
		log.Fatalf("Error reading content: %v", err)
	}

	// Cetak hasilnya.
	log.Printf("Selected content: %s", string(content))
}

Kueri objek JSON

Kode berikut memberikan contoh cara melakukan kueri terhadap file JSON.

package main

import (
	"io"
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Error getting credentials: %v", err)
	}

	// Buat instans OSSClient.
	// Setel yourEndpoint ke Endpoint bucket. Misalnya, untuk bucket di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, sesuaikan Endpoint-nya.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk bucket di wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, sesuaikan nilainya.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Setel versi signature.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		log.Fatalf("Error creating OSS client: %v", err)
	}

	// Tentukan nama bucket. Misalnya, examplebucket.
	bucketName := "examplebucket"
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		log.Fatalf("Error getting bucket: %v", err)
	}

	// Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampledata.json.
	objectKey := "exampledir/exampledata.json"
	// Tentukan path lengkap file JSON lokal. Misalnya, D:\\localpath\\exampledata.json.
	localJsonFile := "D:\\localpath\\exampledata.json"

	// Unggah file lokal ke OSS.
	if err := bucket.PutObjectFromFile(objectKey, localJsonFile); err != nil {
		log.Fatalf("Error uploading file: %v", err)
	}

	// Gunakan pernyataan SELECT untuk mengkueri data dari file.
	selectRequest := oss.SelectRequest{
		Expression: `select * from ossobject`,
	}

	// Eksekusi permintaan SELECT.
	body, err := bucket.SelectObject(objectKey, selectRequest)
	if err != nil {
		log.Fatalf("Error selecting object: %v", err)
	}
	defer body.Close()

	// Baca konten.
	content, err := io.ReadAll(body)
	if err != nil {
		log.Fatalf("Error reading content: %v", err)
	}

	// Cetak hasilnya.
	log.Printf("Selected content: %s", string(content))
}

Referensi

  • Untuk kode contoh lengkap mengenai kueri file, lihat contoh di GitHub.

  • Untuk informasi selengkapnya mengenai operasi API untuk kueri file, lihat SelectObject.