全部产品
Search
文档中心

Object Storage Service:Kueri file menggunakan OSS SDK untuk Go 2.0

更新时间:Oct 22, 2025

Topik ini menjelaskan cara menggunakan metode SelectObject untuk mengkueri data dalam file CSV dan JSON.

Catatan penggunaan

  • Kode contoh dalam topik ini menggunakan ID Wilayah cn-hangzhou dari Wilayah (Hangzhou) Tiongkok. Secara default, titik akhir publik digunakan untuk mengakses sumber daya di bucket. Jika Anda ingin mengakses sumber daya di bucket dengan menggunakan layanan Alibaba Cloud lainnya di wilayah yang sama dengan bucket tersebut, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir yang didukung oleh OSS, lihat Wilayah dan Titik Akhir OSS.

  • Dalam topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasi Kredensial Akses.

  • Mengkueri file memerlukan izin oss:GetObject. Untuk informasi lebih lanjut, lihat Berikan Izin Kustom kepada Pengguna RAM.

  • OSS hanya mendukung pengkuerian file CSV dan JSON.

Definisi metode

func (c *Client) SelectObject(ctx context.Context, request *SelectObjectRequest, optFns ...func(*Options)) (*SelectObjectResult, error)

Parameter permintaan

Parameter

Tipe

Deskripsi

ctx

context.Context

Konteks permintaan. Anda dapat menggunakan parameter ini untuk menetapkan total waktu habis untuk permintaan.

request

*SelectObjectRequest

Parameter permintaan operasi. Untuk informasi lebih lanjut, lihat SelectObjectRequest

optFns

...func(*Options)

(Opsional) Parameter konfigurasi tingkat operasi. Untuk informasi lebih lanjut, lihat Options

Parameter respons

Parameter

Tipe

Deskripsi

result

*SelectObjectResult

Parameter respons operasi, valid hanya jika err adalah nil. Untuk informasi lebih lanjut, lihat SelectObjectResult

err

error

Status permintaan. Jika permintaan gagal, err tidak nil.

Kode contoh

Kueri file CSV

Anda dapat menggunakan kode contoh berikut untuk mengeksekusi pernyataan SQL pada file CSV target dan mengembalikan hasil eksekusi.

package main

import (
	"context"
	"flag"
	"io"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah penyimpanan.
	bucketName string // Nama bucket.
	objectName string // Nama objek.
)

// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket kosong.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah kosong.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Periksa apakah nama objek kosong.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek diperlukan")
	}

	// Muat konfigurasi default dan atur penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk memilih objek.
	request := &oss.SelectObjectRequest{
		Bucket: oss.Ptr(bucketName), // Nama bucket.
		Key:    oss.Ptr(objectName), // Nama objek.
		SelectRequest: &oss.SelectRequest{
			Expression: oss.Ptr("select * from ossobject limit 10"), // Definisikan ekspresi SQL untuk mengkueri 10 baris pertama data dalam objek.
			InputSerializationSelect: oss.InputSerializationSelect{
				CsvBodyInput: &oss.CSVSelectInput{
					FileHeaderInfo: oss.Ptr("Use"),
				},
			},
			OutputSerializationSelect: oss.OutputSerializationSelect{
				OutputHeader: oss.Ptr(true),
			},
		},
	}

	// Eksekusi permintaan untuk memilih objek.
	result, err := client.SelectObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memilih objek %v", err)
	}

	content, err := io.ReadAll(result.Body)
	if err != nil {
		log.Fatalf("gagal membaca objek %v", err)
	}

	// Cetak hasil pemilihan objek.
	log.Printf("hasil pemilihan objek:%#v\n", string(content))
}

Kueri file JSON

Anda dapat menggunakan kode contoh berikut untuk mengeksekusi pernyataan SQL pada file JSON target dan mengembalikan hasil eksekusi.

package main

import (
	"context"
	"flag"
	"io"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah penyimpanan.
	bucketName string // Nama bucket.
	objectName string // Nama objek.
)

// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket kosong.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah kosong.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Periksa apakah nama objek kosong.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek diperlukan")
	}

	// Muat konfigurasi default dan atur penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk memilih objek.
	request := &oss.SelectObjectRequest{
		Bucket: oss.Ptr(bucketName), // Nama bucket.
		Key:    oss.Ptr(objectName), // Nama objek.
		SelectRequest: &oss.SelectRequest{
			Expression: oss.Ptr("select * from ossobject limit 10"), // Definisikan ekspresi SQL untuk mengkueri 10 baris pertama data dalam objek.
			InputSerializationSelect: oss.InputSerializationSelect{
				JsonBodyInput: &oss.JSONSelectInput{
					JSONType: oss.Ptr("DOCUMENT"),
				},
			},
			OutputSerializationSelect: oss.OutputSerializationSelect{
				OutputHeader: oss.Ptr(true),
			},
		},
	}

	// Kirim permintaan untuk memilih objek.
	result, err := client.SelectObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memilih objek %v", err)
	}

	content, err := io.ReadAll(result.Body)
	if err != nil {
		log.Fatalf("gagal membaca objek %v", err)
	}

	// Cetak hasil pemilihan objek.
	log.Printf("hasil pemilihan objek:%#v\n", string(content))
}

Referensi

  • Untuk kode contoh lengkap untuk mengkueri file, lihat Contoh GitHub.

  • Untuk informasi lebih lanjut tentang operasi API yang digunakan untuk mengkueri file, lihat SelectObject.

  • Untuk informasi lebih lanjut tentang mengkueri file, lihat Kueri File.