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

:時間範囲による OSS オブジェクトのフィルタリング

最終更新日:May 15, 2026

Object Storage Service (OSS) バケット内のオブジェクトを指定された時間範囲でフィルタリングするには、データインデックス機能を使用します。オブジェクトの最終更新日時に基づいて開始日と終了日を設定することで、クエリの効率が向上します。この機能は、監査追跡、データ同期、定期的なバックアップ、コスト分析など、特定の時間内のファイルを正確に取得する必要があるシナリオで役立ちます。

ユースケース

  • 監査とコンプライアンスチェック

    企業や組織は、コンプライアンスを確保するためにデータアクティビティを定期的にレビューする必要があります。特定の時間範囲内にアップロードされたオブジェクトをクエリすることで、データライフサイクルの管理、データ作成・変更履歴の追跡、データ監査プロセスのサポートに役立ちます。

  • データのバックアップとリカバリ

    定義されたポリシーに基づいてバックアップまたはリカバリ操作を実行する際、指定された時間範囲内の新規または更新されたオブジェクトをクエリすることで、正確なバックアップ対象を特定し、ストレージ容量とデータ転送コストを節約できます。

  • データ分析とレポート作成

    ビッグデータ分析、ログ処理、またはビジネスレポート作成を伴うアプリケーションでは、日次、週次、月次など、特定の期間内に生成された新しいデータを処理する必要があります。指定された時間範囲内のオブジェクトをクエリすることで、分析対象のデータセットを迅速に見つけ、データ抽出を簡素化できます。

  • コンテンツ管理システムの同期

    コンテンツ管理システムは、Web サイトのコンテンツを最新かつ完全な状態に保つために、新規または更新されたオブジェクトを定期的に同期する必要があります。

  • コスト最適化とリソースのクリーンアップ

    企業は、古くなったオブジェクトを定期的にクリーンアップする必要があります。指定された期間内に更新されていないオブジェクトをクエリすることで、削除対象のオブジェクトを特定し、効率的なリソース利用を確保できます。

  • トラブルシューティングと問題追跡

    システム障害、データ損失、または異常な動作のトラブルシューティングを行う際、特定の期間内のオブジェクトをクエリすることで、問題のあるオブジェクトや操作記録を迅速に特定できます。

  • コラボレーションとバージョン管理

    複数ユーザーが協力する環境では、時間範囲内のオブジェクトをクエリすることで、過去のバージョンを閲覧したり、変更点を比較したり、データを特定の時点に復元したりできます。

操作手順

OSS コンソール

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

  2. 左側のナビゲーションウィンドウで、バケット をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  3. 左側メニューで、オブジェクト管理 > データのインデックス作成 を選択します。

  4. データのインデックス作成 ページで、メタデータ管理 スイッチをオンにします。

    メタデータ管理を有効にした後、有効化には時間がかかります。有効化にかかる時間は、バケット内のオブジェクト数によって異なります。

  5. [OSS メタデータ条件] セクションで、最終更新日時 の開始日と終了日を秒単位まで正確に設定します。他のパラメーターはデフォルト設定のままにします。

  6. オブジェクトのソート順 セクションで、昇順 を選択して、結果をオブジェクト名でソートします。

  7. クエリ をクリックします。

Alibaba Cloud SDK

OSS SDK for Java、OSS SDK for Python、および OSS SDK for Go は、データインデックスをサポートしており、指定された条件を満たすオブジェクトをクエリできます。この機能を使用する前に、対象のバケットでメタデータ管理を有効にする必要があります。

Java

package com.aliyun.sts.sample;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;

public class Demo {

    // この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際のエンドポイントに置き換えてください。
    private static String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // エンドポイントに対応するリージョンを指定します。たとえば、エンドポイントが oss-cn-hangzhou.aliyuncs.com の場合、リージョンを cn-hangzhou に設定します。
    private static String region = "cn-hangzhou";
    
    // バケット名を指定します。例: 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();
        // OSSClient インスタンスを作成します。
        // OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // V4 署名アルゴリズムが使用されることを明示的に宣言します。
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // 返されるオブジェクトの最大数を 100 に設定します。
            int maxResults = 100;
            // 2023年12月1日から2024年3月31日までの間に最終更新されたオブジェクトをクエリします。
            String query = "{\n" +
                    "  \"SubQueries\":[\n" +
                    "    {\n" +
                    "      \"Field\":\"FileModifiedTime\",\n" +
                    "      \"Value\": \"2023-12-01T00:00:00.000+08:00\",\n" +
                    "      \"Operation\":\"gt\"\n" +
                    "    },         \n" +
                    "    {\n" +
                    "      \"Field\":\"FileModifiedTime\",\n" +
                    "      \"Value\": \"2024-03-31T23:59:59.000+08:00\",\n" +
                    "      \"Operation\":\"lt\"\n" +
                    "    }\n" +
                    "  ],\n" +
                    "  \"Operation\":\"and\"\n" +
                    "}";
            // 結果をオブジェクト名で昇順にソートします。
            String sort = "Filename";
            DoMetaQueryRequest doMetaQueryRequest = new DoMetaQueryRequest(bucketName, maxResults, query, sort);
            doMetaQueryRequest.setOrder(SortOrder.ASC);
            DoMetaQueryResult doMetaQueryResult = ossClient.doMetaQuery(doMetaQueryRequest);

            if (doMetaQueryResult.getFiles() != null) {
                for (ObjectFile file : doMetaQueryResult.getFiles().getFile()) {
                    System.out.println("ファイル名: " + file.getFilename());
                    // オブジェクトの ETag を取得します。
                    System.out.println("ETag: " + file.getETag());
                    // オブジェクトのアクセスコントロールリスト (ACL) を取得します。
                    System.out.println("ObjectACL: " + file.getObjectACL());
                    // オブジェクトタイプを取得します。
                    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("キー: " + tag.getKey());
                            System.out.println("値: " + tag.getValue());
                        }
                    }
                    if (file.getOssUserMeta() != null) {
                        for (UserMeta meta : file.getOssUserMeta().getUserMeta()) {
                            System.out.println("キー: " + meta.getKey());
                            System.out.println("値: " + meta.getValue());
                        }
                    }
                }
            }
        } catch (OSSException oe) {
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエスト ID:" + oe.getRequestId());
            System.out.println("ホスト ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("エラーメッセージ: " + ce.getMessage());
        } finally {
            // OSSClient インスタンスをシャットダウンします。
            ossClient.shutdown();
        }
    }
}

Python

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import MetaQuery, AggregationsRequest
# 環境変数からアクセス認証情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())

# この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際のエンドポイントに置き換えてください。
# バケット名を指定します。例: examplebucket。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')

# 2023年12月1日から2024年3月31日までの間に最終更新されたオブジェクトをクエリし、結果をオブジェクト名で昇順にソートします。
do_meta_query_request = MetaQuery(max_results=100, query='{"SubQueries":[{"Field":"FileModifiedTime","Value": "2023-12-01T00:00:00.000+08:00","Operation":"gt"}, {"Field":"FileModifiedTime","Value": "2024-03-31T23:59:59.000+08:00","Operation":"lt"}],"Operation":"and"}', sort='Filename', order='asc')
result = bucket.do_bucket_meta_query(do_meta_query_request)

for s in result.files:
    print(s.file_name)
    print(s.etag)
    print(s.oss_object_type)
    print(s.oss_storage_class)
    print(s.oss_crc64)
    print(s.object_acl)

Go

package main

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("エラー:", err)
		os.Exit(-1)
	}

	// OSS クライアントインスタンスを作成します。
	// この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際のエンドポイントに置き換えてください。
	client, err := oss.New("oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		fmt.Println("エラー:", err)
		os.Exit(-1)
	}
	// 2023年12月1日から2024年3月31日までの間に最終更新されたオブジェクトをクエリします。
	query := oss.MetaQuery{
		NextToken:  "",
		MaxResults: 100,
		Query: `{
  "SubQueries":[
    {
      "Field":"FileModifiedTime",
      "Value": "2023-12-01T00:00:00.000+08:00",
      "Operation":"gt"
    },         
    {
      "Field":"FileModifiedTime",
      "Value": "2024-03-31T23:59:59.000+08:00",
      "Operation":"lt"
    }
  ],
  "Operation":"and"
}`,
                // 結果をオブジェクト名で昇順にソートします。
		Sort:  "Filename",
		Order: "asc",
	}
	// 指定された条件を満たすオブジェクトをクエリし、指定されたフィールドとソート順に基づいてオブジェクト情報をリスト表示します。
	result, err := client.DoMetaQuery("examplebucket", query)
	if err != nil {
		fmt.Println("エラー:", err)
		os.Exit(-1)
	}
	fmt.Printf("NextToken:%s\n", result.NextToken)
	for _, file := range result.Files {
		fmt.Printf("ファイル名: %s\n", file.Filename)
		fmt.Printf("サイズ: %d\n", file.Size)
		fmt.Printf("ファイル最終更新日時:%s\n", file.FileModifiedTime)
		fmt.Printf("OSS オブジェクトタイプ:%s\n", file.OssObjectType)
		fmt.Printf("OSS ストレージクラス:%s\n", file.OssStorageClass)
		fmt.Printf("オブジェクト ACL:%s\n", file.ObjectACL)
		fmt.Printf("ETag:%s\n", file.ETag)
		fmt.Printf("OSS CRC64:%s\n", file.OssCRC64)
		fmt.Printf("OSS タギング数:%d\n", file.OssTaggingCount)
		for _, tagging := range file.OssTagging {
			fmt.Printf("OSS タギングキー:%s\n", tagging.Key)
			fmt.Printf("OSS タギング値:%s\n", tagging.Value)
		}
		for _, userMeta := range file.OssUserMeta {
			fmt.Printf("OSS ユーザーメタキー:%s\n", userMeta.Key)
			fmt.Printf("値:%s\n", userMeta.Value)
		}
	}
}

REST API

アプリケーションに高度なカスタマイズが必要な場合は、REST API リクエストを直接行うことができます。そのためには、署名を計算するためのコードを手動で記述する必要があります。詳細については、「DoMetaQuery」をご参照ください。

関連ドキュメント

データインデックスは、ストレージクラス、読み書き権限、オブジェクトサイズなど、複数のフィルター条件をサポートしており、必要なデータを迅速に見つけるのに役立ちます。たとえば、公開読み取り権限を持つすべてのオブジェクトや、64 KB より小さいすべてのオブジェクトをクエリできます。詳細については、「データインデックス」をご参照ください。