数据索引是OSS对外提供的文件(Object)元数据索引能力,您可以为指定存储空间(Bucket)开启元数据管理功能。开启后,OSS会为Bucket创建元数据索引库并为Bucket中的所有Object建立元数据索引。元数据索引库创建完成后,OSS会继续对Bucket中新增文件进行准实时的增量追踪扫描并为增量文件建立元数据索引。

重要 2.16.0及以上版本支持使用数据索引功能。

注意事项

  • 本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见访问域名和数据中心
  • 本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见Python初始化

开启元数据管理功能

以下代码用于为指定Bucket开启元数据管理功能。

# -*- coding: utf-8 -*-
import oss2

# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')

# Endpoint以杭州为例,其它Region请按实际情况填写。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')

# 开启元数据管理功能。
bucket.open_bucket_meta_query()

获取元数据索引库信息

以下代码用于获取指定Bucket的元数据索引库信息。

# -*- coding: utf-8 -*-
import oss2

# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')

# Endpoint以杭州为例,其它Region请按实际情况填写。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')

# 获取指定Bucket的元数据索引库信息。
get_result = bucket.get_bucket_meta_query_status()

# 打印状态。
print(get_result.state)

查询满足指定条件的Object

以下代码用于查询满足指定条件Object,并按照指定字段和排序方式列出Object信息。

# -*- coding: utf-8 -*-
import oss2
from oss2.models import MetaQuery, AggregationsRequest
# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')

# Endpoint以杭州为例,其它Region请按实际情况填写。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')

# 查询满足指定条件的Object,并按照指定字段和排序方式列举Object信息。
# 指定查询小于1 MB的文件,且最多返回十个结果,返回结果按升序排列。
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)

# 打印Object名称。
print(result.files[0].file_name)
# 打印Object对应的ETag。
print(result.files[0].etag)
# 打印Object类型。
print(result.files[0].oss_object_type)
# 打印Object存储类型。
print(result.files[0].oss_storage_class)
# 打印Object的64位CRC值。
print(result.files[0].oss_crc64)
# 打印Object的访问权限。
print(result.files[0].object_acl)

关闭元数据管理功能

以下代码用于关闭指定Bucket的元数据索引功能。

# -*- coding: utf-8 -*-
import oss2
# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')

# Endpoint以杭州为例,其它Region请按实际情况填写。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')

# 关闭指定Bucket的元数据管理功能。
bucket.close_bucket_meta_query()

相关文档

  • 关于开启元数据管理功能的API接口说明,请参见OpenMetaQuery
  • 关于获取元数据索引库信息的API接口说明,请参见GetMetaQueryStatus
  • 关于查询满足指定条件的Object,并按照指定字段和排序方式列出Object信息的API接口说明,请参见DoMetaQuery
  • 关于关闭元数据管理功能的API接口说明,请参见CloseMetaQuery