问题描述
SelectObject请求中不支持Range请求头。
问题原因
您发起了SelectObject请求,并在请求头中设置了Range请求头,但是SelectObject接口不支持该请求头。
问题示例
SelectObject请求中指定了不支持的请求头Range。
POST /oss-select/bigcsv_normal.csv?x-oss-process=csv%2Fselect HTTP/1.1
Date: Fri, 25 May 2018 22:11:39 GMT
Authorization: OSS qn6q**************:77Dv****************
Range: bytes=1024-2048
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
<?xml version="1.0"?>
<SelectRequest>
<Expression>c2VsZWN0IGNvdW50KCopIGZyb20gb3Nzb2JqZWN0IHdoZXJlIF80ID4gNDU=
</Expression>
<InputSerialization>
......
</InputSerialization>
<OutputSerialization>
......
</OutputSerialization>
</SelectRequest>
解决方案
删除请求中的Range请求头。
如果您希望指定查询文件的范围,您需要在XML中提供Range节点,该节点支持以下两种格式:
按行查询:line-range=start-end。例如,line-range=10-20表示扫描第10行到第20行。
按Split查询:split-range=start-end。例如,split-range=10-20表示扫描第10到第20个split。
其中start和end均为inclusive。如:
POST /oss-select/bigcsv_normal.csv?x-oss-process=csv%2Fselect HTTP/1.1
Date: Fri, 25 May 2018 22:11:39 GMT
Authorization: OSS qn6q**************:77Dv****************
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
<?xml version="1.0"?>
<SelectRequest>
<Expression>c2VsZWN0IGNvdW50KCopIGZyb20gb3Nzb2JqZWN0IHdoZXJlIF80ID4gNDU=
</Expression>
<InputSerialization>
<CSV>
<Range>line-range=10-20</Range>
</CSV>
</InputSerialization>
<OutputSerialization>
......
</OutputSerialization>
</SelectRequest>
使用Range参数查询文件时,需要包含select meta。更多信息,请参见CreateSelectObjectMeta。
此外,如果您查询的目标对象类型为CSV,则可以通过AllowQuotedRecordDelimiter参数指定CSV内容是否包含引号中的换行符。当AllowQuotedRecordDelimiter参数取值为false时,SelectObject支持添加Range请求头,实现更高效的分片查询。
相关文档
该文章对您有帮助吗?
- 本页导读 (1)
- 问题描述
- 问题原因
- 问题示例
- 解决方案
- 相关文档