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
|
|
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:
Nós filhos: nenhum Nós pais: CSV (entrada) |
|
RecordDelimiter |
String |
Opcional. Especifica uma quebra de linha codificada em Base64. Valor padrão: 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: 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: 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.
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:
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---------->.NotaO 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.
|
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.
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
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 ossobjectseja 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.
NotaPara 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 = 5for usado, {"_1":5} é retornado porque o valor 5 correspondente a * não é um objeto JSON. Quando a instrução SQLselect * 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 > 5seja executada. Se o valor de uma linha no objeto CSV forJohn, 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: |
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.