すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:オブジェクトの照会

最終更新日:Oct 30, 2024

このトピックでは、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」をご参照ください。