调用DoMetaQuery接口查询满足指定条件的文件(Object),并按照指定字段和排序方式列出文件信息。您也可以通过Query的嵌套使用实现复杂查询,以及通过聚合操作实现对不同字段的值进行统计和分析。
注意事项
要查询满足指定条件的文件,您必须有oss:DoMetaQuery
权限。具体操作,请参见为RAM用户授权自定义的权限策略。
请求语法
POST /?metaQuery&comp=query HTTP/1.1
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
<?xml version="1.0" encoding="UTF-8"?>
<MetaQuery>
<NextToken></NextToken>
<MaxResults>5</MaxResults>
<Query>{"Field": "Size","Value": "1048576","Operation": "gt"}</Query>
<Sort>Size</Sort>
<Order>asc</Order>
<Aggregations>
<Aggregation>
<Field>Size</Field>
<Operation>sum</Operation>
</Aggregation>
<Aggregation>
<Field>Size</Field>
<Operation>max</Operation>
</Aggregation>
</Aggregations>
</MetaQuery>
请求头
此接口仅涉及公共请求头。更多信息,请参见公共请求头(Common Request Headers)。
请求元素
名称 | 类型 | 是否必选 | 示例值 | 描述 |
---|---|---|---|---|
MetaQuery | 容器 | 是 | 不涉及 | 查询条件的容器。 子节点:NextToken、MaxResults、Query、Sort、Order、Aggregations |
NextToken | 字符串 | 否 | MTIzNDU2Nzg6aW1tdGVzdDpleGFtcGxlYnVja2V0OmRhdGFzZXQwMDE6b3NzOi8vZXhhbXBsZWJ1Y2tldC9zYW1wbGVvYmplY3QxLmpw**** | 当Object总数大于设置的MaxResults时,用于翻页的token。 从NextToken开始按字典序返回Object信息列表。 第一次调用此接口时,设置此字段为空。 父节点:MetaQuery |
MaxResults | 整型 | 否 | 5 | 返回Object的最大个数,取值范围为0~100。 不设置此参数或者设置为0时,则默认值为100。 父节点:MetaQuery |
Query | 字符串 | 是 | {"Field": "Size","Value": "1048576","Operation": "gt"} | 查询条件。包括如下选项:
关于Query示例的更多信息,请参见Query示例。 父节点:MetaQuery |
Sort | 字符串 | 否 | Size | 对指定字段排序。关于支持排序的字段列表,请参见附录:字段和操作符的支持列表。 父节点:MetaQuery |
Order | 字符串 | 否 | asc | 排序方式。取值范围如下:
父节点:MetaQuery |
Aggregations | 容器 | 否 | 不涉及 | 聚合操作信息的容器。 子节点:Aggregation 父节点:MetaQuery |
Aggregation | 容器 | 否 | 不涉及 | 单个聚合操作信息的容器。 子节点:Field、Operation 父节点:Aggregations |
Field | 字符串 | 否 | Size | 字段名称。关于支持的字段以及字段对操作符的支持情况,请参见附录:字段和操作符的支持列表。 父节点:Aggregation |
Operation | 字符串 | 否 | sum | 聚合操作中的操作符。取值范围如下:
父节点:Aggregation |
响应头
此接口仅涉及公共响应头。更多信息,请参见公共响应头(Common Response Headers)。
响应元素
名称 | 类型 | 示例值 | 描述 |
---|---|---|---|
MetaQuery | 容器 | 不涉及 | 查询结果的容器。 子节点:NextToken、Files、Aggregations |
NextToken | 字符串 | MTIzNDU2Nzg6aW1tdGVzdDpleGFtcGxlYnVja2V0OmRhdGFzZXQwMDE6b3NzOi8vZXhhbXBsZWJ1Y2tldC9zYW1wbGVvYmplY3QxLmpw**** | 当Object总数大于设置的MaxResults时,用于翻页的token。 下一次列出Object信息时以此值为NextToken,将未返回的结果返回。 当Object未全部返回时,此参数才有值。 父节点:MetaQuery |
Files | 容器 | 不涉及 | Object信息的容器。 子节点:File 父节点:MetaQuery |
File | 容器 | 不涉及 | 单个Object信息的容器。 子节点:Filename、Size、FileModifiedTime、OSSObjectType、OSSStorageClass、ObjectACL、ETag、OSSTaggingCount、OSSTagging、OSSUserMeta、OSSCRC64、ServerSideEncryption 父节点:Files |
Filename | 字符串 | exampleobject.txt | Object完整路径。 父节点:File |
Size | 整型 | 120 | Object大小。单位为字节。 父节点:File |
FileModifiedTime | 字符串 | 2021-06-29T15:04:05.000000000Z07:00 | Object的最近一次修改时间,遵循RFC 3339标准格式。 父节点:File |
OSSObjectType | 字符串 | Normal | Object的类型。取值范围如下:
父节点:File |
OSSStorageClass | 字符串 | Standard | Object的存储类型。取值范围如下:
父节点:File |
ObjectACL | 字符串 | default | Object的访问权限。取值范围如下:
父节点:File |
ETag | 字符串 | "fba9dede5f27731c9771645a3986****" | Object生成时会创建相应的ETag ,ETag用于标识一个Object的内容。
说明 ETag值可以用于检查Object内容是否发生变化。不建议使用ETag作为Object内容的MD5来校验数据完整性。 父节点:File |
OSSTaggingCount | 整型 | 2 | Object的标签个数。 父节点:File |
OSSTagging | 容器 | 不涉及 | 标签信息的容器。 子节点:Tagging 父节点:File |
Tagging | 容器 | 不涉及 | 单个标签信息的容器。 子节点:Key、Value 父节点:OSSTagging |
Key | 字符串 | owner | 标签或者用户自定义元数据的Key。 用户自定义元数据必须以 父节点:Tagging、UserMeta |
Value | 字符串 | John | 标签或者用户自定义元数据的Value。 父节点:Tagging、UserMeta |
OSSUserMeta | 容器 | 不涉及 | 用户自定义元数据的容器。 子节点:UserMeta 父节点:File |
UserMeta | 容器 | 不涉及 | 单个用户自定义元数据的容器。 子节点:Key、Value 父节点:OSSUserMeta |
OSSCRC64 | 字符串 | 4858A48BD1466884 | Object的64位CRC值。该64位CRC根据ECMA-182标准计算得出。 |
ServerSideEncryption | 字符串 | AES256 | OSS创建文件时的服务器端加密编码算法。取值范围为AES256。 父节点:File |
ServerSideEncryptionCustomerAlgorithm | 字符串 | SM4 | 用户在本地客户端加密文件时使用的加密编码算法。 父节点:File |
Aggregations | 容器 | 不涉及 | 聚合操作信息的容器。 子节点:Field、Operation、Operation、Value、Groups 父节点:MetaQuery |
Field | 字符串 | Size | 字段名称。 父节点:Aggregations |
Operation | 字符串 | sum | 聚合操作符。 父节点:Aggregations |
Value | 浮点数 | 200 | 聚合操作的结果值。 父节点:Aggregations |
Groups | 容器 | 不涉及 | 分组聚合的结果列表。 子节点:Value、Count 父节点:Aggregations |
Value | 字符串 | 100 | 分组聚合的值。 父节点:Groups |
Count | 整型 | 5 | 分组聚合的总个数。 父节点:Groups |
示例
POST /?metaQuery&comp=query HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Date: Mon, 26 Jul 2021 13:08:38 GMT
Authorization: OSS qn6qrrqxo2oawuk53otf****:ceOEyZavKY4QcjoUWYSpYbJ3****
<?xml version="1.0" encoding="UTF-8"?>
<MetaQuery>
<NextToken>MTIzNDU2Nzg6aW1tdGVzdDpleGFtcGxlYnVja2V0OmRhdGFzZXQwMDE6b3NzOi8vZXhhbXBsZWJ1Y2tldC9zYW1wbGVvYmplY3QxLmpw****</NextToken>
<MaxResults>5</MaxResults>
<Query>{"Field": "Size","Value": "1048576","Operation": "gt"}</Query>
<Sort>Size</Sort>
<Order>asc</Order>
<Aggregations>
<Aggregation>
<Field>Size</Field>
<Operation>sum</Operation>
</Aggregation>
<Aggregation>
<Field>Size</Field>
<Operation>max</Operation>
</Aggregation>
</Aggregations>
</MetaQuery>
HTTP/1.1 200 OK
x-oss-request-id: 5C1B138A109F4E405B2D****
Date: Mon, 26 Jul 2021 13:08:38 GMT
Content-Length: 118
Content-Type: application/xml
Connection: keep-alive
Server: AliyunOSS
<?xml version="1.0" encoding="UTF-8"?>
<MetaQuery>
<NextToken>MTIzNDU2Nzg6aW1tdGVzdDpleGFtcGxlYnVja2V0OmRhdGFzZXQwMDE6b3NzOi8vZXhhbXBsZWJ1Y2tldC9zYW1wbGVvYmplY3QxLmpw****</NextToken>
<Files>
<File>
<Filename>exampleobject.txt</Filename>
<Size>120</Size>
<FileModifiedTime>2021-06-29T15:04:05.000000000Z07:00</FileModifiedTime>
<OSSObjectType>Normal</OSSObjectType>
<OSSStorageClass>Standard</OSSStorageClass>
<ObjectACL>default</ObjectACL>
<ETag>"fba9dede5f27731c9771645a3986****"</ETag>
<OSSCRC64>4858A48BD1466884</OSSCRC64>
<OSSTaggingCount>2</OSSTaggingCount>
<OSSTagging>
<Tagging>
<Key>owner</Key>
<Value>John</Value>
</Tagging>
<Tagging>
<Key>type</Key>
<Value>document</Value>
</Tagging>
</OSSTagging>
<OSSUserMeta>
<UserMeta>
<Key>x-oss-meta-location</Key>
<Value>hangzhou</Value>
</UserMeta>
</OSSUserMeta>
</File>
</Files>
</MetaQuery>
Query示例
- 如果要搜索名称为exampleobject.txt且大小小于1000字节的文件,则Query填写示例如下:
{ "SubQueries":[ { "Field":"Filename", "Value": "exampleobject.txt", "Operation":"eq" }, { "Field":"Size", "Value":"1000", "Operation":"lt" } ], "Operation":"and" }
- 如果要搜索以
exampledir/
为前缀,包含type=document
或owner=John
标签且大小大于10 MB的文件,则Query填写示例如下:{ "SubQueries": [ { "Field": "Filename", "Value": "exampledir/", "Operation": "prefix" }, { "Field": "Size", "Value": "1048576", "Operation": "gt" }, { "SubQueries": [ { "Field": "OSSTagging.type", "Value": "document", "Operation": "eq" }, { "Field": "OSSTagging.owner", "Value": "John", "Operation": "eq" } ], "Operation": "or" } ], "Operation": "and" }
结合以上搜索条件,您还可以通过聚合操作实现不同数据的统计和分析,例如计算符合搜索条件的所有文件的大小总和、数量、平均值或者最值,统计所有符合搜索条件图片的尺寸分布情况。
错误码
错误码 | HTTP状态码 | 描述 |
---|---|---|
MetaQueryNotExist | 400 | Bucket不存在元数据索引库,请确保已为Bucket开启元数据管理功能并等待元数据索引库创建成功后重试。 |
EntityTooLarge | 400 | 请求中查询条件(即Query参数)的字符串大小超过最大允许的字节数。请修改后再重试。 |
InvalidArgument | 400 | 设置的参数值无效或格式错误,请设置正确的参数值。 |
InvalidParameter | 400 | 设置的参数值不合法,请设置正确的参数值。 |
MissingParameter | 400 | 未设置请求中的必选参数,请设置必选参数。 |
Throttling.Api | 403 | 被流控,请降低请求QPS后重试。如果进行多次重试后仍出现该错误,请提交工单。 |
Throttling.User | 403 | 被流控,请降低请求QPS后重试。如果进行多次重试后仍出现该错误,请提交工单。 |
AccessDenied | 403 | 没有访问该Bucket的权限,请确保已为RAM用户授予访问该Bucket的权限。 |
NoSuchBucket | 404 | 目标Bucket不存在,请设置正确的Bucket名称。 |
InternalServerError | 500 | 内部错误。如果进行多次重试后仍出现该错误,请提交工单。 |