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

Object Storage Service:最終変更時刻が特定の期間内であるOSSオブジェクトをフィルタリングする

最終更新日:May 11, 2024

最終変更時刻が特定の期間内であるObject Storage Service (OSS) オブジェクトを、バケット内の多数のオブジェクトからフィルタリングする場合は、データインデックス作成機能を使用できます。 データインデックス機能を使用すると、オブジェクトの最終変更時刻の開始日と終了日をインデックス条件として指定して、オブジェクトのクエリ効率を向上させることができます。 この機能は、監査証跡、データ同期、定期的なバックアップ、コスト分析、またはその他のビジネスシナリオで、時間に依存するオブジェクトを正確に取得するのに適しています。

シナリオ

  • 監査とコンプライアンスの要件

    企業または組織は、データが内部データ管理ポリシー、業界規制、または監督要件を満たしていることを確認するために、特定の期間内のデータ活動を定期的に確認する必要があります。 特定の期間内にアップロードされたオブジェクトのクエリは、データライフサイクルの管理、データの生成と変更履歴の追跡、およびデータの監査に役立ちます。

  • データのバックアップと復元

    バックアップポリシーを指定するとき、またはデータ復旧操作を実行するときは、特定の期間内にアップロードまたは更新されたオブジェクトにのみ集中する必要があります。 たとえば、増分バックアップを実行する場合、最後のバックアップ以降に新しくアップロードまたは変更されたオブジェクトのみをバックアップする必要があります。 特定の期間内にアップロードされたオブジェクトを照会することで、バックアップするオブジェクトを指定できます。これにより、ストレージ容量と伝送コストが削減されます。

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

    ビッグデータ分析、ログ処理、またはビジネスレポートを含むアプリケーションでは、特定の期間内に生成された新しいデータは、毎日、毎週、または毎月など、定期的に処理する必要があります。 特定の期間内に生成されたオブジェクトをクエリすることで、分析するデータセットをすばやく特定し、データ抽出プロセスを簡素化することができます。

  • コンテンツ管理システムによるデータ同期

    OSSがウェブサイトコンテンツ、メディアアセット、またはドキュメントライブラリを保存する場合、コンテンツ管理システムは、ウェブサイトコンテンツの適時性と整合性を維持するために、特定の期間内にアップロードまたは更新されたオブジェクトを定期的にキャプチャまたは同期する必要があります。

  • コストの最適化とリソースの削除

    ストレージコストを管理したり、データ保持ポリシーに準拠したりするために、企業は不要になったオブジェクトを定期的にレビューして削除する場合があります。 特定の期間内に更新されていないオブジェクトをクエリして一覧表示すると、保持する必要がなくなったオブジェクトを特定できます。 これにより、リソースの効率的な使用が保証される。

  • トラブルシューティングと問題のトレース

    技術エンジニアがシステム障害、データ損失、または異常な動作をトラブルシューティングする場合、特定の期間にわたるデータ変更をバックトラックする必要があります。 この期間内にアップロードされたオブジェクトをクエリすると、問題の原因となるオブジェクトのバージョンや操作をすばやく見つけることができます。

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

    マルチユーザーコラボレーション環境では、チームメンバーは、特定の期間内に他のメンバーによってアップロードされたオブジェクトバージョンを表示または復元する必要があります。 特定の期間内にアップロードされたオブジェクトを照会すると、特定の時点に履歴バージョンを参照、比較、または復元することができます。

メソッド

OSSコンソールの使用

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

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

  3. 左側のナビゲーションツリーで、ファイル > データのインデックス作成.

  4. On theデータのインデックス作成ページ、オンにするメタデータ管理.

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

  5. 基本フィルタリング条件 セクションで、最終変更日時の右側に開始日と終了日を指定します。 開始日と終了日の値は秒単位で正確です。 他のパラメーターのデフォルト設定を保持します。

  6. オブジェクトのソート順 セクションで、ソート順序を [オブジェクト名] に設定します。

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

OSS SDKの使用

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

Java

パッケージcom.aliyun.sts.sample;

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;

public classデモ {

    // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
    プライベート静的文字列エンドポイント="https://oss-cn-hangzhou.aliyuncs.com";
    // バケットの名前を指定します。 例: examplebucket. 
    プライベート静的文字列bucketName = "examplebucket";

    public static void main(String[] args) throws Exception {
        // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // 100に戻すオブジェクトの最大数を設定します。 
            int maxResults = 100;
            // クエリするオブジェクトの最終変更時刻の開始日と終了日を指定します。 この例では、開始日は2023年12月1日に設定され、終了日は2024年3月31日に設定されています。 
            文字列クエリ="{\n" +
                    " \" SubQueries\":[\n" +
                    " {\n" +
                    " \" フィールド \":\" FileModifiedTime\",\n" +
                    " \" 値 \": \" 2023-12-01T00:00:00.000 + 08:00\",\n" +
                    " \" 操作 \":\" gt\"\n" +
                    " }, \n" +
                    " {\n" +
                    " \" フィールド \":\" FileModifiedTime\",\n" +
                    " \" 値 \": \" 2024-03-31T23:59:59.000 + 08:00\",\n" +
                    " \" 操作 \":\" lt\"\n" +
                    " }\n" +
                    " ],\n" +
                    " \" 操作 \":\" および \"\n" +
                    "}";
            // 返された結果をオブジェクト名で昇順にソートするように指定します。 
            String sort = "Filename";
            DoMetaQueryRequest doMetaQueryRequest=新しいDoMetaQueryRequest(bucketName、maxResults、query、sort);
            doMetaQueryRequest.setOrder(SortOrder.ASC);
            DoMetaQueryResult doMetaQueryResult = ossClient.doMetaQuery(doMetaQueryRequest);

            if (doMetaQueryResult.getFiles() != null) {
                for (ObjectFileファイル: doMetaQueryResult.getFiles().getFile()) {
                    System.out.println("Filename: " + 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 (タグ: 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 (Exception e) {
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Error Message: " + ce.getMessage());
        } 最後に{
            // Shut down the OSSClient instance. 
            ossClient.shutdown();
        }
    }
}

Python

# -*-コーディング: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
oss2.modelsから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 ', 'examplebucket0703')

# クエリするオブジェクトの最終変更時刻の開始日と終了日を指定します。 この例では、開始日は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: "Operation": "gt"}, {"Field": "FileModifiedTime": "+ 3100","-59.000" "lt"}],"Operation": "and"}', sort='Filename', order='asc')
result = bucket.do_bucket_meta_query(do_meta_query_request)

result.filesのsのために:
    プリント (s.file_name)
    プリント (s.etag)
    print(s.oss_object_type)
    print(s.oss_storage_class)
    プリント (s.oss_crc64)
    プリント (s.object_acl) 

Go

パッケージメイン

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)
}

// OSSClientインスタンスを作成します。 
	// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
	client, err := oss.New("oss-cn-hangzhou.aliyuncs.com", ", ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// クエリするオブジェクトの最終変更時刻の開始日と終了日を指定します。 この例では、開始日は2023年12月1日に設定され、終了日は2024年3月31日に設定されています。 
	query := oss.MetaQuery {
NextToken: "" 、MaxResults: 100、クエリ: '{
  "SubQueries":[
    {
      "フィールド":"FileModifiedTime" 、
      "値": "2023-12-01T00:00:00.000 + 08:00" 、
      "操作":"gt"
    },         
    {
      "フィールド":"FileModifiedTime" 、
      "値": "2024-03-31T23:59:59.000 + 08:00" 、
      "操作":"lt"
    }
  ],
  "操作":"と"
} ',
                // 返された結果をオブジェクト名で昇順にソートするように指定します。 
		並べ替え: "Filename" 、注文: "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)
}
}
}

OSS APIの使用

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

参考資料

データインデックス機能は、ストレージクラス、ACL、オブジェクトサイズなどの複数のフィルタリング条件をサポートします。 バケット内の多数のオブジェクトから特定の条件を満たすオブジェクトをフィルタリングできます。 たとえば、ACLがパブリック読み取りであるオブジェクト、またはバケット内のサイズが64 KB未満のオブジェクトをクエリする場合は、データインデックス機能を使用して、ビジネス要件に基づいてフィルタリング条件を指定します。 詳細については、「データインデックス作成」をご参照ください。