スカラー検索は、オブジェクトのメタデータに基づく OSS が提供するインデックス機能です。カスタム条件を指定して、オブジェクトリストを迅速にフィルターおよび取得できます。これにより、データ構造の管理と理解が向上し、その後のクエリ、統計分析、オブジェクト管理が容易になります。
使用上の注意
このトピックのサンプルコードでは、中国 (杭州) リージョンのリージョン ID
cn-hangzhouを例として使用しています。デフォルトでは、パブリックエンドポイントが使用されます。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用する必要があります。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
サンプルコード
メタデータ管理機能を有効にする
次のサンプルコードは、指定されたバケットのメタデータ管理機能を有効にする方法を示しています。バケットに対してこの機能を有効にすると、OSS はバケットのメタデータインデックスライブラリを作成し、その中のすべてのオブジェクトのメタデータをインデックス化します。メタデータインデックスライブラリが作成された後、OSS はバケット内の新しいファイルに対してニアリアルタイムの増分スキャンを実行し、これらのファイルのメタデータインデックスを作成します。
import argparse
import alibabacloud_oss_v2 as oss
# コマンドラインパラメーターパーサーを作成し、説明を追加します。
parser = argparse.ArgumentParser(description="open meta query sample")
# 必須の --region コマンドラインパラメーターを追加します。これは、バケットが配置されているリージョンを指定します。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# 必須の --bucket コマンドラインパラメーターを追加します。これは、操作するバケットの名前を指定します。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# オプションの --endpoint コマンドラインパラメーターを追加します。これは、OSS にアクセスするときに使用するドメイン名を指定します。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
def main():
# コマンドライン引数を解析します。
args = parser.parse_args()
# 環境変数から認証情報を読み込みます。
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# SDK が提供するデフォルト設定を使用します。
cfg = oss.config.load_default()
# 認証情報プロバイダーを設定します。
cfg.credentials_provider = credentials_provider
# コマンドライン引数に基づいてリージョンを設定します。
cfg.region = args.region
# エンドポイントが指定されている場合は、設定のエンドポイントを更新します。
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# OSS クライアントを作成します。
client = oss.Client(cfg)
# メタクエリを有効にするリクエストを開始します。
result = client.open_meta_query(oss.OpenMetaQueryRequest(
bucket=args.bucket,
))
# リクエストのステータスコードとリクエスト ID を出力します。
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
)
# メインプログラムとして実行されたときに main 関数を呼び出します。
if __name__ == "__main__":
main()
メタデータインデックスライブラリ情報の取得
次のサンプルコードは、指定されたバケットのメタデータインデックスライブラリに関する情報を取得する方法を示しています。
import argparse
import alibabacloud_oss_v2 as oss
# コマンドラインパラメーターパーサーを作成し、必要なパラメーターを追加します。
parser = argparse.ArgumentParser(description="get meta query status sample")
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
def main():
# コマンドライン引数を解析します。
args = parser.parse_args()
# 環境変数から認証情報を読み込みます。
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# SDK のデフォルト設定を使用します。
cfg = oss.config.load_default()
# 認証情報プロバイダーを環境変数から取得したものに設定します。
cfg.credentials_provider = credentials_provider
# OSS サービスが配置されているリージョンを設定します。
cfg.region = args.region
# エンドポイントが指定されている場合は、カスタムエンドポイントを設定します。
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# OSS クライアントを作成します。
client = oss.Client(cfg)
# get_meta_query_status メソッドを呼び出して、指定されたバケットのメタデータクエリステータスを取得します。
result = client.get_meta_query_status(oss.GetMetaQueryStatusRequest(
bucket=args.bucket,
))
# 結果から、ステータスコード、リクエスト ID、作成時間、更新時間、状態、フェーズなどの関連情報を出力します。
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
f' create time: {result.meta_query_status.create_time},'
f' update time: {result.meta_query_status.update_time},'
f' state: {result.meta_query_status.state},'
f' phase: {result.meta_query_status.phase},'
)
# スクリプトが直接実行されたときに main 関数を呼び出します。
if __name__ == "__main__":
main()
指定された条件を満たすオブジェクトのクエリ
次のサンプルコードは、スカラー検索機能を使用して指定された条件を満たすオブジェクトをクエリし、指定されたフィールドとソート方法に基づいてオブジェクト情報をリストする方法を示しています。
import argparse
import alibabacloud_oss_v2 as oss
# ユーザー入力パラメーターを受け入れるためのコマンドラインパラメーターパーサーを作成します。
parser = argparse.ArgumentParser(description="do meta query sample")
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
def main():
# コマンドライン引数を解析します。
args = parser.parse_args()
# 環境変数から認証情報を読み込みます。
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# SDK のデフォルト設定を使用します。
cfg = oss.config.load_default()
# 認証プロバイダーを設定します。
cfg.credentials_provider = credentials_provider
# 入力パラメーターに基づいてリージョンを設定します。
cfg.region = args.region
# エンドポイントが指定されている場合は、設定のエンドポイントを更新します。
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# OSS クライアントを作成します。
client = oss.Client(cfg)
# メタクエリ操作を実行します。
result = client.do_meta_query(oss.DoMetaQueryRequest(
bucket=args.bucket, # クエリするバケットを指定します。
meta_query=oss.MetaQuery( # クエリの具体的な内容を定義します。
aggregations=oss.MetaQueryAggregations( # 集約操作を定義します。
aggregations=[ # 集約リスト。
oss.MetaQueryAggregation( # 最初の集約: 合計サイズを計算します。
field='Size',
operation='sum',
),
oss.MetaQueryAggregation( # 2 番目の集約: 最大値を見つけます。
field='Size',
operation='max',
)
],
),
next_token='', # ページネーションのトークン。
max_results=80369, # 返される結果の最大数。
query='{"Field": "Size","Value": "1048576","Operation": "gt"}', # クエリ条件。
sort='Size', # ソートフィールド。
order=oss.MetaQueryOrderType.DESC, # ソート順。
),
))
# クエリ結果の基本情報を出力します。
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
# 以下のコメントアウトされたセクションは、必要に応じて有効にして、より詳細な情報を取得できます。
# f' files: {result.files},'
# f' file: {result.files.file},'
# f' file modified time: {result.files.file.file_modified_time},'
# f' etag: {result.files.file.etag},'
# f' server side encryption: {result.files.file.server_side_encryption},'
# f' oss tagging count: {result.files.file.oss_tagging_count},'
# f' oss tagging: {result.files.file.oss_tagging},'
# f' key: {result.files.file.oss_tagging.taggings[0].key},'
# f' value: {result.files.file.oss_tagging.taggings[0].value},'
# f' key: {result.files.file.oss_tagging.taggings[1].key},'
# f' value: {result.files.file.oss_tagging.taggings[1].value},'
# f' oss user meta: {result.files.file.oss_user_meta},'
# f' key: {result.files.file.oss_user_meta.user_metas[0].key},'
# f' value: {result.files.file.oss_user_meta.user_metas[0].value},'
# f' key: {result.files.file.oss_user_meta.user_metas[1].key},'
# f' value: {result.files.file.oss_user_meta.user_metas[1].value},'
# f' filename: {result.files.file.filename},'
# f' size: {result.files.file.size},'
# f' oss object type: {result.files.file.oss_object_type},'
# f' oss storage class: {result.files.file.oss_storage_class},'
# f' object acl: {result.files.file.object_acl},'
# f' oss crc64: {result.files.file.oss_crc64},'
# f' server side encryption customer algorithm: {result.files.file.server_side_encryption_customer_algorithm},'
# f' aggregations: {result.aggregations},'
f' field: {result.aggregations.aggregations[0].field},'
f' operation: {result.aggregations.aggregations[0].operation},'
f' field: {result.aggregations.aggregations[1].field},'
f' operation: {result.aggregations.aggregations[1].operation},'
f' next token: {result.next_token},'
)
# ファイル情報が存在する場合は、タグとユーザー定義のメタデータを出力します。
if result.files:
if result.files.file.oss_tagging.taggings:
for r in result.files.file.oss_tagging.taggings:
print(f'result: key: {r.key}, value: {r.value}')
if result.files.file.oss_user_meta.user_metas:
for r in result.files.file.oss_user_meta.user_metas:
print(f'result: key: {r.key}, value: {r.value}')
# すべての集約の結果を出力します。
if result.aggregations.aggregations:
for r in result.aggregations.aggregations:
print(f'result: field: {r.field}, operation: {r.operation}')
if __name__ == "__main__":
main()
メタデータ管理機能を無効にする
次のサンプルコードは、指定されたバケットのメタデータ管理機能を無効にする方法を示しています。
import argparse
import alibabacloud_oss_v2 as oss
# コマンドライン引数を処理するための ArgumentParser オブジェクトを作成します。
parser = argparse.ArgumentParser(description="close meta query sample")
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
def main():
# コマンドライン引数を解析します。
args = parser.parse_args()
# 環境変数から認証情報を読み込みます。
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# SDK のデフォルト設定を使用します。
cfg = oss.config.load_default()
# 認証情報プロバイダーを環境変数から取得したものに設定します。
cfg.credentials_provider = credentials_provider
# 設定にリージョン情報を設定します。
cfg.region = args.region
# エンドポイントが指定されている場合は、設定でエンドポイントを設定します。
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# OSS クライアントを作成します。
client = oss.Client(cfg)
# close_meta_query メソッドを呼び出して、指定されたバケットのメタクエリ機能を無効にします。
result = client.close_meta_query(oss.CloseMetaQueryRequest(
bucket=args.bucket,
))
# 応答のステータスコードとリクエスト ID を出力します。
print(f'status code: {result.status_code}, request id: {result.request_id}')
# このスクリプトが直接実行されたときに main 関数を呼び出します。
if __name__ == "__main__":
main()
関連情報
メタデータ管理機能を有効にするための完全なサンプルコードについては、「open_meta_query.py」をご参照ください。
メタデータインデックスライブラリ情報を取得するための完全なサンプルコードについては、「get_meta_query_status.py」をご参照ください。
指定された条件を満たすオブジェクトをクエリし、指定されたフィールドとソート方法でオブジェクト情報をリストするための完全なサンプルコードについては、「do_meta_query.py」をご参照ください。
メタデータ管理機能を無効にするための完全なサンプルコードについては、「close_meta_query.py」をご参照ください。