このトピックでは、Bucket.SelectObjectを使用してCSVおよびJSONオブジェクトをクエリする方法について説明します。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョン、エンドポイント、オープンポート」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。
オブジェクトをクエリするには、
oss:GetObject
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。SelectObjectを使用して照会できるのは、CSV形式とJSON形式のオブジェクトのみです。
サンプルコード
CSVオブジェクトの照会
次のコードは、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 configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Error getting credentials: %v", err)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint.
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Specify the version of the signature algorithm.
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 name of the bucket. 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. Do not include the bucket name in the full path. Example: exampledir/exampledata.csv.
objectKey := "exampledir/exampledata.csv"
// Specify the full path of the local CSV file. 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)
}
// Execute the SELECT statement to query data in the object.
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 of the object.
content, err := io.ReadAll(body)
if err != nil {
log.Fatalf("Error reading content: %v", err)
}
// View the output.
log.Printf("Selected content: %s", string(content))
}
JSONオブジェクトの照会
次のコードは、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 configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Error getting credentials: %v", err)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint.
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Specify the version of the signature algorithm.
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 name of the bucket. 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. Do not include the bucket name in the full path. Example: exampledir/exampledata.json.
objectKey := "exampledir/exampledata.json"
// Specify the full path of the local JSON file. 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)
}
// Execute the SELECT statement to query data in the object.
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 of the object.
content, err := io.ReadAll(body)
if err != nil {
log.Fatalf("Error reading content: %v", err)
}
// View the output.
log.Printf("Selected content: %s", string(content))
}
関連ドキュメント
オブジェクトのクエリに使用する完全なサンプルコードについては、『GitHub』をご参照ください。
オブジェクトをクエリするために呼び出すAPI操作の詳細については、「SelectObject」をご参照ください。