Todos os produtos
Search
Central de documentação

Object Storage Service:SelectObject

Última atualização: Jul 03, 2026

Executa instruções SQL em um objeto de destino e retorna os resultados.

Observações de uso

  • Você deve ter permissões de leitura no objeto.

  • Uma instrução SQL válida retorna o código de status HTTP 206. Instruções SQL inválidas ou sem correspondência retornam o código de status HTTP 400.

  • Ao usar a API SelectObject para consultar dados, a cobrança baseia-se na quantidade real de dados verificados no objeto de origem. Para mais informações, consulte Taxas de processamento de dados.

Sintaxe da solicitação

A sintaxe da solicitação difere para objetos CSV e JSON.

  • Sintaxe de solicitação para objetos CSV

    POST /object?x-oss-process=csv/select HTTP/1.1 
    HOST: BucketName.oss-cn-hangzhou.aliyuncs.com 
    Date: time GMT
    Content-Length: ContentLength
    Content-MD5: MD5Value 
    Authorization: Signature
    <?xml  version="1.0"  encoding="UTF-8"?>
    <SelectRequest>    
        <Expression>Base64-encoded SQL statement. Example: c2VsZWN0IGNvdW50KCopIGZyb20gb3Nzb2JqZWN0IHdoZXJlIF80ID4gNDU=</Expression>
        <InputSerialization>
            <CompressionType>None|GZIP</CompressionType>
            <CSV>            
                <FileHeaderInfo>
                    NONE|IGNORE|USE
                </FileHeaderInfo>
                <RecordDelimiter>Base64-encoded character</RecordDelimiter>
                <FieldDelimiter>Base64-encoded character</FieldDelimiter>
                <QuoteCharacter>Base64-encoded character</QuoteCharacter>
                <CommentCharacter>Base64-encoded character</CommentCharacter>
                <Range>line-range=start-end|split-range=start-end</Range>
                <AllowQuotedRecordDelimiter>true|false</AllowQuotedRecordDelimiter>
            </CSV>   
            </InputSerialization>
            <OutputSerialization>
                 <CSV>
                 <RecordDelimiter>Base64-encoded character</RecordDelimiter>
                 <FieldDelimiter>Base64-encoded character</FieldDelimiter>
    
                </CSV>
                <KeepAllColumns>false|true</KeepAllColumns>
                <OutputRawData>false|true</OutputRawData>
                <EnablePayloadCrc>true</EnablePayloadCrc>
                <OutputHeader>false</OutputHeader>
           </OutputSerialization>
         <Options>
            <SkipPartialDataRecord>false</SkipPartialDataRecord>
            <MaxSkippedRecordsAllowed>
            max allowed number of records skipped
            </MaxSkippedRecordsAllowed>
        </Options>
    </SelectRequest>
  • Sintaxe de solicitação para objetos JSON

    POST /object?x-oss-process=json/select HTTP/1.1 
    HOST: BucketName.oss-cn-hangzhou.aliyuncs.com 
    Date: time GMT
    Content-Length: ContentLength
    Content-MD5: MD5Value 
    Authorization: Signature
    <?xml  version="1.0"  encoding="UTF-8"?>
    <SelectRequest>    
        <Expression>
            Base64-encoded SQL statement. Example: c2VsZWN0IGNvdW50KCopIGZyb20gb3Nzb2JqZWN0IHdoZXJlIF80ID4gNDU=
        </Expression>
        <InputSerialization>
            <CompressionType>None|GZIP</CompressionType>
            <JSON>
                <Type>DOCUMENT|LINES</Type>
                <Range>
                line-range=start-end|split-range=start-end
                </Range>
                <ParseJsonNumberAsString> true|false
                </ParseJsonNumberAsString>
            </JSON>
        </InputSerialization>
        <OutputSerialization>
            <JSON>
                <RecordDelimiter>
                    Base64 of record delimiter
                </RecordDelimiter>
            </JSON>
            <OutputRawData>false|true</OutputRawData>
                     <EnablePayloadCrc>true</EnablePayloadCrc>
        </OutputSerialization>
        <Options>
            <SkipPartialDataRecord>
                false|true
            </SkipPartialDataRecord>
            <MaxSkippedRecordsAllowed>
                max allowed number of records skipped
               </MaxSkippedRecordsAllowed>
            </Options>
    </SelectRequest>

Elementos da solicitação

Elemento

Tipo

Descrição

SelectRequest

Container

O container que armazena a solicitação SelectObject.

Nós filhos: Expression, InputSerialization e OutputSerialization

Nós pais: nenhum

Expression

String

A instrução SQL codificada em Base64.

Nós filhos: nenhum

Nós pais: SelectRequest

InputSerialization

Container

Opcional. Especifica os parâmetros de serialização de entrada.

Nós filhos: CompressionType, CSV e JSON

Nós pais: SelectRequest

OutputSerialization

Container

Opcional. Define os parâmetros de serialização de saída.

Nós filhos: CSV, JSON e OutputRawData

Nós pais: SelectRequest

CSV(InputSerialization)

Container

Opcional. Indica os parâmetros de serialização de entrada para objetos CSV.

Nós filhos: FileHeaderInfo, RecordDelimiter, FieldDelimiter, QuoteCharacter, CommentCharacter e Range

Nós pais: InputSerialization

CSV(OutputSerialization)

Container

Opcional. Configura os parâmetros de serialização de saída para objetos CSV.

Nós filhos: RecordDelimiter e FieldDelimiter

Nós pais: OutputSerialization

JSON(InputSerialization)

Container

Opcional. Determina os parâmetros de serialização de entrada para objetos JSON.

Nós filhos: Type, Range e ParseJsonNumberAsString

JSON(OutputSerialization)

Container

Opcional. Estabelece os parâmetros de serialização de saída para objetos JSON.

Nós filhos: RecordDelimiter

Type

Enumeration

O tipo do objeto JSON de entrada. Valores válidos: DOCUMENT e LINES.

OutputRawData

Boolean

Opcional. Especifica se os dados brutos devem ser exportados. Valor padrão: false.

Nós filhos: nenhum

Nós pais: OutputSerialization

Nota
  • Se você especificar OutputRawData na solicitação, o Object Storage Service (OSS) retorna os dados com base no elemento da solicitação.

  • Caso OutputRawData não seja especificado na solicitação, o OSS seleciona automaticamente um formato e retorna os dados nesse formato na resposta.

  • Ao definir OutputRawData como true, se a instrução SQL enviada demorar muito para retornar dados, a solicitação HTTP poderá atingir o tempo limite.

CompressionType

Enumeration

O tipo de compactação do objeto. Valores válidos: None e GZIP.

Nós filhos: nenhum

Nós pais: InputSerialization

FileHeaderInfo

Enumeration

Opcional. Define as informações do cabeçalho CSV.

Valores válidos:

  • Use: O objeto CSV contém informações de cabeçalho. Os nomes das colunas no objeto CSV podem ser usados como nomes de colunas na operação SelectObject.

  • Ignore: O objeto CSV possui informações de cabeçalho, mas os nomes das colunas nele contidos não podem ser utilizados como nomes de colunas na operação SelectObject.

  • None: O objeto CSV não inclui informações de cabeçalho. Este é o valor padrão.

Nós filhos: nenhum

Nós pais: CSV (entrada)

RecordDelimiter

String

Opcional. Especifica uma quebra de linha codificada em Base64. Valor padrão: \n. Antes da codificação, o valor deste elemento deve ser um valor ANSI com até dois caracteres de comprimento. Por exemplo, \n indica uma quebra de linha em Java.

Nós filhos: nenhum

Nós pais: CSV (entrada e saída) e JSON (saída)

FieldDelimiter

String

Opcional. Define o delimitador de coluna codificado em Base64 para o objeto CSV. Valor padrão: ,. O valor deve ser um caractere ANSI único antes da codificação. Por exemplo, , representa uma vírgula em Java.

Nós filhos: nenhum

Nós pais: CSV (entrada e saída)

QuoteCharacter

String

Opcional. Indica o caractere de aspas codificado em Base64 para o objeto CSV. Valor padrão: \". Em um objeto CSV, quebras de linha e delimitadores de coluna entre aspas são tratados como caracteres normais. O valor deve ter um caractere ANSI antes da codificação. Por exemplo, \" é usado para indicar aspas em Java.

Nós filhos: nenhum

Nós pais: CSV (entrada)

CommentCharacter

String

O caractere de comentário a ser usado no objeto CSV. O valor deste elemento deve estar codificado em Base64. Este elemento está vazio por padrão.

Range

String

Opcional. Especifica o intervalo da consulta. Métodos suportados:

Nota

É necessário criar SelectMeta para objetos consultados com base em Range.

  • Consulta por linha: line-range=start-end. Por exemplo, line-range=10-20 indica que os dados da linha 10 à linha 20 serão verificados.

  • Consulta por split: split-range=start-end. Por exemplo, split-range=10-20 indica que os dados do split 10 ao split 20 serão verificados.

Os parâmetros start e end são inclusivos. Ambos usam o mesmo formato do parâmetro range em operações range get.

Este parâmetro só pode ser usado se o objeto estiver no formato CSV ou se o tipo JSON for LINES.

Nós filhos: nenhum

Nós pais: CSV (entrada) e JSON (saída)

KeepAllColumns

bool

Opcional. Define se todas as colunas do objeto CSV devem ser incluídas na resposta. Valor padrão: false. Apenas as colunas na cláusula SELECT contêm valores. As colunas na resposta são ordenadas pelo número da coluna em ordem crescente. Exemplo:

select _5, _1 from ossobject.

Se você definir KeepAllColumns como true e o objeto CSV tiver seis colunas, o seguinte resultado será retornado para a cláusula SELECT acima:

Valor da 1ª coluna,,,,Valor da 5ª coluna,\n

Nós filhos: nenhum

Nós pais: OutputSerialization (CSV)

EnablePayloadCrc

bool

O valor CRC-32 para verificação de cada frame. O cliente pode calcular o valor CRC-32 de cada payload e compará-lo com o valor CRC-32 incluído para verificar a integridade dos dados.

Nós filhos: nenhum

Nós pais: OutputSerialization

Options

Container

Outros parâmetros opcionais.

Nós filhos: SkipPartialDataRecord e MaxSkippedRecordsAllowed

Nós pais: SelectRequest

OutputHeader

bool

Especifica se as informações de cabeçalho do objeto CSV são incluídas no início da resposta.

Valor padrão: false.

Nós filhos: nenhum

Nós pais: OutputSerialization

SkipPartialDataRecord

bool

Define se linhas com dados ausentes devem ser ignoradas. Se definido como false, o OSS processa os dados da linha como null sem reportar erros. Se definido como true, linhas sem dados são puladas. Caso o número de linhas ignoradas exceda o máximo permitido, o OSS reporta um erro e interrompe o processamento dos dados.

Valor padrão: false.

Nós filhos: nenhum

Nós pais: Options

MaxSkippedRecordsAllowed

Int

O número máximo de linhas que podem ser ignoradas. Linhas são ignoradas se não corresponderem ao tipo especificado na instrução SQL ou se uma ou mais colunas estiverem ausentes e SkipPartialDataRecord for true. Se o número de linhas ignoradas exceder o valor deste parâmetro, o OSS reporta um erro e para o processamento.

Nota

Se uma linha em um objeto CSV estiver formatada incorretamente, o OSS interrompe o processamento e reporta um erro, pois isso pode causar análise incorreta do objeto. Por exemplo, uma coluna com número ímpar contínuo de aspas. Este parâmetro ajusta a tolerância para dados irregulares, mas não se aplica a objetos CSV inválidos.

Valor padrão: 0.

Nós filhos: nenhum

Nós pais: Options

ParseJsonNumberAsString

bool

Especifica se inteiros e números de ponto flutuante no objeto JSON devem ser analisados como strings. A precisão de ponto flutuante diminui durante a análise numérica. Para preservar os dados brutos, defina este parâmetro como true. Use a função CAST no SQL para converter os dados analisados para o tipo desejado, como INT, DOUBLE ou DECIMAL.

Valor padrão: false.

Nós filhos: nenhum

Nós pais: JSON

AllowQuotedRecordDelimiter

bool

Indica se o objeto CSV pode conter quebras de linha entre aspas (").

Por exemplo, se o valor de uma coluna for "abc\ndef" e \n for uma quebra de linha, defina este parâmetro como true. Se definido como false, você pode chamar a operação SelectObject especificando um intervalo no cabeçalho da solicitação para realizar consultas multipartes mais eficientes.

Valor padrão: true.

Nós filhos: nenhum

Nós pais: InputSerialization

Corpo da resposta

  • Se a resposta retornar o código de status HTTP 4xx, a verificação de sintaxe SQL falhou ou a solicitação contém erros. O formato do corpo de erro é o mesmo dos erros GetObject.

  • Caso a resposta retorne o código de status HTTP 5xx, ocorreu um erro interno do servidor. O formato do corpo de erro segue o padrão dos erros GetObject.

  • O código de status HTTP 206 indica sucesso.

    • Se o valor do cabeçalho x-oss-select-output-raw for true, os dados do objeto (exceto dados baseados em frames) são retornados. O cliente obtém os dados da mesma forma que na operação GetObject.

    • Quando x-oss-select-output-raw for false, o resultado é retornado em frames.

  • Os frames são retornados no formato Version|Frame-Type | Payload Length | Header Checksum | Payload | Payload Checksum<1 byte><--3 bytes--><---4 bytes----><-------4 bytes--><variable><----4bytes---------->.

    Nota

    O valor de Checksum nos frames é CRC-32. Todos os inteiros em um frame são big-endian. Atualmente, o valor de Version é 1.

Tipos de frame

O SelectObject suporta três tipos de frame.

Tipo de frame

Valor

Formato do payload

Descrição

Data Frame

8388609

offset | data<-8 bytes><---variable->

Dados retornados para a solicitação SelectObject. O valor do parâmetro offset é um inteiro de 8 bits que indica a localização atual da varredura (o deslocamento a partir do cabeçalho do arquivo). Este parâmetro serve para reportar o progresso da operação.

Continuous Frame

8388612

offset<----8 bytes-->

Frame utilizado para reportar o progresso de uma operação e manter a conexão HTTP. Se nenhum dado for retornado para uma solicitação de consulta dentro de 5 segundos, um continuous frame é enviado.

End Frame

8388613

offset | total scanned bytes | http status code | error message<--8bytes-><--8bytes---------><----4 bytes--------><-variable------>

Um end frame retorna o estado final de uma operação, incluindo os bytes verificados e possíveis mensagens de erro.

  • O parâmetro offset indica o deslocamento final após a conclusão da varredura.

  • O parâmetro total scanned bytes indica o tamanho dos dados verificados.

  • O parâmetro http status code indica o estado final da operação.

    Nota

    SelectObject é uma operação de stream. Apenas o primeiro bloco de dados é processado quando o cabeçalho da resposta é enviado. Se o primeiro bloco corresponder à instrução SQL, o código de status HTTP no cabeçalho da resposta será 206, indicando sucesso. No entanto, o status final pode não ser 206 se blocos subsequentes forem inválidos. Como o código de status no cabeçalho não pode ser alterado, um código HTTP é incluído no end frame para indicar o estado final. O cliente usa esse código no end frame para determinar se a operação foi bem-sucedida.

  • O parâmetro error message contém mensagens de erro, incluindo o número de cada linha ignorada e o total de linhas ignoradas.

    Nota

    O formato das mensagens de erro em um end frame é ErrorCodes.DetailMessage. A seção ErrorCodes contém um ou mais códigos de erro separados por vírgulas (,). ErrorCodes e DetailMessage são separados por um ponto (.).

Exemplos de solicitações

Exemplos para objetos CSV e JSON:

  • Exemplo de solicitação para objetos CSV

    POST /oss-select/bigcsv_normal.csv?x-oss-process=csv%2Fselect HTTP/1.1
    Date: Fri, 25 May 2018 22:11:39 GMT
    Content-Type:
    Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=content-length,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e
    User-Agent: aliyun-sdk-dotnet/2.8.0.0(windows 16.7/16.7.0.0/x86;4.0.30319.42000)
    Content-Length: 748
    Expect: 100-continue
    Connection: keep-alive
    Host: host name
    <?xml version="1.0"?>
    <SelectRequest>
        <Expression>c2VsZWN0IGNvdW50KCopIGZyb20gb3Nzb2JqZWN0IHdoZXJlIF80ID4gNDU=
        </Expression>
        <InputSerialization>
            <Compression>None</Compression>
            <CSV>
                <FileHeaderInfo>Ignore</FileHeaderInfo>
                <RecordDelimiter>Cg==</RecordDelimiter>
                <FieldDelimiter>LA==</FieldDelimiter>
                <QuoteCharacter>Ig==</QuoteCharacter>
                <CommentCharacter>Iw==</CommentCharacter/>
            </CSV>
        </InputSerialization>
        <OutputSerialization>
            <CSV>
                <RecordDelimiter>Cg==</RecordDelimiter>
                <FieldDelimiter>LA==</FieldDelimiter>
                <QuoteCharacter>Ig==</QuoteCharacter>            
            </CSV>
            <KeepAllColumns>false</KeepAllColumns>
                <OutputRawData>false</OutputRawData>
        </OutputSerialization>
    </SelectRequest>
  • Exemplo de solicitação para objetos JSON

    POST /oss-select/sample_json.json?x-oss-process=json%2Fselect HTTP/1.1
    Host: host name
    Accept-Encoding: identity
    User-Agent: aliyun-sdk-python/2.6.0(Darwin/16.7.0/x86_64;3.5.4)
    Accept: */*
    Connection: keep-alive
    date: Mon, 10 Dec 2018 18:28:11 GMT
    authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=content-length,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e
    Content-Length: 317
    <SelectRequest>
        <Expression>c2VsZWN0ICogZnJvbSBvc3NvYmplY3Qub2JqZWN0c1sqXSB3aGVyZSBwYXJ0eSA9ICdEZW1vY3JhdCc=
        </Expression>
        <InputSerialization>
        <JSON>
            <Type>DOCUMENT</Type>
        </JSON>
        </InputSerialization>
        <OutputSerialization>
        <JSON>
            <RecordDelimiter>LA==</RecordDelimiter>
        </JSON>
        </OutputSerialization>
        <Options />
    </SelectRequest>

Sintaxe de instruções SQL

A forma geral de uma instrução SQL SelectObject é SELECT select-list from table where_opt limit_opt.

Importante

As seguintes palavras-chave não podem ser alteradas: SELECT e where.

select_list: column name
            | column index (Example: _1, _2. column index applies only to CSV objects.)
            | json path (Example: s.contacts.firstname. json path applies only to JSON objects.)
            | function(column index | column name)
            | function(json_path) (applies only to JSON objects.)
            | select_list AS alias
Nota

Funções suportadas: AVG, SUM, MAX, MIN, COUNT e CAST (função de conversão de tipo). Após COUNT, apenas o asterisco (*) pode ser especificado.

table: OSSOBJECT

      | OSSOBJECT json_path (applies only to JSON objects.)

If you want to perform operations on CSV objects, you must use the OSSOBJECT table. If you want to perform operations on JSON objects including DOCUMENT and LINES type objects, you can specify json_path after OSSOBJECT. 

json_path: ['string '] (The quotation marks that are used to enclose a string can be deleted if the string does not include a space or an asterisk (*). In this case, ['string '] is equivalent to .'string '.)

          | [n] (indicates the nth element in an array. The value of n is counted from 0.)

          | [*] (indicates a child element in an array or object.)

          | .'string ' (The quotation marks that are used to enclose a string can be deleted if the string does not include a space or an asterisk (*).)

          | json_path jsonpath (You can concatenate multiple elements in a json path such as [n].property1.attributes[*].)
Where_opt:
| WHERE expr
expr:
| literal value
| column name
| column index
| json path (applies only to JSON objects.)
| expr op expr
| expr OR expr
| expr AND expr
| expr IS NULL
| expr IS NOT NULL
| (column name | column index | json path) IN (value1, value2, ...)
| (column name | column index | json path) NOT in (value1, value2, ...)
| (column name | column index | json path) between value1 and value2
| NOT (expr)
| expr op expr
| (expr)
| cast (column index |column name | json path | literal as INT|DOUBLE|)
  • op: inclui os seguintes operadores: >, <, >=, <=, ! =, =, ,, LIKE, +, -, *, /, % e ||.

  • cast: Use a função CAST para converter dados de uma coluna de um tipo para outro.

  • Combinação de função de agregação e limit: Select avg(cast(_1 as int)) from ossobject limit 100. A instrução acima calcula a média da primeira coluna nas primeiras 100 linhas. Essa função difere da instrução suportada pelo MySQL porque apenas uma única linha é retornada para uma função de agregação em operações SelectObject. Portanto, não há limites configurados para o tamanho dos dados de saída. A operação limit é executada antes da operação de agregação ao chamar SelectObject.

Limites de instruções SQL

As instruções SQL possuem os seguintes limites:

  • Apenas objetos de texto codificados em UTF-8 e objetos de texto UTF-8 compactados no formato GZIP são suportados. O formato deflate não é suportado para objetos GZIP.

  • Apenas um único objeto pode ser consultado por instrução SQL. As seguintes cláusulas não são suportadas: JOIN, ORDER BY, GROUP BY e HAVING.

  • Uma cláusula WHERE não pode incluir condições de agregação. Por exemplo, a seguinte cláusula não é permitida: WHERE max(cast(age as int)) > 100.

  • No máximo 1.000 colunas podem ser especificadas em uma instrução SQL. O nome da coluna pode ter até 1.024 bytes.

  • Até cinco curingas (%) são suportados em uma cláusula LIKE. O sinal de porcentagem (%) e o asterisco () são curingas que representam zero ou mais caracteres. A palavra-chave ESCAPE é suportada para cláusulas SQL LIKE e serve para converter caracteres especiais, como sinais de porcentagem (%), asteriscos () e pontos de interrogação (?), em strings normais.

  • São suportadas no máximo 1.024 constantes em uma cláusula IN.

  • A projeção especificada após SELECT pode ser um nome de coluna, um índice de coluna CSV (como _1 ou _2), uma função de agregação ou uma função CAST. Outras expressões não são suportadas, como select _1 + _2 from ossobject.

  • O tamanho máximo de coluna e de linha para um objeto CSV é de 256 KB.

  • Caminhos JSON especificados após FROM suportam nós JSON com tamanho máximo de 512 KB. O caminho pode conter até 10 níveis e um array pode ter até 5.000 elementos. Os campos especificados após SELECT e WHERE devem pertencer aos nós correspondentes aos caminhos JSON definidos após FROM.

  • Em instruções SQL de um objeto JSON, as expressões SELECT ou WHERE não podem incluir curingas de array ([]). Curingas de array ([]) só são permitidos em caminhos JSON especificados após FROM. Por exemplo, use select from ossobject.contacts[] em vez de select s.contacts[*] from ossobject s.

  • O tamanho máximo de uma instrução SQL é 16 KB. Até 20 expressões podem ser adicionadas após WHERE. Cada instrução suporta até 10 níveis e 100 operações de agregação.

Tratamento de erros de dados

Os cenários a seguir descrevem como os erros de dados são tratados.

  • Algumas colunas estão ausentes em certas linhas de um objeto CSV.

    Se SkipPartialDataRecord não for especificado ou for definido como false, o OSS calcula as expressões na instrução SQL tratando os valores das colunas ausentes como null.

    Caso SkipPartialDataRecord seja definido como true, o OSS ignora as linhas com colunas ausentes. Nesse caso, se MaxSkippedRecordsAllowed não for especificado ou tiver um valor menor que o número de linhas ignoradas, o OSS reporta um erro enviando o código de status HTTP 400 ou incluindo-o no end frame.

    Suponha que a instrução SQL select _1, _3 from ossobject seja executada e que os dados em uma linha do objeto CSV sejam "John, Empresa A".

    • Se SkipPartialDataRecord for false, "John,\n" é retornado.

    • Se SkipPartialDataRecord for true, esta linha é ignorada.

  • Algumas chaves estão ausentes em um objeto JSON.

    Alguns objetos JSON podem não incluir as chaves especificadas na instrução SQL.

    • Se SkipPartialDataRecord não for especificado ou for false, o OSS calcula as expressões SQL tratando as chaves ausentes como null.

    • Quando SkipPartialDataRecord é true, o OSS ignora os dados no nó JSON. Se MaxSkippedRecordsAllowed não for especificado ou for menor que o número de linhas ignoradas, o OSS reporta um erro via código HTTP 400 ou no end frame.

    Considere a execução da instrução SQL select s.firstName, s.lastName , s.age from ossobject.contacts[*] s, onde o valor de um nó JSON é {"firstName":"John", "lastName":"Smith"}.

    • Se SkipPartialDataRecord não for especificado ou for false, {"firstName":"John", "lastName":"Smith"} é retornado.

    • Se SkipPartialDataRecord for true, esta linha é ignorada.

    Nota

    Para chaves nos dados retornados de uma solicitação de objetos JSON, os objetos JSON de saída podem ser apenas LINES. O valor da chave na saída é retornado conforme as seguintes regras:

    • Suponha que a instrução SQL select * from ossobject… seja executada. Se corresponder a um objeto JSON ({...}), o objeto JSON é retornado. Se corresponder a uma string ou array, a string ou array é retornado como DummyKey _1.

      Se {"Age":5}select * from ossobject.Age s where s = 5 for usado, {"_1":5} é retornado porque o valor 5 correspondente a * não é um objeto JSON. Quando a instrução SQL select * from ossobject s where s.Age = 5 é executada, {"Age":5} correspondente a * é retornado.

    • Se a instrução SQL não usar select *, mas especificar colunas, o conteúdo retornado estará no formato {"{Column 1}": Value, "{Column 2}": Value...}. {Column n} pode ser gerado pelos seguintes métodos:

      • Se o alias da coluna for especificado na cláusula SELECT, o alias entra em vigor.

      • Caso o nome da coluna seja a chave de um objeto JSON, essa chave é usada como valor da chave de saída.

      • Se a coluna for um elemento de um array JSON ou uma função de agregação, prefixe o nome da coluna com o número de série (começando em 1) e sublinhado (_) como valor da chave de saída.

      Considere {"contacts":{"Age":35, "Children":["child1", "child2", "child3"]}}:

      • Ao executar a instrução SQL select s.contacts.Age, s.contacts.Children[0] from ossobjects, Age é a chave do objeto JSON de entrada, e Children[0] indica o primeiro elemento do array Children, sendo a segunda coluna no conteúdo de saída. Neste caso, {"Age":35, "_2":"child1"} é retornado.

      • Quando a instrução SQL select max(cast(s.Age as int)) from ossobject.contacts s é executada e a coluna selecionada é uma função de agregação, a coluna recebe o prefixo _1 e seu número de série na saída. Neste caso, {"_1":35} é retornado.

      • Quando o alias da coluna é especificado na instrução SQL select s.contacts.Age, s.contacts.Children[0] as firstChild from ossobject, {"Age":35, "firstChild":"child1"} é retornado.

    • Chaves que correspondem aos objetos JSON e instruções SQL diferenciam maiúsculas de minúsculas. Por exemplo, "select s. Age" e "select s. age" são diferentes.

  • O tipo de dados de algumas colunas em um objeto CSV não corresponde ao tipo especificado na instrução SQL.

    Se o tipo de dados de uma linha em um objeto CSV não corresponder ao tipo especificado na instrução SQL, a linha é ignorada. Se o número de linhas ignoradas exceder o valor de MaxSkippedRecordsAllowed, o OSS interrompe o processamento e retorna o código de status HTTP 400.

    Suponha que a instrução SQL select _1, _3 from ossobject where _3 > 5 seja executada. Se o valor de uma linha no objeto CSV for John, Empresa A, A contratar, esta linha será ignorada porque a terceira coluna não é do tipo inteiro.

  • O tipo de dados de algumas chaves em um objeto JSON não corresponde ao tipo especificado na instrução SQL.

    Considere a execução da instrução SQL select s.name from ossobject s where s.aliren_age > 5. Se o valor de um nó JSON for {"Name":"John", "Career_age": A contratar}, este nó será ignorado.

Formatos de hora suportados

A tabela a seguir lista os formatos que podem ser convertidos em timestamp sem necessidade de especificar o formato de hora. Por exemplo, a string cast­('20121201' as timestamp) é automaticamente analisada como um timestamp de 1º de dezembro de 2012.

Formato

Descrição

YYYYMMDD

ano mês dia

YYYY/MM/DD

ano/mês/dia

DD/MM/YYYY/

dia/mês/ano

YYYY-MM-DD

ano-mês-dia

DD-MM-YY

dia-mês-ano

DD.MM.YY

dia. mês. ano

HH:MM:SS.mss

hora:minuto:segundo. milissegundo

HH:MM:SS

hora:minuto:segundo

HH MM SS mss

hora minuto segundo milissegundo

HH.MM.SS.mss

hora. minuto. segundo. milissegundo

HHMM

hora minuto

HHMMSSmss

hora minuto segundo milissegundo

YYYYMMDD HH:MM:SS.mss

ano mês dia hora:minuto:segundo. milissegundo

YYYY/MM/DD HH:MM:SS.mss

ano/mês/dia hora:minuto:segundo. milissegundo

DD/MM/YYYY HH:MM:SS.mss

dia/mês/ano hora:minuto:segundo. milissegundo

YYYYMMDD HH:MM:SS

ano mês dia hora:minuto:segundo

YYYY/MM/DD HH:MM:SS

ano/mês/dia hora:minuto:segundo

DD/MM/YYYY HH:MM:SS

dia/mês/ano hora:minuto:segundo

YYYY-MM-DD HH:MM:SS.mss

ano-mês-dia hora:minuto:segundo. milissegundo

DD-MM-YYYY HH:MM:SS.mss

dia-mês-ano hora:minuto:segundo. milissegundo

YYYY-MM-DD HH:MM:SS

ano-mês-dia hora:minuto:segundo

YYYYMMDDTHH:MM:SS

ano mês dia T hora:minuto:segundo

YYYYMMDDTHH:MM:SS.mss

ano mês dia T hora:minuto:segundo. milissegundo

DD-MM-YYYYTHH:MM:SS.mss

dia-mês-ano T hora:minuto:segundo. milissegundo

DD-MM-YYYYTHH:MM:SS

dia-mês-ano T hora:minuto:segundo

YYYYMMDDTHHMM

ano mês dia T hora minuto

YYYYMMDDTHHMMSS

ano mês dia T hora minuto segundo

YYYYMMDDTHHMMSSMSS

ano mês dia T hora minuto segundo milissegundo

ISO8601-0

ano-mês-dia T hora:minuto+hora:minuto, ou ano-mês-dia T hora: minuto-hora:minuto

"+" indica que a hora local no fuso horário atual é posterior à hora UTC padrão. "-" indica que a hora local é anterior à hora UTC padrão. Neste formato, ISO8601-0 pode ser usado.

ISO8601-1

ano-mês-dia T hora:minuto+hora:minuto, ou ano-mês-dia T hora: minuto-hora:minuto

"+" indica que a hora local no fuso horário atual é posterior à hora UTC padrão. "-" indica que a hora local é anterior à hora UTC padrão. Neste formato, ISO 8601-1 pode ser usado.

CommonLog

Exemplo: 28/Feb/2017:12:30:51 +0700

RFC822

Exemplo: Tue, 28 Feb 2017 12:30:51 GMT

?D/?M/YY

dia/mês/ano, onde dia e mês podem ter um ou dois dígitos.

?D/?M/YY ?H:?M

dia/mês/ano/hora:minuto, onde dia, mês, hora e minuto podem ter um ou dois dígitos.

?D/?M/YY ?H:?M:?S

dia/mês/ano/hora:minuto:segundo, onde dia, mês, hora, minuto e segundo podem ter um ou dois dígitos.

A tabela a seguir lista formatos que podem causar erros. Você deve especificar um formato de hora ao usar strings nestes formatos. Por exemplo, a instrução cast('20121201' as timestamp format 'YYYYDDMM') analisa incorretamente a string 20121201 como 12 de janeiro de 2012.

Formato

Descrição

YYYYDDMM

ano dia mês

YYYY/DD/MM

ano/dia/mês

MM/DD/YYYY

mês/dia/ano

YYYY-DD-MM

ano-dia-mês

MM-DD-YYYY

mês-dia-ano

MM.DD.YYYY

mês. dia. ano

Códigos de erro

O SelectObject retorna códigos de erro de duas maneiras:

  • O código de status HTTP é incluído no cabeçalho da resposta e o código de erro no corpo da resposta, assim como em outras solicitações OSS. Códigos de erro retornados dessa forma indicam erros de entrada, como uma instrução SQL inválida ou erros de dados.

  • O código de erro é incluído no end frame do corpo da resposta. Códigos retornados assim indicam que os dados estão incorretos ou não correspondem ao tipo especificado na instrução SQL. Por exemplo, uma string existe em uma coluna cujo tipo foi definido como inteiro na instrução SQL. Nesse caso, parte dos dados é processada e então o código de status HTTP 206 e os dados processados são enviados ao cliente.

Códigos de erro como InvalidCSVLine podem ser retornados como um código de status HTTP no cabeçalho da resposta ou como um código de status no end frame, dependendo da localização da linha com erro dentro do objeto CSV.

ErrorCode

Descrição

HTTP Status Code

Http Status Code in End Frame

InvalidSqlParameter

Mensagem de erro retornada porque o parâmetro SQL especificado não existe.

A instrução SQL na solicitação é nula, o tamanho da instrução SQL excedeu o limite superior ou a instrução SQL não está codificada em Base64.

400

None

InvalidInputFieldDelimiter

Mensagem de erro retornada porque o objeto CSV de entrada contém delimitadores de coluna inválidos.

O parâmetro não está codificado em Base64 ou o tamanho do parâmetro é maior que 1 byte após a decodificação.

400

None

InvalidInputRecordDelimiter

Mensagem de erro retornada porque o objeto CSV de entrada contém delimitadores de linha inválidos. O parâmetro não está codificado em Base64 ou o tamanho do parâmetro é maior que 2 bytes após a decodificação.

400

None

InvalidInputQuote

Mensagem de erro retornada porque o objeto CSV de entrada contém caracteres de aspas inválidos. O parâmetro não está codificado em Base64 ou o tamanho do parâmetro é maior que 1 byte após a decodificação.

400

None

InvalidOutputFieldDelimiter

Mensagem de erro retornada porque o objeto CSV de saída contém delimitadores de coluna inválidos. O parâmetro não está codificado em Base64 ou o tamanho do parâmetro é maior que 1 byte após a decodificação.

400

None

InvalidOutputRecordDelimiter

Mensagem de erro retornada porque o objeto CSV de saída contém delimitadores de linha inválidos. O parâmetro não está codificado em Base64 ou o tamanho do parâmetro é maior que 2 bytes após a decodificação.

400

None

UnsupportedCompressionFormat

Mensagem de erro retornada porque o valor do parâmetro Compression não é NONE ou GZIP. O valor não diferencia maiúsculas de minúsculas.

400

None

InvalidCommentCharacter

Mensagem de erro retornada porque o objeto CSV contém caracteres de comentário inválidos. O parâmetro não está codificado em Base64 ou o tamanho do parâmetro é maior que 1 byte após a decodificação.

400

None

InvalidRange

Mensagem de erro retornada porque o parâmetro Range não tem o prefixo line-range= ou split-range=, ou o valor do intervalo não está em conformidade com o padrão HTTP para Range.

400

None

DecompressFailure

Mensagem de erro retornada porque o valor de Compression é GZIP e o objeto não pode ser extraído.

400

None

InvalidMaxSkippedRecordsAllowed

Mensagem de erro retornada porque o valor de MaxSkippedRecordsAllowed não é um inteiro.

400

None

SelectCsvMetaUnavailable

Mensagem de erro retornada porque o objeto não inclui CSV Meta quando o parâmetro Range é especificado. Chame primeiro a operação CreateSelectObjectMeta.

400

None

InvalidTextEncoding

Mensagem de erro retornada porque o objeto não está codificado em UTF-8.

400

None

InvalidOSSSelectParameters

Mensagem de erro retornada porque os parâmetros EnablePayloadCrc e OutputRawData estão definidos como true. Isso resulta em conflitos.

400

None

InternalError

Mensagem de erro retornada porque ocorreu um erro de sistema do OSS.

500 ou 206

500 ou None

SqlSyntaxError

Mensagem de erro retornada porque a sintaxe da instrução SQL decodificada em Base64 é inválida.

400

None

SqlExceedsMaxInCount

Mensagem de erro retornada porque o número de valores incluídos na cláusula SQL IN excedeu 1.024.

400

None

SqlExceedsMaxColumnNameLength

Mensagem de erro retornada porque o tamanho do nome da coluna excedeu 1.024 bytes.

400

None

SqlInvalidColumnIndex

Mensagem de erro retornada porque o índice da coluna na instrução SQL é menor que 1 byte ou maior que 1.000 bytes.

400

None

SqlAggregationOnNonNumericType

Mensagem de erro retornada porque uma função de agregação foi usada em uma coluna não numérica.

400

None

SqlInvalidAggregationOnTimestamp

Mensagem de erro retornada porque a função de agregação SUM ou AVG foi usada na coluna timestamp.

400

None

SqlValueTypeOfInMustBeSame

Mensagem de erro retornada porque valores de tipos diferentes estão incluídos na cláusula SQL IN.

400

None

SqlInvalidEscapeChar

Mensagem de erro retornada porque um caractere de escape inválido, como ponto de interrogação (?), sinal de porcentagem (%) ou asterisco (*), foi especificado na cláusula SQL LIKE.

400

None

SqlOnlyOneEscapeCharIsAllowed

Mensagem de erro retornada porque o tamanho do caractere de escape na cláusula SQL LIKE é maior que 1 byte.

400

None

SqlNoCharAfterEscapeChar

Mensagem de erro retornada porque nenhum caractere foi especificado após o caractere de escape na cláusula SQL LIKE.

400

None

SqlInvalidLimitValue

Mensagem de erro retornada porque o número especificado após a cláusula SQL Limit é menor que 1.

400

None

SqlExceedsMaxWildCardCount

Mensagem de erro retornada porque o número de asteriscos (*) ou sinais de porcentagem (%) na cláusula SQL LIKE excedeu o limite superior.

400

None

SqlExceedsMaxConditionCount

Mensagem de erro retornada porque o número de expressões condicionais na cláusula SQL WHERE excedeu o limite superior.

400

None

SqlExceedsMaxConditionDepth

Mensagem de erro retornada porque a profundidade da árvore condicional na cláusula SQL WHERE excedeu o limite superior.

400

None

SqlOneColumnCastToDifferentTypes

Mensagem de erro retornada porque uma coluna foi convertida em tipos diferentes pela inclusão da função CAST na instrução SQL.

400

None

SqlOperationAppliedToDifferentTypes

Mensagem de erro retornada porque um operador foi usado para dois objetos de tipos diferentes na instrução SQL. Por exemplo, este código de erro é retornado se col1 em _col1 > 3 for uma string.

400

None

SqlInvalidColumnName

Mensagem de erro retornada porque um nome de coluna usado na instrução SQL não está incluído no cabeçalho do objeto CSV.

400

None

SqlNotSupportedTimestampFormat

Mensagem de erro retornada porque o formato de timestamp especificado na cláusula SQL CAST não é suportado.

400

None

SqlNotMatchTimestampFormat

Mensagem de erro retornada porque o formato de timestamp especificado na cláusula SQL CAST não corresponde à string de timestamp.

400

None

SqlInvalidTimestampValue

Mensagem de erro retornada porque nenhum formato de timestamp foi especificado na cláusula SQL CAST e a string especificada não pode ser convertida em timestamp.

400

None

SqlInvalidLikeOperand

Mensagem de erro retornada porque nomes ou índices de coluna no lado esquerdo não foram especificados na cláusula SQL LIKE, a coluna especificada no lado esquerdo não é do tipo string ou a coluna no lado direito na cláusula LIKE é do tipo string.

400

None

SqlInvalidMixOfAggregationAndColumn

Mensagem de erro retornada porque a cláusula SQL SELECT inclui nomes de coluna e índices tanto para funções de agregação quanto para funções não agregadas.

400

None

SqlExceedsMaxAggregationCount

Mensagem de erro retornada porque o número de funções de agregação incluídas na cláusula SQL SELECT excedeu o limite superior.

400

None

SqlInvalidMixOfStarAndColumn

Mensagem de erro retornada porque um asterisco (*), um nome de coluna e um índice de coluna estão incluídos na mesma instrução SQL.

400

None

SqlInvalidKeepAllColumnsWithAggregation

Mensagem de erro retornada porque a instrução SQL inclui funções de agregação e o parâmetro KeepAllColumns está definido como true.

400

None

SqlInvalidKeepAllColumnsWithDuplicateColumn

Mensagem de erro retornada porque a instrução SQL inclui nomes de coluna ou índices de coluna repetidos e o parâmetro KeepAllColumns está definido como true.

400

None

SqlInvalidSqlAfterAnalysis

Mensagem de erro retornada porque a instrução SQL é complexa e a instrução SQL analisada não é suportada.

400

None

InvalidArithmeticOperand

Mensagem de erro retornada porque a instrução SQL contém operações aritméticas realizadas em constantes ou colunas não numéricas.

400

None

SqlInvalidAndOperand

Mensagem de erro retornada porque as expressões unidas pelo operador AND na instrução SQL não são do tipo Boolean.

400

None

SqlInvalidOrOperand

Mensagem de erro retornada porque as expressões unidas pelo operador OR na instrução SQL não são do tipo Boolean.

400

None

SqlInvalidNotOperand

Mensagem de erro retornada porque as expressões unidas pelo operador NOT na instrução SQL não são do tipo Boolean.

400

None

SqlInvalidIsNullOperand

Mensagem de erro retornada porque a instrução SQL especifica operações baseadas no operador IS NULL realizadas em uma constante.

400

None

SqlComparerOperandTypeMismatch

Mensagem de erro retornada porque a instrução SQL especifica operações baseadas em operador de comparação realizadas em dois objetos de tipos diferentes.

400

None

SqlInvalidConcatOperand

Mensagem de erro retornada porque a instrução SQL contém duas constantes unidas pelo operador de concatenação (

).

400

None

SqlUnsupportedSql

Mensagem de erro retornada porque a instrução SQL é complexa e o tamanho do plano SQL gerado excedeu o limite superior.

400

None

HeaderInfoExceedsMaxSize

Mensagem de erro retornada porque o tamanho das informações de cabeçalho especificadas na instrução SQL excedeu o limite superior.

400

None

OutputExceedsMaxSize

Mensagem de erro retornada porque o tamanho de uma linha na saída excedeu o limite superior.

400

None

InvalidCsvLine

Mensagem de erro retornada porque uma linha no objeto CSV é inválida ou o tamanho da linha excedeu o limite superior, ou porque o número de linhas ignoradas excedeu o valor de MaxSkippedRecordsAllowed.

400 ou 206

400 ou None

NegativeRowIndex

Mensagem de erro retornada porque o valor do índice de array na instrução SQL é um número negativo.

400

None

ExceedsMaxNestedColumnDepth

Mensagem de erro retornada porque o número de níveis aninhados do objeto JSON na instrução SQL excedeu o limite superior.

400

None

NestedColumnNotSupportInCsv

Mensagem de erro retornada porque a instrução SQL contém colunas aninhadas que incluem pontos (.) ou arrays que incluem colchetes ([]). Os caracteres anteriores não são suportados para instruções SQL de objetos CSV.

400

None

TableRootNodeOnlySupportInJson

Mensagem de erro retornada porque o caminho do nó raiz não foi especificado após From ossobject em objetos JSON.

400

None

JsonNodeExceedsMaxSize

Mensagem de erro retornada porque o tamanho do nó raiz no objeto JSON excedeu o limite superior.

400 ou 206

400 ou None

InvalidJsonData

Mensagem de erro retornada porque os dados JSON estão formatados incorretamente.

400 ou 206

400 ou None

ExceedsMaxJsonArraySize

Mensagem de erro retornada porque o número de elementos em um array no nó raiz do objeto JSON excedeu o limite superior.

400 ou 206

400 ou None

WildCardNotAllowed

Mensagem de erro retornada porque asteriscos (*) não podem ser usados em cláusulas SQL SELECT ou cláusulas SQL WHERE para o objeto JSON. Por exemplo, um erro é retornado se você executar a seguinte instrução: select s.a.b[*] from ossobject where a.c[*] > 0.

400

None

JsonNodeExceedsMaxDepth

Mensagem de erro retornada porque a profundidade do nó raiz do objeto JSON excedeu o limite superior.

400 ou 206

400 ou None

ossutil

Para informações sobre o comando ossutil correspondente à operação SelectObject, consulte select-object.