Todos los productos
Search
Centro de documentos

Object Storage Service:SelectObject

Última actualización: Sep 03, 2026

Ejecuta sentencias SQL en un objeto destino y devuelve los resultados.

Notas de uso

  • Debe tener permisos de lectura sobre el objeto.

  • Una sentencia SQL válida devuelve el código de estado HTTP 206. Una sentencia SQL no válida o que no coincida devuelve el código de estado HTTP 400.

  • Al utilizar la API SelectObject para consultar datos, se le cobra según la cantidad real de datos escaneados del objeto de origen. Para obtener más información, consulte Data processing fees.

Sintaxis de la solicitud

La sintaxis de la solicitud difiere para objetos CSV y JSON.

  • Sintaxis de solicitud 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>
  • Sintaxis de solicitud 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 de la solicitud

Elemento

Tipo

Descripción

SelectRequest

Contenedor

El contenedor que almacena la solicitud SelectObject.

Nodos secundarios: Expression, InputSerialization y OutputSerialization

Nodos principales: ninguno

Expression

String

La sentencia SQL codificada en Base64.

Nodos secundarios: ninguno

Nodos principales: SelectRequest

InputSerialization

Contenedor

Opcional. Especifica los parámetros de serialización de entrada.

Nodos secundarios: CompressionType, CSV y JSON

Nodos principales: SelectRequest

OutputSerialization

Contenedor

Opcional. Especifica los parámetros de serialización de salida.

Nodos secundarios: CSV, JSON y OutputRawData

Nodos principales: SelectRequest

CSV(InputSerialization)

Contenedor

Opcional. Especifica los parámetros de serialización de entrada para objetos CSV.

Nodos secundarios: FileHeaderInfo, RecordDelimiter, FieldDelimiter, QuoteCharacter, CommentCharacter y Range

Nodos principales: InputSerialization

CSV(OutputSerialization)

Contenedor

Opcional. Especifica los parámetros de serialización de salida para objetos CSV.

Nodos secundarios: RecordDelimiter y FieldDelimiter

Nodos principales: OutputSerialization

JSON(InputSerialization)

Contenedor

Opcional. Especifica los parámetros de serialización de entrada para objetos JSON.

Nodos secundarios: Type, Range y ParseJsonNumberAsString

JSON(OutputSerialization)

Contenedor

Opcional. Especifica los parámetros de serialización de salida para objetos JSON.

Nodos secundarios: RecordDelimiter

Type

Enumeración

El tipo del objeto JSON de entrada. Valores válidos: DOCUMENT y LINES.

OutputRawData

Boolean

Opcional. Especifica si se exportan los datos sin procesar. Valor predeterminado: false.

Nodos secundarios: ninguno

Nodos principales: OutputSerialization

Nota
  • Si especifica OutputRawData en la solicitud, Object Storage Service (OSS) devuelve los datos según el elemento de la solicitud.

  • Si no especifica OutputRawData en la solicitud, OSS selecciona automáticamente un formato y devuelve los datos en dicho formato en la respuesta.

  • Si establece OutputRawData en true y la sentencia SQL enviada tarda mucho en devolver datos, la solicitud HTTP puede agotar el tiempo de espera.

CompressionType

Enumeración

El tipo de compresión del objeto. Valores válidos: None y GZIP.

Nodos secundarios: ninguno

Nodos principales: InputSerialization

FileHeaderInfo

Enumeración

Opcional. Especifica la información del encabezado CSV.

Valores válidos:

  • Use: El objeto CSV contiene información de encabezado. Puede usar los nombres de columna del objeto CSV como nombres de columna en la operación SelectObject.

  • Ignore: El objeto CSV contiene información de encabezado. Los nombres de columna del objeto CSV no se pueden usar como nombres de columna en la operación SelectObject.

  • None: El objeto CSV no contiene información de encabezado. Este es el valor predeterminado.

Nodos secundarios: ninguno

Nodos principales: CSV (entrada)

RecordDelimiter

String

Opcional. Especifica un salto de línea codificado en Base64. Valor predeterminado: \n. Antes de codificar el valor de este elemento, debe ser un valor ANSI de hasta dos caracteres de longitud. Por ejemplo, \n se usa para indicar un salto de línea en Java.

Nodos secundarios: ninguno

Nodos principales: CSV (entrada y salida) y JSON (salida)

FieldDelimiter

String

Opcional. Especifica el delimitador de columnas codificado en Base64 para el objeto CSV. Valor predeterminado: ,. Antes de codificar el valor de este elemento, debe ser un valor ANSI de un carácter de longitud. Por ejemplo, , se usa para indicar una coma en Java.

Nodos secundarios: ninguno

Nodos principales: CSV (entrada y salida)

QuoteCharacter

String

Opcional. Especifica un carácter de comillas codificado en Base64 para el objeto CSV. Valor predeterminado: \". En un objeto CSV, los saltos de línea y los delimitadores de columna entre comillas se procesan como caracteres normales. Antes de codificar el valor de este elemento, debe ser un valor ANSI de un carácter de longitud. Por ejemplo, \" se usa para indicar un carácter de comillas en Java.

Nodos secundarios: ninguno

Nodos principales: CSV (entrada)

CommentCharacter

String

El carácter de comentario que desea usar en el objeto CSV. El valor de este elemento debe estar codificado en Base64. Este elemento está vacío de forma predeterminada.

Range

String

Opcional. Especifica el rango de consulta. Métodos compatibles:

Nota

Se debe crear SelectMeta para los objetos que se consultan según Range.

  • Consulta por fila: line-range=start-end. Por ejemplo, line-range=10-20 indica que se escanean los datos desde la fila 10 hasta la fila 20.

  • Consulta por división: split-range=start-end. Por ejemplo, split-range=10-20 indica que se escanean los datos desde la división 10 hasta la división 20.

Los parámetros start y end son inclusivos. Los dos parámetros anteriores usan el mismo formato que el parámetro range en range get.

Este parámetro solo se puede usar si el objeto tiene formato CSV o si el tipo JSON es LINES.

Nodos secundarios: ninguno

Nodos principales: CSV (entrada) y JSON (salida)

KeepAllColumns

bool

Opcional. Especifica si todas las columnas del objeto CSV se incluyen en la respuesta. Valor predeterminado: false. Solo las columnas en la cláusula SELECT contienen valores. Las columnas en la respuesta se ordenan por número de columna en orden ascendente. Ejemplo:

select _5, _1 from ossobject.

Si establece KeepAllColumns en true y el objeto CSV incluye seis columnas, se devuelve el siguiente resultado para la cláusula SELECT anterior:

Value of 1st column,,,,Value of 5th column,\n

Nodos secundarios: ninguno

Nodos principales: OutputSerialization (CSV)

EnablePayloadCrc

bool

El valor CRC-32 para la verificación de cada trama. El cliente puede calcular el valor CRC-32 de cada carga útil y compararlo con el valor CRC-32 incluido para verificar la integridad de los datos.

Nodos secundarios: ninguno

Nodos principales: OutputSerialization

Options

Contenedor

Otros parámetros opcionales.

Nodos secundarios: SkipPartialDataRecord y MaxSkippedRecordsAllowed

Nodos principales: SelectRequest

OutputHeader

bool

Especifica si la información del encabezado del objeto CSV se incluye al inicio de la respuesta.

Valor predeterminado: false.

Nodos secundarios: ninguno

Nodos principales: OutputSerialization

SkipPartialDataRecord

bool

Especifica si se ignoran las filas en las que faltan datos. Si este parámetro se establece en false, OSS procesa los datos de la fila como null sin reportar errores. Si este parámetro se establece en true, se omiten las filas que no contienen datos. Si el número de filas omitidas ha superado el número máximo de filas que se pueden omitir, OSS reporta un error y detiene el procesamiento de los datos.

Valor predeterminado: false.

Nodos secundarios: ninguno

Nodos principales: Options

MaxSkippedRecordsAllowed

Int

El número máximo de filas que se pueden omitir. Si una fila no coincide con el tipo especificado en la sentencia SQL, o si faltan una o más columnas en una fila y el valor de SkipPartialDataRecord es true, las filas se omiten. Si el número de filas omitidas ha superado el valor de este parámetro, OSS reporta un error y detiene el procesamiento de los datos.

Nota

Si una fila en un objeto CSV no tiene el formato correcto, OSS detiene el procesamiento de los datos y reporta un error porque este error de formato puede provocar un análisis sintáctico incorrecto del objeto CSV. Por ejemplo, una columna en la fila incluye caracteres de comillas impares consecutivos. Este parámetro se puede usar para modificar la tolerancia a datos irregulares, pero no se puede configurar para objetos CSV no válidos.

Valor predeterminado: 0.

Nodos secundarios: ninguno

Nodos principales: Options

ParseJsonNumberAsString

bool

Especifica si se analizan sintácticamente los enteros y números de punto flotante en el objeto JSON como cadenas. La precisión de punto flotante disminuye cuando se analizan los números. Para conservar los datos sin procesar, establezca este parámetro en true. Use la función CAST en SQL para convertir los datos analizados al tipo requerido, como INT, DOUBLE o DECIMAL.

Valor predeterminado: false.

Nodos secundarios: ninguno

Nodos principales: JSON

AllowQuotedRecordDelimiter

bool

Especifica si el objeto CSV puede contener saltos de línea entre comillas (").

Por ejemplo, si el valor de una columna es "abc\ndef" y \n es un salto de línea, establezca este parámetro en true. Si este parámetro se establece en false, puede llamar a la operación SelectObject para especificar un rango en el encabezado de la solicitud y realizar consultas multiparte más eficientes.

Valor predeterminado: true.

Nodos secundarios: ninguno

Nodos principales: InputSerialization

Cuerpo de la respuesta

  • Si la respuesta devuelve el código de estado HTTP 4xx, la verificación de sintaxis SQL falló o la solicitud contiene errores. El formato del cuerpo del error es el mismo que el de los errores de GetObject.

  • Si la respuesta devuelve el código de estado HTTP 5xx, ocurrió un error interno del servidor. El formato del cuerpo del error es el mismo que el de los errores de GetObject.

  • El código de estado HTTP 206 indica éxito.

    • Si el valor del encabezado x-oss-select-output-raw es true, se devuelven los datos del objeto excepto los datos basados en tramas. El cliente puede obtener los datos de la misma manera que en la operación GetObject.

    • Si el valor de x-oss-select-output-raw es false, el resultado se devuelve como tramas.

  • Las tramas se devuelven en el formato Version|Frame-Type | Payload Length | Header Checksum | Payload | Payload Checksum<1 byte><--3 bytes--><---4 bytes----><-------4 bytes--><variable><----4bytes---------->.

    Nota

    El valor de Checksum en las tramas es CRC-32. Todos los enteros en una trama son big-endian. Actualmente, el valor de Version es 1.

Tipos de tramas

SelectObject admite tres tipos de tramas.

Tipo de trama

Valor

Formato de carga útil

Descripción

Data Frame

8388609

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

Los datos devueltos para la solicitud SelectObject. El valor del parámetro offset es un entero de 8 bits que indica la ubicación de escaneo actual (el desplazamiento desde el encabezado del archivo). Este parámetro se usa para reportar el progreso de la operación.

Continuous Frame

8388612

offset<----8 bytes-->

La trama utilizada para reportar el progreso de una operación y mantener una conexión HTTP. Si no se devuelven datos para una solicitud de consulta dentro de 5 segundos, se devuelve una trama continua.

End Frame

8388613

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

Una trama final se usa para devolver el estado final de una operación, incluidos los bytes escaneados y los posibles mensajes de error.

  • El parámetro offset indica el desplazamiento de ubicación final una vez completada la exploración.

  • El parámetro total scanned bytes indica el tamaño de los datos escaneados.

  • El parámetro http status code indica el estado final de la operación.

    Nota

    SelectObject es una operación de flujo. Solo se procesa el primer bloque de datos cuando se envía el encabezado de respuesta. Si el primer bloque de datos coincide con la sentencia SQL, el código de estado HTTP en el encabezado de respuesta es 206. Este código de estado indica que la operación es exitosa. Sin embargo, el código de estado final puede no ser 206 porque los bloques de datos subsiguientes pueden ser no válidos. El código de estado en el encabezado de respuesta no se puede cambiar. Se incluye un código de estado HTTP en la trama final para indicar el estado final de la operación. El cliente usa el código de estado incluido en la trama final para determinar si la operación fue exitosa.

  • El parámetro error message indica mensajes de error, incluido el número de cada fila omitida y el número total de filas omitidas.

    Nota

    El formato de los mensajes de error incluidos en una trama final es ErrorCodes.DetailMessage. La sección ErrorCodes contiene uno o más códigos de error separados por comas (,). ErrorCodes y DetailMessage están separados por un punto (.).

Solicitudes de ejemplo

Ejemplos para objetos CSV y JSON:

  • Solicitudes de ejemplo 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>
  • Solicitudes de ejemplo 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>

Sintaxis de sentencias SQL

La forma general de una sentencia SQL de SelectObject es SELECT select-list from table where_opt limit_opt.

Importante

Las siguientes palabras clave no se pueden cambiar: SELECT y 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

Se admiten las siguientes funciones: AVG, SUM, MAX, MIN, COUNT y CAST (función de conversión de tipos). Solo puede especificar un asterisco (*) después de COUNT.

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: incluye los siguientes operadores: >, <, >=, <=, ! =, =, ,, LIKE, +, -, *, /, % y ||.

  • cast: Puede usar la función CAST para convertir datos en una columna de un tipo a otro.

  • La combinación de una función de agregación y limit: Select avg(cast(_1 as int)) from ossobject limit 100. La sentencia anterior calcula el valor promedio de la primera columna en las primeras 100 filas. Esta función difiere de la sentencia admitida por MySQL porque solo se devuelve una sola fila para una función de agregación en operaciones SelectObject. Por lo tanto, no se configuran límites para el tamaño de los datos de salida. La operación limit se realiza antes de la operación de agregación cuando llama a SelectObject.

Límites de sentencias SQL

Las sentencias SQL tienen los siguientes límites:

  • Solo se admiten objetos de texto codificados en UTF-8 y objetos de texto UTF-8 comprimidos en formato GZIP. El formato deflate no es compatible con objetos GZIP.

  • Solo se puede consultar un único objeto cuando se usa una sentencia SQL. No se admiten las siguientes cláusulas: JOIN, ORDER BY, GROUP BY y HAVING.

  • Una cláusula WHERE no puede incluir condiciones de agregación. Por ejemplo, no se permite la siguiente cláusula: WHERE max(cast(age as int)) > 100.

  • Se puede especificar un máximo de 1,000 columnas para una sentencia SQL. El nombre de columna en una sentencia SQL puede tener hasta 1,024 bytes de longitud.

  • Se admite un máximo de cinco comodines (%) en una cláusula LIKE. El signo de porcentaje (%) y el asterisco () son comodines que indican cero o más caracteres. La palabra clave ESCAPE es compatible con cláusulas SQL LIKE y se usa para convertir caracteres especiales como signos de porcentaje (%), asteriscos () y signos de interrogación (?) en cadenas normales.

  • Se admite un máximo de 1,024 constantes en una cláusula IN.

  • La proyección especificada después de SELECT puede ser un nombre de columna, un índice de columna CSV (como _1 o _2), una función de agregación o una función CAST. No se admiten otras expresiones, como select _1 + _2 from ossobject.

  • El tamaño máximo de columna y de fila para un objeto CSV es de 256 KB.

  • Las rutas JSON especificadas después de FROM admiten nodos JSON cuyo tamaño máximo es de 512 KB. La ruta puede contener hasta 10 niveles y una matriz puede contener hasta 5,000 elementos. Los campos especificados después de SELECT y WHERE deben provenir de los nodos correspondientes a las rutas JSON especificadas después de FROM.

  • En sentencias SQL de un objeto JSON, las expresiones SELECT o WHERE no pueden incluir comodines de matriz ([]). Los comodines de matriz ([]) solo se pueden incluir en rutas JSON especificadas después de FROM. Por ejemplo, puede usar select from ossobject.contacts[] en lugar de select s.contacts[*] from ossobject s.

  • El tamaño máximo de una sentencia SQL es de 16 KB. Se pueden agregar hasta 20 expresiones después de WHERE. Cada sentencia admite hasta 10 niveles y 100 operaciones de agregación.

Manejo de errores de datos

A continuación se describen los escenarios de manejo de errores de datos.

  • Faltan algunas columnas en ciertas filas de un objeto CSV.

    Si no se especifica SkipPartialDataRecord o se establece en false, OSS calcula las expresiones en la sentencia SQL al procesar los valores de las columnas faltantes como null.

    Si SkipPartialDataRecord se establece en true, OSS ignora las filas donde faltan algunas columnas. En este caso, si no se especifica MaxSkippedRecordsAllowed o se establece en un valor menor que el número de filas omitidas, OSS reporta un error mediante el envío del código de estado HTTP 400 o la inclusión del código de estado HTTP 400 en el marco final.

    Suponga que se ejecuta la sentencia SQL select _1, _3 from ossobject y que los datos en una fila del objeto CSV son "John, Company A".

    • Si SkipPartialDataRecord se establece en false, se devuelve "John,\n".

    • Si SkipPartialDataRecord se establece en true, se omite esta fila.

  • Faltan algunas claves en un objeto JSON.

    Algunos objetos JSON pueden excluir las claves especificadas en la sentencia SQL.

    • Si no se especifica SkipPartialDataRecord o se establece en false, OSS calcula las expresiones en la sentencia SQL al procesar las claves faltantes como null.

    • Si SkipPartialDataRecord se establece en true, OSS omite los datos en el nodo JSON. En este caso, si no se especifica MaxSkippedRecordsAllowed o se establece en un valor menor que el número de filas omitidas, OSS reporta un error mediante el envío del código de estado HTTP 400 o la inclusión del código de estado HTTP 400 en el marco final.

    Suponga que se ejecuta la sentencia SQL select s.firstName, s.lastName , s.age from ossobject.contacts[*] s y que el valor de un nodo JSON es {"firstName":"John", "lastName":"Smith"}.

    • Si no se especifica SkipPartialDataRecord o se establece en false, se devuelve {"firstName":"John", "lastName":"Smith"}.

    • Si SkipPartialDataRecord se establece en true, se omite esta fila.

    Nota

    Para las claves en los datos devueltos de una solicitud de objetos JSON, los objetos JSON de salida solo pueden ser LINES. El valor Key en la salida se devuelve según las siguientes reglas:

    • Suponga que se ejecuta la sentencia SQL select * from ossobject…. Si corresponde a un objeto JSON ({...}), se devuelve el objeto JSON. Si corresponde a una cadena o a una matriz, la cadena o matriz se devuelve como DummyKey _1.

      Si se usa {"Age":5}select * from ossobject.Age s where s = 5, se devuelve {"_1":5} porque el valor 5 correspondiente a * no es un objeto JSON. Cuando se ejecuta la sentencia SQL select * from ossobject s where s.Age = 5, se devuelve {"Age":5} correspondiente a *.

    • Si la sentencia SQL no usa select * sino que especifica columnas, el contenido devuelto tiene el formato {"{Column 1}": Value, "{Column 2}": Value...}. {Column n} puede generarse mediante los siguientes métodos:

      • Si se especifica el alias de la columna en la cláusula SELECT, el alias entra en vigor.

      • Si el nombre de la columna es la clave de un objeto JSON, esta clave se usa como el valor de clave de salida.

      • Si la columna es un elemento de una matriz JSON o una función de agregación, anteponga al nombre de la columna el número de serie (comenzando desde 1) y un guion bajo (_) como valor de clave de salida.

      Suponga que se usa {"contacts":{"Age":35, "Children":["child1", "child2", "child3"]}}:

      • Cuando se ejecuta la sentencia SQL select s.contacts.Age, s.contacts.Children[0] from ossobjects, Age es la clave del objeto JSON de entrada, y Children[0] indica el primer elemento de la matriz Children y es la segunda columna en el contenido de salida. En este caso, se devuelve {"Age":35, "_2":"child1"}.

      • Cuando se ejecuta la sentencia SQL select max(cast(s.Age as int)) from ossobject.contacts s y la columna seleccionada es una función de agregación, a la columna se le antepone _1 y su número de serie en la salida. En este caso, se devuelve {"_1":35}.

      • Cuando se especifica el alias de la columna en la sentencia SQL select s.contacts.Age, s.contacts.Children[0] as firstChild from ossobject, se devuelve {"Age":35, "firstChild":"child1"}.

    • Las claves que coinciden con los objetos JSON y las sentencias SQL distinguen entre mayúsculas y minúsculas. Por ejemplo, "select s. Age" y "select s. age" son diferentes.

  • El tipo de datos de algunas columnas en un objeto CSV no coincide con el tipo de datos especificado en la sentencia SQL.

    Si el tipo de datos de una fila en un objeto CSV no coincide con el tipo especificado en la sentencia SQL, la fila se omite. Si el número de filas omitidas supera el valor de MaxSkippedRecordsAllowed, OSS detiene el procesamiento de datos y devuelve el código de estado HTTP 400.

    Suponga que se ejecuta la sentencia SQL select _1, _3 from ossobject where _3 > 5. Si el valor de una fila en el objeto CSV es John, Company A, To be hired, esta fila se omite porque la tercera columna de la fila no es de tipo entero.

  • El tipo de datos de algunas claves en un objeto JSON no coincide con el tipo de datos especificado en la sentencia SQL.

    Suponga que se ejecuta la sentencia SQL select s.name from ossobject s where s.aliren_age > 5. Si el valor de un nodo JSON es {"Name":"John", "Career_age": To be hired}, este nodo se omite.

Formatos de hora compatibles

La siguiente tabla enumera los formatos que pueden convertirse a una marca de tiempo sin necesidad de especificar el formato de hora. Por ejemplo, la cadena cast­('20121201' as timestamp) se analiza automáticamente como una marca de tiempo del 1 de diciembre de 2012.

Formato

Descripción

YYYYMMDD

año mes día

YYYY/MM/DD

año/mes/día

DD/MM/YYYY/

día/mes/año

YYYY-MM-DD

año-mes-día

DD-MM-YY

día-mes-año

DD.MM.YY

día. mes. año

HH:MM:SS.mss

hora:minuto:segundo. milisegundo

HH:MM:SS

hora:minuto:segundo

HH MM SS mss

hora minuto segundo milisegundo

HH.MM.SS.mss

hora. minuto. segundo. milisegundo

HHMM

hora minuto

HHMMSSmss

hora minuto segundo milisegundo

YYYYMMDD HH:MM:SS.mss

año mes día hora:minuto:segundo. milisegundo

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

año/mes/día hora:minuto:segundo. milisegundo

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

día/mes/año hora:minuto:segundo. milisegundo

YYYYMMDD HH:MM:SS

año mes día hora:minuto:segundo

YYYY/MM/DD HH:MM:SS

año/mes/día hora:minuto:segundo

DD/MM/YYYY HH:MM:SS

día/mes/año hora:minuto:segundo

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

año-mes-día hora:minuto:segundo. milisegundo

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

día-mes-año hora:minuto:segundo. milisegundo

YYYY-MM-DD HH:MM:SS

año-mes-día hora:minuto:segundo

YYYYMMDDTHH:MM:SS

año mes día T hora:minuto:segundo

YYYYMMDDTHH:MM:SS.mss

año mes día T hora:minuto:segundo. milisegundo

DD-MM-YYYYTHH:MM:SS.mss

día-mes-año T hora:minuto:segundo. milisegundo

DD-MM-YYYYTHH:MM:SS

día-mes-año T hora:minuto:segundo

YYYYMMDDTHHMM

año mes día T hora minuto

YYYYMMDDTHHMMSS

año mes día T hora minuto segundo

YYYYMMDDTHHMMSSMSS

año mes día T hora minuto segundo milisegundo

ISO8601-0

año-mes-día T hora:minuto+hora:minuto, o año-mes-día T hora: minuto-hora:minuto

"+" indica que la hora local en la zona horaria actual es posterior a la hora UTC estándar. "-" indica que la hora local en la zona horaria actual es anterior a la hora UTC estándar. En este formato, se puede usar ISO8601-0.

ISO8601-1

año-mes-día T hora:minuto+hora:minuto, o año-mes-día T hora: minuto-hora:minuto

"+" indica que la hora local en la zona horaria actual es posterior a la hora UTC estándar. "-" indica que la hora local en la zona horaria actual es anterior a la hora UTC estándar. En este formato, se puede usar ISO 8601-1.

CommonLog

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

RFC822

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

?D/?M/YY

día/mes/año, donde el día y el mes pueden tener uno o dos dígitos.

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

día/mes/año/hora:minuto, donde el día, mes, hora y minuto pueden tener uno o dos dígitos.

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

día/mes/año/hora:minuto:segundo, donde el día, mes, hora, minuto y segundo pueden tener uno o dos dígitos.

La siguiente tabla enumera los formatos que pueden causar errores. Debe especificar un formato de hora cuando use cadenas en estos formatos. Por ejemplo, la sentencia cast('20121201' as timestamp format 'YYYYDDMM') analiza incorrectamente la cadena 20121201 como el 12 de enero de 2012.

Formato

Descripción

YYYYDDMM

año día mes

YYYY/DD/MM

año/día/mes

MM/DD/YYYY

mes/día/año

YYYY-DD-MM

año-día-mes

MM-DD-YYYY

mes-día-año

MM.DD.YYYY

mes. día. año

Códigos de error

SelectObject devuelve códigos de error de dos maneras:

  • El código de estado HTTP se incluye en el encabezado de respuesta y el código de error se incluye en el cuerpo de respuesta, igual que en otras solicitudes de OSS. Los códigos de error devueltos de esta manera indican que ocurrieron errores de entrada, como una sentencia SQL no válida o errores de datos.

  • El código de error se incluye en el marco final del cuerpo de respuesta. Los códigos de error devueltos de esta manera indican que los datos son incorrectos o no coinciden con el tipo de datos especificado en la sentencia SQL. Por ejemplo, existe una cadena en una columna cuyo tipo se estableció como entero en la sentencia SQL. En este caso, se procesa parte de los datos y luego se envían al cliente el código de estado HTTP 206 y los datos procesados.

Códigos de error como InvalidCSVLine pueden devolverse como un código de estado HTTP en el encabezado de respuesta o como un código de estado en el marco final, dependiendo de la ubicación de la fila con error dentro del objeto CSV.

ErrorCode

Descripción

Código de estado HTTP

Código de estado HTTP en el marco final

InvalidSqlParameter

Mensaje de error devuelto porque el parámetro SQL especificado no existe.

La sentencia SQL en la solicitud es nula, el tamaño de la sentencia SQL ha superado el límite superior o la sentencia SQL no está codificada en Base64.

400

Ninguna

InvalidInputFieldDelimiter

Mensaje de error devuelto porque el objeto CSV de entrada contiene delimitadores de columna no válidos.

El parámetro no está codificado en Base64 o el tamaño del parámetro es mayor a 1 byte después de decodificarlo.

400

Ninguna

InvalidInputRecordDelimiter

Mensaje de error devuelto porque el objeto CSV de entrada contiene delimitadores de fila no válidos. El parámetro no está codificado en Base64 o el tamaño del parámetro es mayor a 2 bytes después de decodificarlo.

400

Ninguna

InvalidInputQuote

Mensaje de error devuelto porque el objeto CSV de entrada contiene caracteres de comillas no válidos. El parámetro no está codificado en Base64 o el tamaño del parámetro es mayor a 1 byte después de decodificarlo.

400

Ninguna

InvalidOutputFieldDelimiter

Mensaje de error devuelto porque el objeto CSV de salida contiene delimitadores de columna no válidos. El parámetro no está codificado en Base64 o el tamaño del parámetro es mayor a 1 byte después de decodificarlo.

400

Ninguna

InvalidOutputRecordDelimiter

Mensaje de error devuelto porque el objeto CSV de salida contiene delimitadores de fila no válidos. El parámetro no está codificado en Base64 o el tamaño del parámetro es mayor a 2 bytes después de decodificarlo.

400

Ninguna

UnsupportedCompressionFormat

Mensaje de error devuelto porque el valor del parámetro Compression no es NONE ni GZIP. El valor no distingue entre mayúsculas y minúsculas.

400

Ninguna

InvalidCommentCharacter

Mensaje de error devuelto porque el objeto CSV contiene caracteres de comentario no válidos. El parámetro no está codificado en Base64 o el tamaño del parámetro es mayor a 1 byte después de decodificarlo.

400

Ninguna

InvalidRange

Mensaje de error devuelto porque al parámetro Range no se le antepone line-range= o split-range=, o el valor de rango no cumple con el estándar HTTP para Range.

400

Ninguna

DecompressFailure

Mensaje de error devuelto porque el valor de Compression es GZIP y el objeto no se puede extraer.

400

Ninguna

InvalidMaxSkippedRecordsAllowed

Mensaje de error devuelto porque el valor de MaxSkippedRecordsAllowed no es un entero.

400

Ninguna

SelectCsvMetaUnavailable

Mensaje de error devuelto porque el objeto no incluye metadatos CSV cuando se especifica el parámetro Range. Llame primero a la operación CreateSelectObjectMeta.

400

Ninguna

InvalidTextEncoding

Mensaje de error devuelto porque el objeto no tiene codificación UTF-8.

400

Ninguna

InvalidOSSSelectParameters

Mensaje de error devuelto porque los parámetros EnablePayloadCrc y OutputRawData están establecidos en true. Esto genera conflictos.

400

Ninguna

InternalError

Mensaje de error devuelto porque ocurrió un error del sistema OSS.

500 o 206

500 o Ninguna

SqlSyntaxError

Mensaje de error devuelto porque la sintaxis de la sentencia SQL decodificada en Base64 no es válida.

400

Ninguna

SqlExceedsMaxInCount

Mensaje de error devuelto porque el número de valores incluidos en la cláusula SQL IN ha superado 1,024.

400

Ninguna

SqlExceedsMaxColumnNameLength

Mensaje de error devuelto porque el tamaño del nombre de la columna ha superado 1,024 bytes.

400

Ninguna

SqlInvalidColumnIndex

Mensaje de error devuelto porque el índice de columna en la sentencia SQL tiene una longitud menor a 1 byte o mayor a 1,000 bytes.

400

Ninguna

SqlAggregationOnNonNumericType

Mensaje de error devuelto porque se usa una función de agregación en una columna no numérica.

400

Ninguna

SqlInvalidAggregationOnTimestamp

Mensaje de error devuelto porque se usa la función de agregación SUM o AVG en la columna de marca de tiempo.

400

Ninguna

SqlValueTypeOfInMustBeSame

Mensaje de error devuelto porque se incluyen valores de diferentes tipos en la cláusula SQL IN.

400

Ninguna

SqlInvalidEscapeChar

Mensaje de error devuelto porque se especificó un carácter de escape no válido, como un signo de interrogación (?), un signo de porcentaje (%) o un asterisco (*), en la cláusula SQL LIKE.

400

Ninguna

SqlOnlyOneEscapeCharIsAllowed

Mensaje de error devuelto porque el tamaño del carácter de escape en la cláusula SQL LIKE tiene una longitud mayor a 1 byte.

400

Ninguna

SqlNoCharAfterEscapeChar

Mensaje de error devuelto porque no se especificaron caracteres después del carácter de escape en la cláusula SQL LIKE.

400

Ninguna

SqlInvalidLimitValue

Mensaje de error devuelto porque el número especificado después de la cláusula SQL Limit es menor que 1.

400

Ninguna

SqlExceedsMaxWildCardCount

Mensaje de error devuelto porque el número de asteriscos (*) o signos de porcentaje (%) en la cláusula SQL LIKE ha superado el límite superior.

400

Ninguna

SqlExceedsMaxConditionCount

Mensaje de error devuelto porque el número de expresiones condicionales en la cláusula SQL WHERE ha superado el límite superior.

400

Ninguna

SqlExceedsMaxConditionDepth

Mensaje de error devuelto porque la profundidad del árbol condicional en la cláusula SQL WHERE ha superado el límite superior.

400

Ninguna

SqlOneColumnCastToDifferentTypes

Mensaje de error devuelto porque una columna se convierte a diferentes tipos al incluir la función CAST en la sentencia SQL.

400

Ninguna

SqlOperationAppliedToDifferentTypes

Mensaje de error devuelto porque se usa un operador para dos objetos de diferentes tipos en la sentencia SQL. Por ejemplo, este código de error se devuelve si col1 en _col1 > 3 es una cadena.

400

Ninguna

SqlInvalidColumnName

Mensaje de error devuelto porque un nombre de columna usado en la sentencia SQL no está incluido en el encabezado del objeto CSV.

400

Ninguna

SqlNotSupportedTimestampFormat

Mensaje de error devuelto porque el formato de marca de tiempo especificado en la cláusula SQL CAST no es compatible.

400

Ninguna

SqlNotMatchTimestampFormat

Mensaje de error devuelto porque el formato de marca de tiempo especificado en la cláusula SQL CAST no coincide con la cadena de marca de tiempo.

400

Ninguna

SqlInvalidTimestampValue

Mensaje de error devuelto porque no se especificaron formatos de marca de tiempo en la cláusula SQL CAST y la cadena especificada no puede convertirse a una marca de tiempo.

400

Ninguna

SqlInvalidLikeOperand

Mensaje de error devuelto porque no se especificaron nombres de columna o índices en el lado izquierdo en la cláusula SQL LIKE, la columna especificada en el lado izquierdo no es de tipo cadena, o la columna en el lado derecho en la cláusula LIKE es de tipo cadena.

400

Ninguna

SqlInvalidMixOfAggregationAndColumn

Mensaje de error devuelto porque la cláusula SQL SELECT incluye nombres de columna e índices tanto para funciones de agregación como para funciones que no son de agregación.

400

Ninguna

SqlExceedsMaxAggregationCount

Mensaje de error devuelto porque el número de funciones de agregación incluidas en la cláusula SQL SELECT ha superado el límite superior.

400

Ninguna

SqlInvalidMixOfStarAndColumn

Mensaje de error devuelto porque se incluyen un asterisco (*), un nombre de columna y un índice de columna en la misma sentencia SQL.

400

Ninguna

SqlInvalidKeepAllColumnsWithAggregation

Mensaje de error devuelto porque la sentencia SQL incluye funciones de agregación y el parámetro KeepAllColumns está establecido en true.

400

Ninguna

SqlInvalidKeepAllColumnsWithDuplicateColumn

Mensaje de error devuelto porque la sentencia SQL incluye nombres de columna o índices de columna repetidos y el parámetro KeepAllColumns está establecido en true.

400

Ninguna

SqlInvalidSqlAfterAnalysis

Mensaje de error devuelto porque la sentencia SQL es compleja y la sentencia SQL analizada no es compatible.

400

Ninguna

InvalidArithmeticOperand

Mensaje de error devuelto porque la sentencia SQL contiene operaciones aritméticas realizadas sobre constantes o columnas no numéricas.

400

Ninguna

SqlInvalidAndOperand

Mensaje de error devuelto porque las expresiones unidas por el operador AND en la sentencia SQL no son de tipo booleano.

400

Ninguna

SqlInvalidOrOperand

Mensaje de error devuelto porque las expresiones unidas por el operador OR en la sentencia SQL no son de tipo booleano.

400

Ninguna

SqlInvalidNotOperand

Mensaje de error devuelto porque las expresiones unidas por el operador NOT en la sentencia SQL no son de tipo booleano.

400

Ninguna

SqlInvalidIsNullOperand

Mensaje de error devuelto porque la sentencia SQL especifica operaciones basadas en el operador IS NULL realizadas sobre una constante.

400

Ninguna

SqlComparerOperandTypeMismatch

Mensaje de error devuelto porque la sentencia SQL especifica operaciones basadas en operadores de comparación realizadas sobre dos objetos de diferentes tipos.

400

Ninguna

SqlInvalidConcatOperand

Mensaje de error devuelto porque la sentencia SQL contiene dos constantes unidas por el operador de concatenación (

).

400

Ninguna

SqlUnsupportedSql

Mensaje de error devuelto porque la sentencia SQL es compleja y el tamaño del plan SQL generado ha superado el límite superior.

400

Ninguna

HeaderInfoExceedsMaxSize

Mensaje de error devuelto porque el tamaño de la información de encabezado especificada en la sentencia SQL ha superado el límite superior.

400

Ninguna

OutputExceedsMaxSize

Mensaje de error devuelto porque el tamaño de una fila en la salida ha superado el límite superior.

400

Ninguna

InvalidCsvLine

Mensaje de error devuelto porque una fila en el objeto CSV no es válida o el tamaño de la fila ha superado el límite superior, o porque el número de filas omitidas ha superado el valor de MaxSkippedRecordsAllowed.

400 o 206

400 o Ninguna

NegativeRowIndex

Mensaje de error devuelto porque el valor del índice de matriz en la sentencia SQL es un número negativo.

400

Ninguna

ExceedsMaxNestedColumnDepth

Mensaje de error devuelto porque el número de niveles anidados del objeto JSON en la sentencia SQL ha superado el límite superior.

400

Ninguna

NestedColumnNotSupportInCsv

Mensaje de error devuelto porque la sentencia SQL contiene columnas anidadas que incluyen puntos (.) o matrices que incluyen corchetes ([]). Los caracteres anteriores no son compatibles con sentencias SQL de objetos CSV.

400

Ninguna

TableRootNodeOnlySupportInJson

Mensaje de error devuelto porque no se especificó la ruta del nodo raíz después de From ossobject en objetos JSON.

400

Ninguna

JsonNodeExceedsMaxSize

Mensaje de error devuelto porque el tamaño del nodo raíz en el objeto JSON ha superado el límite superior.

400 o 206

400 o Ninguna

InvalidJsonData

Mensaje de error devuelto porque los datos JSON tienen un formato incorrecto.

400 o 206

400 o Ninguna

ExceedsMaxJsonArraySize

Mensaje de error devuelto porque el número de elementos en una matriz en el nodo raíz del objeto JSON ha superado el límite superior.

400 o 206

400 o Ninguna

WildCardNotAllowed

Mensaje de error devuelto porque no se pueden usar asteriscos (*) en cláusulas SQL SELECT o cláusulas SQL WHERE para el objeto JSON. Por ejemplo, se devuelve un error si ejecuta la siguiente sentencia: select s.a.b[*] from ossobject where a.c[*] > 0.

400

Ninguna

JsonNodeExceedsMaxDepth

Mensaje de error devuelto porque la profundidad del nodo raíz del objeto JSON ha superado el límite superior.

400 o 206

400 o Ninguna

ossutil

Para obtener información sobre el comando ossutil correspondiente a la operación SelectObject, consulte select-object.