Object Storage Service (OSS) は、名前、ETag、ストレージクラス、サイズ、オブジェクトの最終変更時刻など、特定のメタデータ条件に一致するオブジェクトをクエリできるデータインデックス作成機能を提供します。 データインデックス機能は、ビジネス要件に基づいてクエリ結果をソートおよび集約します。 これにより、多数のオブジェクトから特定のオブジェクトを照会する効率が向上します。
使用上の注意
OSS SDK for Go 2.2.5以降は、データインデックス機能をサポートしています。
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。
バケットのメタデータ管理機能の有効化
次のコードは、特定のバケットのメタデータ管理機能を有効にする方法の例を示しています。 バケットのメタデータ管理機能を有効にすると、バケットのメタデータインデックスライブラリが作成され、バケット内のすべてのオブジェクトのメタデータインデックスが作成されます。 メタデータインデックスライブラリが作成された後、OSSはバケット内の増分オブジェクトに対して準リアルタイムスキャンを実行し、増分オブジェクトのメタデータインデックスを作成します。
パッケージメイン
import (import (import)
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main() {
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。
client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// メタデータ管理機能を有効にします。
err = client.OpenMetaQuery("examplebucket")
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("Open data query success")
}
バケットのメタデータインデックスライブラリの照会
次のコードは、バケットのメタデータインデックスライブラリをクエリする方法の例を示しています。
パッケージメイン
import (import (import)
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main() {
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。
client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// メタデータインデックスライブラリに関する情報を照会します。
result, err := client.GetMetaQueryStatus("examplebucket")
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Printf("State:% s\n", result.State)
fmt.Printf("Phase:% s\n", result.Phase)
fmt.Printf("CreateTime:% s\n", result.CreateTime)
fmt.Printf("UpdateTime:% s\n", result.UpdateTime)
}
特定の条件を満たすオブジェクトのクエリ
次のサンプルコードは、特定の条件を満たすオブジェクトをクエリし、特定のフィールドとソート方法に基づいてオブジェクト情報を一覧表示する方法の例を示しています。
パッケージメイン
import (import (import)
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main() {
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。
client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// サイズが30バイトを超えるオブジェクトを照会し、同時に最大10個のオブジェクトを返し、オブジェクトを昇順に並べ替えます。
query := oss.MetaQuery {
NextToken: "" 、
MaxResults: 10,
クエリ: '{"Field": "Size","Value": "30","Operation": "gt"}',
並べ替え: 「サイズ」、
注文: "asc" 、
}
// 指定された条件に一致するオブジェクトを照会し、指定されたフィールドとソート方法に基づいてオブジェクト情報を一覧表示します。
result,err := client.DoMetaQuery("examplebucket",query)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Printf("NextToken:% s\n", result.NextToken)
_, file := range result.Files {
fmt.Printf("ファイル名: % s\n", File. Filename)
fmt.Printf("size: % d\n", file.Size)
fmt.Printf("File Modified Time:% s\n", file.FileModifiedTime)
fmt.Printf("Oss Object Type:% s\n", file.OssObjectType)
fmt.Printf("Oss Storage Class:% s\n", file.OssStorageClass)
fmt.Printf("Object ACL:% s\n", file.ObjectACL)
fmt.Printf("ETag:% s\n", file.ETag)
fmt.Printf("Oss CRC64:% s\n", file.OssCRC64)
fmt.Printf("Oss Tagging Count:% d\n", file.OssTaggingCount)
for _, tagging := range file.OssTagging {
fmt.Printf("Oss Tagging Key:% s\n", tagging.Key)
fmt.Printf("Oss Tagging Value:% s\n", tagging.Value)
}
_, userMeta := range file.OssUserMeta {
fmt.Printf("Oss User Meta Key:% s\n", userMeta.Key)
fmt.Printf("Oss User Meta Key Value:% s\n", userMeta.Value)
}
}
}
バケットのメタデータ管理機能を無効にする
次のコードは、特定のバケットのメタデータ管理機能を無効にする方法の例を示しています。
パッケージメイン
import (import (import)
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main() {
/// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。
client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// メタデータ管理機能を無効にします。
err = client.CloseMetaQuery("examplebucket")
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("クローズドデータクエリの成功")
}
参考資料
メタデータ管理機能を有効にするために呼び出すことができるAPI操作の詳細については、「OpenMetaQuery」をご参照ください。
メタデータインデックスライブラリに関する情報を照会するために呼び出すAPI操作の詳細については、「GetMetaQueryStatus」をご参照ください。
特定の条件を満たすオブジェクトを照会し、特定のフィールドとソート方法に基づいてオブジェクト情報を一覧表示するために呼び出すAPI操作の詳細については、「DoMetaQuery」をご参照ください。
メタデータ管理機能を無効にするために呼び出すことができるAPI操作の詳細については、「CloseMetaQuery」をご参照ください。