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-hangzhoudari 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(®ion, "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(®ion, "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.