データインデックス機能を使用すると、バケット内の特定の条件に一致するオブジェクトを迅速に見つけることができます。これらの条件には、オブジェクト名、ETag、ストレージクラス、サイズ、最終更新日時などが含まれます。データインデックス機能では、オブジェクトを検索する際にフィルター条件を指定できます。また、必要に応じてクエリ結果をソートしたり集計したりすることもできます。これにより、目的のオブジェクトを見つける効率が向上します。
注意事項
データインデックス機能は、Python SDK V2.16.0 以降でのみサポートされています。
データインデックス機能は、中国 (杭州) リージョンのバケットでのみサポートされています。 詳細については、「データインデックス」をご参照ください。
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報の設定方法の詳細については、「OSS SDK for Python 1.0 を使用したアクセス認証情報の設定」をご参照ください。
このトピックでは、OSSClient インスタンスは OSS エンドポイントを使用して作成されます。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化」をご参照ください。
データインデックスの有効化
次のコードは、バケットのデータインデックスを有効にする方法を示しています。この機能を有効にすると、OSS はバケットのメタデータインデックスを作成し、その中のすべてのオブジェクトのメタデータインデックスを構築します。インデックスが作成された後、OSS はバケット内の新しいファイルに対してほぼリアルタイムの増分スキャンを実行し、それらのメタデータインデックスを構築します。
# -*- 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-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン (cn-hangzhou など) を設定します。注意:このパラメーターは V4 署名に必要です。
region = "cn-hangzhou"
# examplebucket を実際のバケット名に置き換えます。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# データインデックスを有効にします。
bucket.open_bucket_meta_query()データインデックスステータスの取得
次のコードは、特定のバケットのデータインデックスのステータスを取得する方法を示しています。
# -*- 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-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン (cn-hangzhou など) を設定します。注意:このパラメーターは V4 署名に必要です。
region = "cn-hangzhou"
# examplebucket を実際のバケット名に置き換えます。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# 指定されたバケットのデータインデックスステータスを取得します。
get_result = bucket.get_bucket_meta_query_status()
# ステータスを出力します。
print(get_result.state)特定条件を満たすオブジェクトのクエリ
次のコードは、特定の条件を満たすオブジェクトをクエリし、指定されたフィールドとソート順に基づいてオブジェクト情報をリスト表示する方法を示しています。
# -*- 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.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンに対応するエンドポイントを設定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン (cn-hangzhou など) を設定します。注意:このパラメーターは V4 署名に必要です。
region = "cn-hangzhou"
# examplebucket を実際のバケット名に置き換えます。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# 特定の条件を満たすオブジェクトをクエリし、指定されたフィールドとソート順に基づいてオブジェクト情報をリスト表示します。
# 1 MB 未満のファイルをクエリし、最大 10 件の結果を返し、結果を昇順でソートします。
do_meta_query_request = MetaQuery(max_results=10, query='{"Field": "Size","Value": "1048576","Operation": "lt"}', sort='Size', order='asc')
result = bucket.do_bucket_meta_query(do_meta_query_request)
# オブジェクト名を出力します。
print(result.files[0].file_name)
# オブジェクトの ETag を出力します。
print(result.files[0].etag)
# オブジェクトタイプを出力します。
print(result.files[0].oss_object_type)
# オブジェクトのストレージクラスを出力します。
print(result.files[0].oss_storage_class)
# オブジェクトの 64 ビット CRC 値を出力します。
print(result.files[0].oss_crc64)
# オブジェクトのアクセス権限を出力します。
print(result.files[0].object_acl)データインデックス機能の無効化
次のコードは、特定のバケットのデータインデックス機能を無効にする方法を示しています。
# -*- 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-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン (cn-hangzhou など) を設定します。注意:このパラメーターは V4 署名に必要です。
region = "cn-hangzhou"
# examplebucket を実際のバケット名に置き換えます。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# 指定されたバケットのデータインデックス機能を無効にします。
bucket.close_bucket_meta_query()関連ドキュメント
データインデックスを有効にする API 操作の詳細については、「OpenMetaQuery」をご参照ください。
データインデックスのステータスを取得する API 操作の詳細については、「GetMetaQueryStatus」をご参照ください。
特定の条件を満たすオブジェクトをクエリし、指定されたフィールドとソート順に基づいてオブジェクト情報をリスト表示する API 操作の詳細については、「DoMetaQuery」をご参照ください。
データインデックスを無効にする API 操作の詳細については、「CloseMetaQuery」をご参照ください。