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

Object Storage Service:データインデックスを使用して、大量のデータの中から特定の条件を満たすオブジェクトを検索する

最終更新日:Oct 02, 2025

Object Storage Service (OSS) のデータインデックス機能を使用すると、オブジェクトの数やサイズなど、多数のオブジェクトから効率的に統計を収集できます。ListObjects 操作と比較して、データインデックス機能は統計効率を大幅に向上させ、操作プロセスを簡素化します。データインデックス機能は、大規模なデータ統計に適しています。

メリット

企業 A は、中国 (広州) リージョンの mybucket という名前のバケットに、ビジネスプレフィックスで分類された 2 億個のオブジェクトと 180 万個のディレクトリを格納しています。データインデックス機能を使用すると、オブジェクト統計にかかる時間を 83% 削減できます。

従来の方法

データインデックス

期間

1 日あたり 2 時間

1 日あたり 20 分

複雑さ

ディレクトリ内のオブジェクト数が 1,000 を超える場合、ListObject 操作を複数回呼び出す必要があります。

ディレクトリごとに DoMetaQuery 操作を一度呼び出すだけで済みます。

プロセス

次の図は、データインデックス機能を使用して大規模なデータ統計を行う方法を示しています。

プロセス:

  1. データインデックス機能を有効にする: OSS は、オブジェクトのメタデータ、ユーザーメタデータ、およびオブジェクトタグを含むインデックステーブルを自動的に作成します。

  2. オブジェクトを検索して統計を収集する: 検索条件を指定し、DoMetaQuery 操作を呼び出す必要があります。

最後に、OSS は分析のために、検索条件を満たすオブジェクトの数、合計サイズ、平均サイズなどの統計を返します。

データインデックスを使用して、大量のデータの中から特定の条件を満たすオブジェクトを検索する

ステップ 1: データインデックス機能を有効にする

OSS コンソールを使用する

  1. OSS コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[バケット] をクリックします。[バケット] ページで、データインデックス機能を有効にするバケットの名前をクリックします。

  3. 左側のナビゲーションツリーで、[オブジェクト管理] > [データインデックス] を選択します。

  4. [データインデックス] ページで、[今すぐ有効にする] をクリックします。

  5. [データインデックス] ダイアログボックスで、[MetaSearch] を選択し、[有効にする] をクリックします。

OSS SDK を使用する

現在、MetaSearch を使用して特定の条件を満たすオブジェクトをクエリできるのは、OSS SDK for Java、OSS SDK for Python、および OSS SDK for Go のみです。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;

public class Demo {

    // この例では、中国 (広州) リージョンのエンドポイントが使用されています。実際の エンドポイントを指定してください。
    private static String endpoint = "https://oss-cn-guangzhou.aliyuncs.com";
    // バケットの名前を指定します。例: examplebucket。
    private static String bucketName = "examplebucket";

    public static void main(String[] args) throws com.aliyuncs.exceptions.ClientException {
        // 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (広州) リージョンにある場合は、リージョンを cn-guangzhou に設定します。
        String region = "cn-guangzhou";

        // OSSClient インスタンスを作成します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // データインデックス機能を有効にします。
            ossClient.openMetaQuery(bucketName);
        } catch (OSSException oe) {
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Error Message: " + ce.getMessage());
        } finally {
            // OSSClient インスタンスをシャットダウンします。
            ossClient.shutdown();
        }
    }
}

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (広州) リージョンにある場合は、エンドポイントを https://oss-cn-guangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-guangzhou.aliyuncs.com"
# バケットのリージョンを指定します。例: cn-guangzhou。このパラメーターは、V4 署名アルゴリズムを使用する場合に必要です。
region = "cn-guangzhou"

# examplebucket をバケットの名前に置き換えます。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)

# データインデックス機能を有効にします。
bucket.open_bucket_meta_query()
package main

import (
	"context"
	"flag"   
	"log"     

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

var (
	region     string // コマンドラインから取得したリージョン情報を格納する変数を指定します。
	bucketName string // コマンドラインから取得したバケット名を格納する変数を指定します。
)

// init 関数は、プログラムを初期化するために main 関数の前に実行されます。
func init() {
	// コマンドラインパラメーターを使用してリージョンを指定します。
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	// コマンドラインパラメーターを使用してバケット名を指定します。
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	flag.Parse() // コマンドラインパラメーターを解析します。

	// バケット名が指定されているかどうかを確認します。バケット名が指定されていない場合は、デフォルトのパラメーターを返してプログラムを終了します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required") // エラーを記録してプログラムを終了します。
	}

	// リージョンが指定されているかどうかを確認します。リージョンが指定されていない場合は、デフォルトのパラメーターを返してプログラムを終了します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required") // エラーを記録してプログラムを終了します。
	}

	// クライアントを作成して構成し、環境変数を使用して資格情報プロバイダーを渡します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // クライアント構成を使用して新しい OSSClient インスタンスを作成します。

	// OpenMetaQuery リクエストを作成して、特定のバケットのメタデータ管理機能を有効にします。
	request := &oss.OpenMetaQueryRequest{
		Bucket: oss.Ptr(bucketName), // バケットの名前を指定します。
	}
	result, err := client.OpenMetaQuery(context.TODO(), request) // リクエストを実行して、バケットのメタデータ管理機能を有効にします。
	if err != nil {
		log.Fatalf("failed to open meta query %v", err) // エラーが発生した場合は、エラーメッセージを記録してプログラムを終了します。
	}

	log.Printf("open meta query result:%#v\n", result) // リクエストの結果を表示します。
}

ステップ 2: オブジェクトを検索して統計を収集する

OSS コンソールを使用する

検索条件の設定

  1. 左側のナビゲーションツリーで、[オブジェクト管理] > [データインデックス] を選択します。

  2. ストレージクラスを [標準] に、ACL を [非公開] に設定します。

  3. ドロップダウンリストから [あいまい一致] を選択し、オブジェクト名パラメーターのボックスに a/b と入力します。

検索結果の設定

  1. オブジェクトを最終更新時間に基づいて降順にソートします: オブジェクトのソート順を降順に設定し、ソート基準ドロップダウンリストから [最終更新時間] を選択します。

  2. オブジェクトの合計サイズと平均サイズを計算します: データ集約パラメーターに 2 つの項目を作成します。1. 出力ドロップダウンリストからオブジェクトサイズを選択し、By ドロップダウンリストから [合計] を選択します。2. 出力ドロップダウンリストからオブジェクトサイズを選択し、By ドロップダウンリストから [平均] を選択します。

  3. オブジェクトの数を計算します: 出力ドロップダウンリストから [ストレージクラス] を選択し、By ドロップダウンリストから [グループカウント] を選択します。

  1. [今すぐクエリ] をクリックします。

OSS SDK を使用する

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

import java.util.ArrayList;
import java.util.List;

public class Demo {

    // この例では、中国 (広州) リージョンのエンドポイントが使用されています。実際の エンドポイントを指定してください。
    private static String endpoint = "https://oss-cn-guangzhou.aliyuncs.com";
    // バケットの名前を指定します。例: examplebucket。
    private static String bucketName = "examplebucket";

    public static void main(String[] args) throws Exception {

        // 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (広州) リージョンにある場合は、リージョンを cn-guangzhou に設定します。
        String region = "cn-guangzhou";

        // OSSClient インスタンスを作成します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // maxResults を 20 に設定して、最大 20 個のオブジェクトが返されるようにします。
            int maxResults = 20;
            // 検索条件を指定します: プレフィックスを a/b に、ストレージクラスを Standard に、アクセス制御リスト (ACL) を private に設定します。
            // クエリ文で "and" を使用して複数の検索条件を接続します。
            String query = "{\n" +
                    "  \"Operation\": \"and\",\n" +
                    "  \"SubQueries\": [\n" +
                    "    {\n" +
                    "      \"Field\": \"Filename\",\n" +
                    "      \"Value\": \"a/b\",\n" +
                    "      \"Operation\": \"match\"\n" +
                    "    },\n" +
                    "    {\n" +
                    "      \"Field\": \"OSSStorageClass\",\n" +
                    "      \"Value\": \"Standard\",\n" +
                    "      \"Operation\": \"eq\"\n" +
                    "    },\n" +
                    "    {\n" +
                    "      \"Field\": \"ObjectACL\",\n" +
                    "      \"Value\": \"private\",\n" +
                    "      \"Operation\": \"eq\"\n" +
                    "    }\n" +
                    "  ]\n" +
                    "}";
            String sort = "FileModifiedTime";// オブジェクトを最終更新時間でソートします。

            // 集約操作インスタンスを作成して、オブジェクトの合計サイズ、平均サイズ、および数を計算します。
            Aggregation aggregationRequest1 = new Aggregation();
            aggregationRequest 1.setField("Size");// 集約フィールドを Size に設定します。
            aggregationRequest 1.setOperation("sum");// すべてのオブジェクトの合計サイズを計算します。

            Aggregation aggregationRequest2 = new Aggregation();
            aggregationRequest 2.setField("Size");// 集約フィールドを Size に設定します。
            aggregationRequest 2.setOperation("count");// オブジェクトの数を計算します。

            Aggregation aggregationRequest3 = new Aggregation();
            aggregationRequest 3.setField("Size");// 集約フィールドを Size に設定します。
            aggregationRequest 3.setOperation("average");// オブジェクトの平均サイズを計算します。

            // すべての集約リクエストをリストに追加します。
            Aggregations aggregations = new Aggregations();
            List<Aggregation> aggregationList = new ArrayList<>();
            aggregationList.add(aggregationRequest 1);// 合計集約リクエストを追加します。
            aggregationList.add(aggregationRequest 2);// カウント集約リクエストを追加します。
            aggregationList.add(aggregationRequest 3);// 平均集約リクエストを追加します。
            aggregations.setAggregation(aggregationList);// すべての集約操作を Aggregations オブジェクトに追加します。

            // DoMetaQuery リクエストを作成します。バケット名、返されるオブジェクトの最大数、検索条件、およびソート方法を指定します。
            DoMetaQueryRequest doMetaQueryRequest = new DoMetaQueryRequest(bucketName, maxResults, query, sort);

            // すべての集約操作を DoMetaQuery リクエストに追加します。
            doMetaQueryRequest.setAggregations(aggregations);
            // ソート方法を DESC に設定します。
            doMetaQueryRequest.setOrder(SortOrder.DESC);

            // DoMetaQuery リクエストを実行して結果を取得します。
            DoMetaQueryResult doMetaQueryResult = ossClient.doMetaQuery(doMetaQueryRequest);
            // 結果を検証します。
            if (doMetaQueryResult.getFiles() != null) {
                // オブジェクトリストが空でない場合は、オブジェクト情報を走査して表示します。
                for (ObjectFile file : doMetaQueryResult.getFiles().getFile()) {
                    System.out.println("Filename: " + file.getFilename()); // オブジェクトの名前。
                    System.out.println("ETag: " + file.getETag());// オブジェクトの ETag。
                    System.out.println("ObjectACL: " + file.getObjectACL()); // オブジェクトの ACL。
                    System.out.println("OssObjectType: " + file.getOssObjectType());// オブジェクトのタイプ。
                    System.out.println("OssStorageClass: " + file.getOssStorageClass());// オブジェクトのストレージクラス。
                    System.out.println("TaggingCount: " + file.getOssTaggingCount()); // タグの数。
                    if (file.getOssTagging() != null) {
                        // タグを表示します。
                        for (Tagging tag : file.getOssTagging().getTagging()) {
                            System.out.println("Key: " + tag.getKey());
                            System.out.println("Value: " + tag.getValue());
                        }
                    }
                    if (file.getOssUserMeta() != null) {
                        // ユーザーメタデータを表示します。
                        for (UserMeta meta : file.getOssUserMeta().getUserMeta()) {
                            System.out.println("Key: " + meta.getKey());
                            System.out.println("Value: " + meta.getValue());
                        }
                    }
                }
            } else if (doMetaQueryResult.getAggregations() != null) {
                // 集約結果が存在する場合は、集約情報を走査して表示します。
                for (Aggregation aggre : doMetaQueryResult.getAggregations().getAggregation()) {
                    System.out.println("Field: " + aggre.getField());// 集約フィールド。
                    System.out.println("Operation: " + aggre.getOperation()); // 集約操作。
                    System.out.println("Value: " + aggre.getValue());// 集約操作の値。
                    if (aggre.getGroups() != null && aggre.getGroups().getGroup().size() > 0) {
                        // グループごとに集約操作の値をクエリします。
                        System.out.println("Groups value: " + aggre.getGroups().getGroup().get(0).getValue());
                        // グループごとの集約操作の合計数をクエリします。
                        System.out.println("Groups count: " + aggre.getGroups().getGroup().get(0).getCount());
                    }
                }
            } else {
                System.out.println("NextToken: " + doMetaQueryResult.getNextToken());
            }

        } catch (OSSException oe) {
            // OSS 例外をキャッチし、関連情報を表示します。
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            // クライアント例外をキャッチし、エラーメッセージを表示します。
            System.out.println("Error Message: " + ce.getMessage());
        } finally {
            // OSSClient インスタンスをシャットダウンします。
            ossClient.shutdown();
        }
    }
}
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import MetaQuery, AggregationsRequest  
import json
# 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (広州) リージョンにある場合、エンドポイントを https://oss-cn-guangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-guangzhou.aliyuncs.com"
# バケットのリージョンを指定します。例: cn-guangzhou。このパラメーターは、V4 署名アルゴリズムを使用する場合に必要です。
region = "cn-guangzhou"

# バケットの名前を指定します。例: examplebucket。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)

# 検索条件を指定します。プレフィックスを a/b に、ストレージタイプを Standard に、ACL を private に設定します。
query = {
    "Operation": "and",
    "SubQueries": [
        {"Field": "Filename", "Value": "a/b", "Operation": "match"},
        {"Field": "OSSStorageClass", "Value": "Standard", "Operation": "eq"},
        {"Field": "ObjectACL", "Value": "private", "Operation": "eq"}
    ]
}
# 検索条件のフォーマットを JSON に変換します。
query_json = json.dumps(query)

# 集約操作インスタンスを作成して、オブジェクトの合計サイズ、平均サイズ、および数を計算します。
aggregations = [
    AggregationsRequest(field="Size", operation="sum"),  # すべてのオブジェクトの合計サイズを計算します。
    AggregationsRequest(field="Size", operation="count"),  # オブジェクトの数を計算します。
    AggregationsRequest(field="Size", operation="average")  # オブジェクトの平均サイズを計算します。
]


# DoMetaQuery リクエストを作成します。検索条件、返されるオブジェクトの最大数、ソートメソッド、および集約操作を指定します。
do_meta_query_request = MetaQuery(
    max_results=20, # 最大 20 個のオブジェクトを返します。
    query=query_json, # 検索条件を指定します。
    sort="FileModifiedTime",  # 最終更新時刻でオブジェクトをソートします。
    order="desc", # オブジェクトを降順でソートします。
    aggregations=aggregations # 集約操作を指定します。
)

# DoMetaQuery リクエストを実行して結果を取得します。
result = bucket.do_bucket_meta_query(do_meta_query_request)

# 結果のうち、検索条件を満たすオブジェクトの情報を表示します。
if result.files:
    for file in result.files:
        print(f"Filename: {file.file_name}") # オブジェクトの名前を表示します。
        print(f"ETag: {file.etag}") # オブジェクトの ETag を表示します。
        print(f"ObjectACL: {file.object_acl}") # オブジェクトの ACL を表示します。
        print(f"OssObjectType: {file.oss_object_type}") # オブジェクトのタイプを表示します。
        print(f"ETag: {file.etag}") # オブジェクトの ETag を表示します。
        print(f"TaggingCount: {file.oss_tagging_count}") # オブジェクトのタグ数を表示します。
        
        // オブジェクトのすべてのタグを表示します。
        if file.oss_tagging:
            for tag in file.oss_tagging:
                print(f"Key: {tag. Key}") # タグのキーを表示します。
                print(f"Value: {tag.value}") # タグの値を表示します。
        
        // ユーザーメタデータを表示します。
        if file.oss_user_meta:
            for meta in file.oss_user_meta:
                print(f"Key: {tag. Key}") # ユーザーメタデータの一部分のキーを表示します。
                print(f"Value: {tag.value}") # ユーザーメタデータの一部分の値を表示します。


# 集約操作の結果を表示します。
if result.aggregations:
    for aggre in result.aggregations:
        print(f"Field: {aggre.field}") # 集約操作フィールドを表示します。
        print(f"Operation: {aggre.operation}") # 集約操作タイプ (sum、count、average など) を表示します。
        print(f"Value: {aggre.value}") # 集約操作の値を表示します。
package main

import (
	"context"
	"encoding/json"
	"flag"
	"fmt"
	"log"

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

var (
	region     string // コマンドラインから取得したリージョン情報を格納する変数を指定します。
	bucketName string // コマンドラインから取得したバケット名を格納する変数を指定します。
)

// init 関数は、プログラムを初期化するために main 関数の前に実行されます。
func init() {
	// コマンドラインパラメーターを使用してリージョンを指定します。デフォルトでは、パラメーターは空の文字列です。
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	// コマンドラインパラメーターを使用してバケット名を指定します。デフォルトでは、パラメーターは空の文字列です。
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	flag.Parse() // コマンドラインパラメーターを解析します。

	// バケット名が指定されているかどうかを確認します。バケット名が指定されていない場合は、デフォルトのパラメーターを返してプログラムを終了します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが指定されているかどうかを確認します。リージョンが指定されていない場合は、デフォルトのパラメーターを返してプログラムを終了します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// クライアントを作成して構成し、環境変数を使用して資格情報プロバイダーとリージョンを渡します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // クライアント構成を使用して新しい OSSClient インスタンスを作成します。

	# 検索条件を指定します: プレフィックスを a/b に、ストレージクラスを Standard に、ACL を private に設定します。
	query := map[string]interface{}{
		"Operation": "and",
		"SubQueries": []map[string]interface{}{
			{"Field": "Filename", "Value": "a/b", "Operation": "match"},
			{"Field": "OSSStorageClass", "Value": "Standard", "Operation": "eq"},
			{"Field": "ObjectACL", "Value": "private", "Operation": "eq"},
		},
	}
	// 検索条件のフォーマットを JSON に変換します。
	queryJSON, err := json.Marshal(query)
	if err != nil {
		log.Fatalf("failed to marshal query %v", err)
	}

	// 集約操作インスタンスを作成して、オブジェクトの合計サイズ、平均サイズ、および数を計算します。
	aggregations := []oss.MetaQueryAggregation{
		{Field: oss.Ptr("Size"), Operation: oss.Ptr("sum")},     // すべてのオブジェクトの合計サイズを計算します。
		{Field: oss.Ptr("Size"), Operation: oss.Ptr("count")},   // オブジェクトの数を計算します。
		{Field: oss.Ptr("Size"), Operation: oss.Ptr("average")}, // オブジェクトの平均サイズを計算します。
	}

	// DoMetaQuery リクエストを作成して、特定の条件を満たすオブジェクトをクエリします。
	request := &oss.DoMetaQueryRequest{
		Bucket: oss.Ptr(bucketName), // バケットの名前を指定します。
		MetaQuery: &oss.MetaQuery{
			MaxResults: oss.Ptr(int64(20)), // 返されるオブジェクトの最大数を 20 に設定します。
			Query:      oss.Ptr(string(queryJSON)), // サイズが 1 MB より大きいオブジェクトをクエリします。
			Sort:       oss.Ptr("Size"),            // オブジェクトをサイズで一覧表示します。
			Order: oss.MetaQueryOrderAsc, // オブジェクトを昇順でソートします。
			Aggregations: &oss.MetaQueryAggregations{
				Aggregations: aggregations}, // 集約操作インスタンスを作成して、オブジェクトの合計サイズ、平均サイズ、および数を計算します。
		},
	}
	result, err := client.DoMetaQuery(context.TODO(), request) // 前述の条件を満たすオブジェクトをクエリするリクエストを実行します。
	if err != nil {
		log.Fatalf("failed to do meta query %v", err)
	}

	// 次のページのデータをクエリするために使用されるトークンを表示します。
	fmt.Printf("NextToken:%s\n", *result.NextToken)

	// 返された結果を走査し、各オブジェクトの詳細を表示します。
	for _, file := range result.Files {
		fmt.Printf("File name: %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)
		if file.OSSTaggingCount != nil {
			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)
		}

		// ユーザーメタデータを表示します。
		for _, 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)
		}
	}

	// 集約操作の結果を表示します。
	for _, aggregation := range result.Aggregations {
		fmt.Printf("Aggregation Field:%s\n", *aggregation.Field)
		fmt.Printf("Aggregation Operation:%s\n", *aggregation.Operation)
		fmt.Printf("Aggregation Value:%f\n", *aggregation.Value)
	}

}

ステップ 3: 結果を検証する

OSS コンソールを使用する

[クエリ結果] ページには、検索条件を満たす 100 個の標準ストレージオブジェクトの合計サイズが 19.53 MB で、各オブジェクトの平均サイズが約 200 KB であることが示されています。

OSS SDK を使用する

次の図は、検索条件を満たす 100 個の標準ストレージオブジェクトの合計サイズが 19.53 MB で、各オブジェクトの平均サイズが約 200 KB であることを示しています。

image

リファレンス

  • ビジネスで高度なカスタマイズが必要な場合は、RESTful API を直接呼び出すことができます。API を直接呼び出すには、コードに署名計算を含める必要があります。詳細については、「(推奨) V4 署名を含める」および「DoMetaQuery」をご参照ください。