問題の説明
SelectObjectリクエストには、クエリ範囲にレコード区切り文字が含まれていません。
原因
SelectObjectリクエストを開始し、XML構造のrangeリクエストヘッダーまたはRange要素を使用してクエリするオブジェクトの範囲を指定しましたが、その範囲にはレコード区切り文字がありません。
例
次のリクエストで指定されているRecordDelimiter
はCg ==で、デコード後は \n
です。 リクエストで指定したクエリ範囲の10バイト目から20バイト目までにレコード区切り文字が見つからない場合、リクエストエラーが発生します。
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 LTAI****************:77Dv****************
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
Range: bytes=10-20
<?xml version="1.0"?>
<SelectRequest>
<Expression>c2VsZWN0IGNvdW50KCopIGZyb20gb3Nzb2JqZWN0IHdoZXJlIF80ID4gNDU=
</Expression>
<InputSerialization>
<CSV>
<FileHeaderInfo>Ignore</FileHeaderInfo>
<RecordDelimiter>Cg==</RecordDelimiter>
<FieldDelimiter>LA==</FieldDelimiter>
<QuoteCharacter>Ig==</QuoteCharacter>
</CSV>
</InputSerialization>
<OutputSerialization>
......
</OutputSerialization>
</SelectRequest>
ソリューション
クエリ対象オブジェクトの範囲を指定する場合は, クエリ範囲にレコード区切り文字が存在することを確認してください。 範囲クエリを実行するには、XMLの範囲タグを使用することを推奨します。 例:
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 LTAI****************:77Dv****************
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
<?xml version="1.0"?>
<SelectRequest>
<Expression>c2VsZWN0IGNvdW50KCopIGZyb20gb3Nzb2JqZWN0IHdoZXJlIF80ID4gNDU=
</Expression>
<InputSerialization>
<CSV>
<Range>line-range=10-20</Range>
<FileHeaderInfo>Ignore</FileHeaderInfo>
<RecordDelimiter>Cg==</RecordDelimiter>
<FieldDelimiter>LA==</FieldDelimiter>
<QuoteCharacter>Ig==</QuoteCharacter>
</CSV>
</InputSerialization>
<OutputSerialization>
......
</OutputSerialization>
</SelectRequest>