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
|
|
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:
Nodos secundarios: ninguno Nodos principales: CSV (entrada) |
|
RecordDelimiter |
String |
Opcional. Especifica un salto de línea codificado en Base64. Valor predeterminado: 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: 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: 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.
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:
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---------->.NotaEl 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.
|
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.
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
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 ossobjecty 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[*] sy 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.
NotaPara 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 SQLselect * 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 sy 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 esJohn, 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: |
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.