All Products
Search
Document Center

:Filter objek OSS berdasarkan rentang waktu

Last Updated:May 15, 2026

Untuk memfilter objek dalam bucket Object Storage Service (OSS) berdasarkan rentang waktu tertentu, Anda dapat menggunakan fitur pengindeksan data. Dengan menetapkan tanggal mulai dan akhir berdasarkan waktu modifikasi terakhir objek, efisiensi kueri meningkat. Fitur ini berguna dalam skenario yang memerlukan pengambilan file sensitif waktu secara tepat, seperti pelacakan audit, sinkronisasi data, cadangan berkala, dan analisis biaya.

Use cases

  • Audit dan pemeriksaan kepatuhan

    Perusahaan dan organisasi harus secara berkala meninjau aktivitas data untuk memastikan kepatuhan. Mengkueri objek yang diunggah dalam rentang waktu tertentu membantu mengelola siklus hidup data, melacak riwayat pembuatan dan modifikasi data, serta mendukung proses audit data.

  • Pencadangan dan pemulihan data

    Saat melakukan operasi pencadangan atau pemulihan berdasarkan kebijakan yang ditentukan, mengkueri objek baru atau yang diperbarui dalam rentang waktu tertentu membantu mengidentifikasi target pencadangan yang tepat, sehingga menghemat storage space dan biaya transfer data.

  • Analisis dan pelaporan data

    Untuk aplikasi yang melibatkan analitik data besar, pemrosesan log, atau pelaporan bisnis, Anda sering perlu memproses data baru yang dihasilkan dalam periode tertentu, seperti harian, mingguan, atau bulanan. Mengkueri objek dalam rentang waktu tertentu membantu Anda dengan cepat menemukan set data untuk analisis dan menyederhanakan ekstraksi data.

  • Sinkronisasi sistem manajemen konten

    Sistem manajemen konten harus secara rutin menyinkronkan objek baru atau yang diperbarui agar konten website tetap mutakhir dan lengkap.

  • Optimalisasi biaya dan pembersihan resource

    Perusahaan harus secara berkala membersihkan objek usang. Mengkueri objek yang tidak diperbarui dalam jangka waktu tertentu membantu mengidentifikasi objek yang harus dihapus, sehingga memastikan pemanfaatan resource yang efisien.

  • Pemecahan masalah dan pelacakan isu

    Saat memecahkan masalah kegagalan sistem, kehilangan data, atau perilaku abnormal, mengkueri objek dalam periode waktu tertentu membantu Anda dengan cepat menemukan objek bermasalah atau catatan operasi.

  • Kolaborasi dan kontrol versi

    Dalam lingkungan kolaborasi multi-pengguna, mengkueri objek dalam rentang waktu memungkinkan Anda menelusuri versi historis, membandingkan perubahan, atau memulihkan data ke titik waktu tertentu.

Procedure

OSS console

  1. Masuk ke OSS console.

  2. Di panel navigasi sebelah kiri, klik Buckets. Pada halaman yang muncul, klik nama bucket target.

  3. Di panel navigasi sebelah kiri, pilih Object Management > Data Indexing.

  4. Pada halaman Data Indexing, aktifkan sakelar Metadata Management.

    Setelah Anda mengaktifkan Metadata Management, proses aktivasi memerlukan waktu. Durasi aktivasi tergantung pada jumlah objek dalam bucket.

  5. Pada bagian OSS metadata condition, tetapkan tanggal mulai dan akhir untuk Last Modified At (akurat hingga detik). Pertahankan pengaturan default untuk parameter lainnya.

  6. Pada bagian Object Sort Order, pilih Ascending untuk mengurutkan hasil berdasarkan nama objek.

  7. Klik Query.

Alibaba Cloud SDK

OSS SDK for Java, OSS SDK for Python, dan OSS SDK for Go mendukung pengindeksan data untuk mengkueri objek yang memenuhi kondisi tertentu. Anda harus mengaktifkan Metadata Management untuk bucket target sebelum menggunakan fitur ini.

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 {

    // Contoh ini menggunakan endpoint wilayah China (Hangzhou). Ganti nilai ini dengan endpoint aktual Anda.
    private static String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // Tentukan wilayah yang sesuai dengan endpoint Anda. Misalnya, jika endpoint Anda adalah oss-cn-hangzhou.aliyuncs.com, atur wilayah menjadi cn-hangzhou.
    private static String region = "cn-hangzhou";
    
    // Tentukan nama bucket. Contoh: examplebucket.
    private static String bucketName = "examplebucket";

    public static void main(String[] args) throws Exception {
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan Anda telah mengonfigurasi variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Buat instans OSSClient.
        // Panggil metode shutdown untuk melepas resource saat instans OSSClient tidak lagi diperlukan.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // Secara eksplisit nyatakan bahwa algoritma signature V4 digunakan.
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Tetapkan jumlah maksimum objek yang dikembalikan menjadi 100.
            int maxResults = 100;
            // Kueri objek yang terakhir dimodifikasi antara 1 Desember 2023 dan 31 Maret 2024.
            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" +
                    "}";
            // Urutkan hasil berdasarkan nama objek secara ascending.
            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("Filename: " + file.getFilename());
                    // Dapatkan ETag objek.
                    System.out.println("ETag: " + file.getETag());
                    // Dapatkan daftar kontrol akses (ACL) objek.
                    System.out.println("ObjectACL: " + file.getObjectACL());
                    // Dapatkan tipe objek.
                    System.out.println("OssObjectType: " + file.getOssObjectType());
                    // Dapatkan kelas penyimpanan objek.
                    System.out.println("OssStorageClass: " + file.getOssStorageClass());
                    // Dapatkan jumlah tag objek.
                    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());
                        }
                    }
                }
            }
        } 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 {
            // Matikan instans OSSClient.
            ossClient.shutdown();
        }
    }
}

Python

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import MetaQuery, AggregationsRequest
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan Anda telah mengonfigurasi variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())

# Contoh ini menggunakan endpoint wilayah China (Hangzhou). Ganti nilai ini dengan endpoint aktual Anda.
# Tentukan nama bucket. Contoh: examplebucket.
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'examplebucket0703')

# Kueri objek yang terakhir dimodifikasi antara 1 Desember 2023 dan 31 Maret 2024, dan urutkan hasil berdasarkan nama objek secara ascending.
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() {
	// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan Anda telah mengonfigurasi variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Buat instans OSSClient.
	// Contoh ini menggunakan endpoint untuk wilayah China (Hangzhou). Ganti nilai ini dengan endpoint aktual Anda.
	client, err := oss.New("oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Kueri objek yang terakhir dimodifikasi antara 1 Desember 2023 dan 31 Maret 2024.
	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"
}`,
                // Urutkan hasil berdasarkan nama objek secara ascending.
		Sort:  "Filename",
		Order: "asc",
	}
	// Kueri objek yang memenuhi kondisi tertentu dan tampilkan informasi objek berdasarkan bidang dan urutan pengurutan yang ditentukan.
	result, err := client.DoMetaQuery("examplebucket", query)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	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)
		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)
		}
	}
}

REST API

Jika aplikasi Anda memerlukan tingkat kustomisasi yang tinggi, Anda dapat langsung membuat permintaan REST API. Hal ini mengharuskan Anda menulis kode secara manual untuk menghitung signature. Untuk informasi selengkapnya, lihat DoMetaQuery.

References

Pengindeksan data mendukung berbagai kondisi filter, seperti kelas penyimpanan, izin baca/tulis, dan ukuran objek, untuk membantu Anda dengan cepat menemukan data yang dibutuhkan. Misalnya, Anda dapat mengkueri semua objek dengan izin public-read atau semua objek yang lebih kecil dari 64 KB. Untuk informasi selengkapnya, lihat Data indexing.