Exécute des instructions SQL sur un objet cible et renvoie les résultats.
Notes d'utilisation
Vous devez disposer des autorisations de lecture sur l'objet.
Une instruction SQL valide renvoie le code d'état HTTP 206. Une instruction SQL invalide ou ne correspondant pas aux données renvoie le code d'état HTTP 400.
Lorsque vous utilisez l'API SelectObject pour interroger des données, la facturation est basée sur le volume réel de données analysées à partir de l'objet source. Pour plus d'informations, consultez la section Frais de traitement des données.
Syntaxe de la requête
La syntaxe de la requête diffère selon que l'objet est au format CSV ou JSON.
-
Syntaxe de la requête pour les objets 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> -
Syntaxe de la requête pour les objets 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>
Éléments de la requête
|
Élément |
Type |
Description |
|
SelectRequest |
Conteneur |
Conteneur qui stocke la requête SelectObject. Nœuds enfants : Expression, InputSerialization et OutputSerialization Nœuds parents : aucun |
|
Expression |
Chaîne |
Instruction SQL encodée en Base64. Nœuds enfants : aucun Nœud parent : SelectRequest |
|
InputSerialization |
Conteneur |
Facultatif. Spécifie les paramètres de sérialisation d'entrée. Nœuds enfants : CompressionType, CSV et JSON Nœud parent : SelectRequest |
|
OutputSerialization |
Conteneur |
Facultatif. Spécifie les paramètres de sérialisation de sortie. Nœuds enfants : CSV, JSON et OutputRawData Nœud parent : SelectRequest |
|
CSV(InputSerialization) |
Conteneur |
Facultatif. Spécifie les paramètres de sérialisation d'entrée pour les objets CSV. Nœuds enfants : FileHeaderInfo, RecordDelimiter, FieldDelimiter, QuoteCharacter, CommentCharacter et Range Nœud parent : InputSerialization |
|
CSV(OutputSerialization) |
Conteneur |
Facultatif. Spécifie les paramètres de sérialisation de sortie pour les objets CSV. Nœuds enfants : RecordDelimiter et FieldDelimiter Nœud parent : OutputSerialization |
|
JSON(InputSerialization) |
Conteneur |
Facultatif. Spécifie les paramètres de sérialisation d'entrée pour les objets JSON. Nœuds enfants : Type, Range et ParseJsonNumberAsString |
|
JSON(OutputSerialization) |
Conteneur |
Facultatif. Spécifie les paramètres de sérialisation de sortie pour les objets JSON. Nœuds enfants : RecordDelimiter |
|
Type |
Énumération |
Type de l'objet JSON d'entrée. Valeurs valides : DOCUMENT et LINES. |
|
OutputRawData |
Booléen |
Facultatif. Indique s'il faut exporter les données brutes. Valeur par défaut : false. Nœuds enfants : aucun Nœud parent : OutputSerialization Remarque
|
|
CompressionType |
Énumération |
Type de compression de l'objet. Valeurs valides : None et GZIP. Nœuds enfants : aucun Nœud parent : InputSerialization |
|
FileHeaderInfo |
Énumération |
Facultatif. Spécifie les informations d'en-tête du fichier CSV. Valeurs valides :
Nœuds enfants : aucun Nœud parent : CSV (entrée) |
|
RecordDelimiter |
Chaîne |
Facultatif. Spécifie un saut de ligne encodé en Base64. Valeur par défaut : Nœuds enfants : aucun Nœuds parents : CSV (entrée et sortie) et JSON (sortie) |
|
FieldDelimiter |
Chaîne |
Facultatif. Spécifie le délimiteur de colonne encodé en Base64 pour l'objet CSV. Valeur par défaut : Nœuds enfants : aucun Nœuds parents : CSV (entrée et sortie) |
|
QuoteCharacter |
Chaîne |
Facultatif. Spécifie un caractère de guillemet encodé en Base64 pour l'objet CSV. Valeur par défaut : Nœuds enfants : aucun Nœud parent : CSV (entrée) |
|
CommentCharacter |
Chaîne |
Caractère de commentaire à utiliser dans l'objet CSV. La valeur de cet élément doit être encodée en Base64. Cet élément est vide par défaut. |
|
Range |
Chaîne |
Facultatif. Spécifie la plage de la requête. Méthodes prises en charge : Remarque
SelectMeta doit être créé pour les objets interrogés en fonction de la plage (Range).
Les paramètres de début et de fin sont inclusifs. Ces deux paramètres utilisent le même format que le paramètre range dans une requête de plage (range get). Ce paramètre ne peut être utilisé que si l'objet est au format CSV ou si le type JSON est LINES. Nœuds enfants : aucun Nœuds parents : CSV (entrée) et JSON (sortie) |
|
KeepAllColumns |
bool |
Facultatif. Indique si toutes les colonnes de l'objet CSV sont incluses dans la réponse. Valeur par défaut : false. Seules les colonnes de la clause SELECT contiennent des valeurs. Les colonnes de la réponse sont triées par numéro de colonne dans l'ordre croissant. Exemple :
Si vous définissez KeepAllColumns sur true et que l'objet CSV comprend six colonnes, le résultat suivant est renvoyé pour la clause SELECT précédente : Valeur de la 1re colonne,,,,Valeur de la 5e colonne,\n Nœuds enfants : aucun Nœud parent : OutputSerialization (CSV) |
|
EnablePayloadCrc |
bool |
Valeur CRC-32 pour la vérification de chaque trame. Le client peut calculer la valeur CRC-32 de chaque charge utile et la comparer à la valeur CRC-32 incluse pour vérifier l'intégrité des données. Nœuds enfants : aucun Nœud parent : OutputSerialization |
|
Options |
Conteneur |
Autres paramètres facultatifs. Nœuds enfants : SkipPartialDataRecord et MaxSkippedRecordsAllowed Nœud parent : SelectRequest |
|
OutputHeader |
bool |
Indique si les informations d'en-tête de l'objet CSV sont incluses au début de la réponse. Valeur par défaut : false. Nœuds enfants : aucun Nœud parent : OutputSerialization |
|
SkipPartialDataRecord |
bool |
Indique s'il faut ignorer les lignes contenant des données manquantes. Si ce paramètre est défini sur false, OSS traite les données de la ligne comme nulles sans signaler d'erreur. Si ce paramètre est défini sur true, les lignes ne contenant pas de données sont ignorées. Si le nombre de lignes ignorées dépasse le nombre maximal de lignes pouvant être ignorées, OSS signale une erreur et arrête le traitement des données. Valeur par défaut : false. Nœuds enfants : aucun Nœud parent : Options |
|
MaxSkippedRecordsAllowed |
Int |
Nombre maximal de lignes pouvant être ignorées. Si une ligne ne correspond pas au type spécifié dans l'instruction SQL, ou si une ou plusieurs colonnes d'une ligne sont manquantes et que la valeur de SkipPartialDataRecord est true, les lignes sont ignorées. Si le nombre de lignes ignorées dépasse la valeur de ce paramètre, OSS signale une erreur et arrête le traitement des données. Remarque
Si une ligne d'un objet CSV n'est pas correctement formatée, OSS arrête le traitement des données et signale une erreur, car cette erreur de formatage peut entraîner une analyse incorrecte de l'objet CSV. Par exemple, une colonne de la ligne contient un nombre impair continu de caractères de guillemet. Ce paramètre permet de modifier la tolérance aux données irrégulières, mais ne peut pas être configuré pour des objets CSV non valides. Valeur par défaut : 0. Nœuds enfants : aucun Nœud parent : Options |
|
ParseJsonNumberAsString |
bool |
Indique s'il faut analyser les entiers et les nombres à virgule flottante de l'objet JSON sous forme de chaînes. La précision des nombres à virgule flottante diminue lors de l'analyse. Pour conserver les données brutes, définissez ce paramètre sur true. Utilisez la fonction CAST en SQL pour convertir les données analysées vers le type requis, tel que INT, DOUBLE ou DECIMAL. Valeur par défaut : false. Nœuds enfants : aucun Nœud parent : JSON |
|
AllowQuotedRecordDelimiter |
bool |
Indique si l'objet CSV peut contenir des sauts de ligne entre guillemets ("). Par exemple, si la valeur d'une colonne est "abc\ndef" et que \n est un saut de ligne, définissez ce paramètre sur true. Si ce paramètre est défini sur false, vous pouvez appeler l'opération SelectObject pour spécifier une plage dans l'en-tête de la requête afin d'effectuer des requêtes multipartites plus efficaces. Valeur par défaut : true. Nœuds enfants : aucun Nœud parent : InputSerialization |
Corps de la réponse
Si la réponse renvoie le code d'état HTTP 4xx, la vérification de la syntaxe SQL a échoué ou la requête contient des erreurs. Le format du corps d'erreur est identique à celui des erreurs GetObject.
Si la réponse renvoie le code d'état HTTP 5xx, une erreur interne du serveur s'est produite. Le format du corps d'erreur est identique à celui des erreurs GetObject.
-
Le code d'état HTTP 206 indique un succès.
Si la valeur de l'en-tête x-oss-select-output-raw est true, les données de l'objet, à l'exception des données basées sur des trames, sont renvoyées. Le client peut obtenir les données de la même manière que lors de l'opération GetObject.
Si la valeur de x-oss-select-output-raw est false, le résultat est renvoyé sous forme de trames.
-
Les trames sont renvoyées au format
Version|Frame-Type | Payload Length | Header Checksum | Payload | Payload Checksum<1 byte><--3 bytes--><---4 bytes----><-------4 bytes--><variable><----4bytes---------->.RemarqueLa valeur de Checksum dans les trames est CRC-32. Tous les entiers d'une trame sont en ordre big-endian. Actuellement, la valeur de Version est 1.
Types de trame
SelectObject prend en charge trois types de trames.
|
Type de trame |
Valeur |
Format de la charge utile |
Description |
|
Data Frame |
8388609 |
offset | data<-8 bytes><---variable-> |
Données renvoyées pour la requête SelectObject. La valeur du paramètre offset est un entier de 8 bits qui indique l'emplacement d'analyse actuel (le décalage par rapport à l'en-tête du fichier). Ce paramètre sert à signaler la progression de l'opération. |
|
Continuous Frame |
8388612 |
offset<----8 bytes--> |
Trame utilisée pour signaler la progression d'une opération et maintenir une connexion HTTP. Si aucune donnée n'est renvoyée pour une requête dans un délai de 5 secondes, une trame continue est retournée. |
|
End Frame |
8388613 |
offset | total scanned bytes | http status code | error message<--8bytes-><--8bytes---------><----4 bytes--------><-variable------> |
Une trame de fin permet de renvoyer l'état final d'une opération, y compris le nombre d'octets analysés et les éventuels messages d'erreur.
|
Exemples de requêtes
Exemples pour les objets CSV et JSON :
-
Exemples de requêtes pour les objets 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> -
Exemples de requêtes pour les objets 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>
Syntaxe des instructions SQL
La forme générale d'une instruction SQL SelectObject est SELECT select-list from table where_opt limit_opt.
Les mots-clés suivants ne peuvent pas être modifiés : SELECT et 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
Les fonctions suivantes sont prises en charge : AVG, SUM, MAX, MIN, COUNT et CAST (fonction de conversion de type). Vous ne pouvez spécifier qu'un astérisque (*) après 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 : inclut les opérateurs suivants :
>,<,>=,<=,! =,=,,,LIKE,+,-,*,/,%, et||.cast : vous pouvez utiliser la fonction CAST pour convertir les données d'une colonne d'un type vers un autre.
Combinaison d'une fonction d'agrégation et de limit :
Select avg(cast(_1 as int)) from ossobject limit 100. L'instruction précédente calcule la valeur moyenne de la première colonne sur les 100 premières lignes. Cette fonction diffère de l'instruction prise en charge par MySQL, car une seule ligne est renvoyée pour une fonction d'agrégation dans les opérations SelectObject. Par conséquent, aucune limite n'est configurée pour la taille des données de sortie. L'opération limit est effectuée avant l'opération d'agrégation lorsque vous appelez SelectObject.
Limites des instructions SQL
Les instructions SQL présentent les limites suivantes :
Seuls les objets texte encodés en UTF-8 et les objets texte UTF-8 compressés au format GZIP sont pris en charge. Le format deflate n'est pas pris en charge pour les objets GZIP.
Un seul objet peut être interrogé lors de l'utilisation d'une instruction SQL. Les clauses suivantes ne sont pas prises en charge : JOIN, ORDER BY, GROUP BY et HAVING.
Une clause WHERE ne peut pas inclure de conditions d'agrégation. Par exemple, la clause suivante n'est pas autorisée : WHERE max(cast(age as int)) > 100.
Un maximum de 1 000 colonnes peut être spécifié pour une instruction SQL. Le nom de colonne dans une instruction SQL peut comporter jusqu'à 1 024 octets.
Un maximum de cinq caractères génériques (%) est pris en charge dans une clause LIKE. Le signe pourcentage (%) et l'astérisque () sont des caractères génériques qui indiquent zéro ou plusieurs caractères. Le mot-clé ESCAPE est pris en charge pour les clauses SQL LIKE et permet de convertir des caractères spéciaux tels que les signes pourcentage (%), les astérisques () et les points d'interrogation (?) en chaînes normales.
Un maximum de 1 024 constantes est pris en charge dans une clause IN.
La projection spécifiée après SELECT peut être un nom de colonne, un index de colonne CSV (tel que _1 ou _2), une fonction d'agrégation ou une fonction CAST. D'autres expressions ne sont pas prises en charge, telles que select _1 + _2 from ossobject.
La taille maximale de colonne et de ligne pour un objet CSV est de 256 Ko.
Les chemins JSON spécifiés après FROM prennent en charge les nœuds JSON dont la taille maximale est de 512 Ko. Le chemin peut contenir jusqu'à 10 niveaux et un tableau peut contenir jusqu'à 5 000 éléments. Les champs spécifiés après SELECT et WHERE doivent provenir des nœuds correspondant aux chemins JSON spécifiés après FROM.
Dans les instructions SQL d'un objet JSON, les expressions SELECT ou WHERE ne peuvent pas inclure de caractères génériques de tableau ([]). Les caractères génériques de tableau ([]) ne peuvent être inclus que dans les chemins JSON spécifiés après FROM. Par exemple, vous pouvez utiliser select from ossobject.contacts[] au lieu de select s.contacts[*] from ossobject s.
La taille maximale d'une instruction SQL est de 16 Ko. Jusqu'à 20 expressions peuvent être ajoutées après WHERE. Chaque instruction prend en charge jusqu'à 10 niveaux et 100 opérations d'agrégation.
Gestion des erreurs de données
Les scénarios suivants décrivent la gestion des erreurs de données.
-
Certaines colonnes sont manquantes dans certaines lignes d'un objet CSV.
Si SkipPartialDataRecord n'est pas spécifié ou est défini sur false, OSS calcule les expressions de l'instruction SQL en traitant les valeurs des colonnes manquantes comme null.
Si SkipPartialDataRecord est défini sur true, OSS ignore les lignes dans lesquelles certaines colonnes sont manquantes. Dans ce cas, si MaxSkippedRecordsAllowed n'est pas spécifié ou est défini sur une valeur inférieure au nombre de lignes ignorées, OSS signale une erreur en envoyant le code d'état HTTP 400 ou en incluant le code d'état HTTP 400 dans la trame de fin.
Supposons que l'instruction SQL
select _1, _3 from ossobjectsoit exécutée et que les données d'une ligne de l'objet CSV soient « John, Company A ».Si SkipPartialDataRecord est défini sur false, « John,\n » est renvoyé.
Si SkipPartialDataRecord est défini sur true, cette ligne est ignorée.
-
Certaines clés sont manquantes dans un objet JSON.
Certains objets JSON peuvent exclure les clés spécifiées dans l'instruction SQL.
Si SkipPartialDataRecord n'est pas spécifié ou est défini sur false, OSS calcule les expressions de l'instruction SQL en traitant les clés manquantes comme null.
Si SkipPartialDataRecord est défini sur true, OSS ignore les données du nœud JSON. Dans ce cas, si MaxSkippedRecordsAllowed n'est pas spécifié ou est défini sur une valeur inférieure au nombre de lignes ignorées, OSS signale une erreur en envoyant le code d'état HTTP 400 ou en incluant le code d'état HTTP 400 dans la trame de fin.
Supposons que l'instruction SQL
select s.firstName, s.lastName , s.age from ossobject.contacts[*] ssoit exécutée et que la valeur d'un nœud JSON soit {"firstName":"John", "lastName":"Smith"}.Si SkipPartialDataRecord n'est pas spécifié ou est défini sur false, {"firstName":"John", "lastName":"Smith"} est renvoyé.
Si SkipPartialDataRecord est défini sur true, cette ligne est ignorée.
RemarquePour les clés dans les données renvoyées d'une requête pour des objets JSON, les objets JSON de sortie ne peuvent être que de type LINES. La valeur Key dans la sortie est renvoyée selon les règles suivantes :
-
Supposons que l'instruction SQL
select * from ossobject…soit exécutée. Si correspond à un objet JSON ({...}), l'objet JSON est renvoyé. Si correspond à une chaîne ou à un tableau, la chaîne ou le tableau est renvoyé en tant que DummyKey _1.Si {"Age":5}
select * from ossobject.Age s where s = 5est utilisé, {"_1":5} est renvoyé car la valeur 5 correspondant à * n'est pas un objet JSON. Lorsque l'instruction SQLselect * from ossobject s where s.Age = 5est exécutée, {"Age":5} correspondant à * est renvoyé. -
Si l'instruction SQL n'utilise pas select * mais spécifie des colonnes, le contenu renvoyé est au format
{"{Column 1}": Value, "{Column 2}": Value...}. {Column n} peut être généré à l'aide des méthodes suivantes :Si l'alias de la colonne est spécifié dans la clause SELECT, l'alias prend effet.
Si le nom de la colonne est la clé d'un objet JSON, cette clé est utilisée comme valeur de clé de sortie.
Si la colonne est un élément d'un tableau JSON ou une fonction d'agrégation, préfixez le nom de la colonne avec le numéro de série (à partir de 1) et un trait de soulignement (_) comme valeur de clé de sortie.
Supposons que {"contacts":{"Age":35, "Children":["child1", "child2", "child3"]}} soit utilisé :
Lorsque l'instruction SQL
select s.contacts.Age, s.contacts.Children[0] from ossobjectsest exécutée, Age est la clé de l'objet JSON d'entrée et Children[0] indique le premier élément du tableau Children et constitue la deuxième colonne du contenu de sortie. Dans ce cas, {"Age":35, "_2":"child1"} est renvoyé.Lorsque l'instruction SQL
select max(cast(s.Age as int)) from ossobject.contacts sest exécutée et que la colonne sélectionnée est une fonction d'agrégation, la colonne est préfixée par _1 et son numéro de série dans la sortie. Dans ce cas, {"_1":35} est renvoyé.Lorsque l'alias de la colonne est spécifié dans l'instruction SQL
select s.contacts.Age, s.contacts.Children[0] as firstChild from ossobject, {"Age":35, "firstChild":"child1"} est renvoyé.
Les clés qui correspondent aux objets JSON et aux instructions SQL sont sensibles à la casse. Par exemple, « select s. Age » et « select s. age » sont différents.
-
Le type de données de certaines colonnes dans un objet CSV ne correspond pas au type de données spécifié dans l'instruction SQL.
Si le type de données d'une ligne dans un objet CSV ne correspond pas au type spécifié dans l'instruction SQL, la ligne est ignorée. Si le nombre de lignes ignorées dépasse la valeur de MaxSkippedRecordsAllowed, OSS arrête le traitement des données et renvoie le code d'état HTTP 400.
Supposons que l'instruction SQL
select _1, _3 from ossobject where _3 > 5soit exécutée. Si la valeur d'une ligne dans l'objet CSV estJohn, Company A, To be hired, cette ligne est ignorée car la troisième colonne de la ligne n'est pas de type entier. -
Le type de données de certaines clés dans un objet JSON ne correspond pas au type de données spécifié dans l'instruction SQL.
Supposons que l'instruction SQL
select s.name from ossobject s where s.aliren_age > 5soit exécutée. Si la valeur d'un nœud JSON est{"Name":"John", "Career_age": To be hired}, ce nœud est ignoré.
Formats de date et d'heure pris en charge
Le tableau suivant répertorie les formats qui peuvent être convertis en horodatage sans qu'il soit nécessaire de spécifier le format de date et d'heure. Par exemple, la chaîne cast('20121201' as timestamp) est automatiquement analysée comme un horodatage du 1er décembre 2012.
|
Format |
Description |
|
YYYYMMDD |
année mois jour |
|
YYYY/MM/DD |
année/mois/jour |
|
DD/MM/YYYY/ |
jour/mois/année |
|
YYYY-MM-DD |
année-mois-jour |
|
DD-MM-YY |
jour-mois-année |
|
DD.MM.YY |
jour. mois. année |
|
HH:MM:SS.mss |
heure:minute:seconde. milliseconde |
|
HH:MM:SS |
heure:minute:seconde |
|
HH MM SS mss |
heure minute seconde milliseconde |
|
HH.MM.SS.mss |
heure. minute. seconde. milliseconde |
|
HHMM |
heure minute |
|
HHMMSSmss |
heure minute seconde milliseconde |
|
YYYYMMDD HH:MM:SS.mss |
année mois jour heure:minute:seconde. milliseconde |
|
YYYY/MM/DD HH:MM:SS.mss |
année/mois/jour heure:minute:seconde. milliseconde |
|
DD/MM/YYYY HH:MM:SS.mss |
jour/mois/année heure:minute:seconde. milliseconde |
|
YYYYMMDD HH:MM:SS |
année mois jour heure:minute:seconde |
|
YYYY/MM/DD HH:MM:SS |
année/mois/jour heure:minute:seconde |
|
DD/MM/YYYY HH:MM:SS |
jour/mois/année heure:minute:seconde |
|
YYYY-MM-DD HH:MM:SS.mss |
année-mois-jour heure:minute:seconde. milliseconde |
|
DD-MM-YYYY HH:MM:SS.mss |
jour-mois-année heure:minute:seconde. milliseconde |
|
YYYY-MM-DD HH:MM:SS |
année-mois-jour heure:minute:seconde |
|
YYYYMMDDTHH:MM:SS |
année mois jour T heure:minute:seconde |
|
YYYYMMDDTHH:MM:SS.mss |
année mois jour T heure:minute:seconde. milliseconde |
|
DD-MM-YYYYTHH:MM:SS.mss |
jour-mois-année T heure:minute:seconde. milliseconde |
|
DD-MM-YYYYTHH:MM:SS |
jour-mois-année T heure:minute:seconde |
|
YYYYMMDDTHHMM |
année mois jour T heure minute |
|
YYYYMMDDTHHMMSS |
année mois jour T heure minute seconde |
|
YYYYMMDDTHHMMSSMSS |
année mois jour T heure minute seconde milliseconde |
|
ISO8601-0 |
année-mois-jour T heure:minute+heure:minute, ou année-mois-jour T heure: minute-heure:minute « + » indique que l'heure locale dans le fuseau horaire actuel est postérieure à l'heure UTC standard. « - » indique que l'heure locale dans le fuseau horaire actuel est antérieure à l'heure UTC standard. Dans ce format, ISO8601-0 peut être utilisé. |
|
ISO8601-1 |
année-mois-jour T heure:minute+heure:minute, ou année-mois-jour T heure: minute-heure:minute « + » indique que l'heure locale dans le fuseau horaire actuel est postérieure à l'heure UTC standard. « - » indique que l'heure locale dans le fuseau horaire actuel est antérieure à l'heure UTC standard. Dans ce format, ISO 8601-1 peut être utilisé. |
|
CommonLog |
Exemple : 28/Feb/2017:12:30:51 +0700 |
|
RFC822 |
Exemple : Tue, 28 Feb 2017 12:30:51 GMT |
|
?D/?M/YY |
jour/mois/année, où le jour et le mois peuvent comporter un ou deux chiffres. |
|
?D/?M/YY ?H:?M |
jour/mois/année/heure:minute, où le jour, le mois, l'heure et la minute peuvent comporter un ou deux chiffres. |
|
?D/?M/YY ?H:?M:?S |
jour/mois/année/heure:minute:seconde, où le jour, le mois, l'heure, la minute et la seconde peuvent comporter un ou deux chiffres. |
Le tableau suivant répertorie les formats susceptibles de provoquer des erreurs. Vous devez spécifier un format de date et d'heure lorsque vous utilisez des chaînes dans ces formats. Par exemple, l'instruction cast('20121201' as timestamp format 'YYYYDDMM') analyse incorrectement la chaîne 20121201 comme étant le 12 janvier 2012.
|
Format |
Description |
|
YYYYDDMM |
année jour mois |
|
YYYY/DD/MM |
année/jour/mois |
|
MM/DD/YYYY |
mois/jour/année |
|
YYYY-DD-MM |
année-jour-mois |
|
MM-DD-YYYY |
mois-jour-année |
|
MM.DD.YYYY |
mois. jour. année |
Codes d'erreur
SelectObject renvoie les codes d'erreur de deux manières :
Le code d'état HTTP figure dans l'en-tête de la réponse et le code d'erreur dans le corps de la réponse, comme pour les autres requêtes OSS. Ces codes d'erreur signalent des erreurs de saisie, telles qu'une instruction SQL non valide ou des erreurs de données.
Le code d'erreur est inclus dans la trame de fin du corps de la réponse. Ces codes indiquent que les données sont incorrectes ou ne correspondent pas au type de données spécifié dans l'instruction SQL. Par exemple, une chaîne de caractères peut se trouver dans une colonne définie comme entière dans l'instruction SQL. Dans ce cas, une partie des données est traitée, puis le code d'état HTTP 206 et les données traitées sont envoyés au client.
Selon l'emplacement de la ligne erronée dans l'objet CSV, des codes d'erreur tels que InvalidCSVLine peuvent être renvoyés sous forme de code d'état HTTP dans l'en-tête de la réponse ou sous forme de code d'état dans la trame de fin.
|
ErrorCode |
Description |
HTTP Status Code |
Http Status Code in End Frame |
||
|
InvalidSqlParameter |
Message d'erreur indiquant que le paramètre SQL spécifié n'existe pas. L'instruction SQL de la requête est nulle, sa taille dépasse la limite supérieure ou elle n'est pas encodée en Base64. |
400 |
Aucun |
||
|
InvalidInputFieldDelimiter |
Message d'erreur indiquant que l'objet CSV d'entrée contient des délimiteurs de colonne non valides. Le paramètre n'est pas encodé en Base64 ou sa taille dépasse 1 octet après décodage. |
400 |
Aucun |
||
|
InvalidInputRecordDelimiter |
Message d'erreur indiquant que l'objet CSV d'entrée contient des délimiteurs de ligne non valides. Le paramètre n'est pas encodé en Base64 ou sa taille dépasse 2 octets après décodage. |
400 |
Aucun |
||
|
InvalidInputQuote |
Message d'erreur indiquant que l'objet CSV d'entrée contient des caractères de guillemet non valides. Le paramètre n'est pas encodé en Base64 ou sa taille dépasse 1 octet après décodage. |
400 |
Aucun |
||
|
InvalidOutputFieldDelimiter |
Message d'erreur indiquant que l'objet CSV de sortie contient des délimiteurs de colonne non valides. Le paramètre n'est pas encodé en Base64 ou sa taille dépasse 1 octet après décodage. |
400 |
Aucun |
||
|
InvalidOutputRecordDelimiter |
Message d'erreur indiquant que l'objet CSV de sortie contient des délimiteurs de ligne non valides. Le paramètre n'est pas encodé en Base64 ou sa taille dépasse 2 octets après décodage. |
400 |
Aucun |
||
|
UnsupportedCompressionFormat |
Message d'erreur indiquant que la valeur du paramètre Compression n'est ni NONE ni GZIP. La casse n'est pas prise en compte. |
400 |
Aucun |
||
|
InvalidCommentCharacter |
Message d'erreur indiquant que l'objet CSV contient des caractères de commentaire non valides. Le paramètre n'est pas encodé en Base64 ou sa taille dépasse 1 octet après décodage. |
400 |
Aucun |
||
|
InvalidRange |
Message d'erreur indiquant que le paramètre Range n'est pas préfixé par line-range= ou split-range=, ou que la valeur de plage n'est pas conforme à la norme HTTP pour Range. |
400 |
Aucun |
||
|
DecompressFailure |
Message d'erreur indiquant que la valeur de Compression est GZIP et que l'objet ne peut pas être extrait. |
400 |
Aucun |
||
|
InvalidMaxSkippedRecordsAllowed |
Message d'erreur indiquant que la valeur de MaxSkippedRecordsAllowed n'est pas un entier. |
400 |
Aucun |
||
|
SelectCsvMetaUnavailable |
Message d'erreur indiquant que l'objet n'inclut pas les métadonnées CSV lorsque le paramètre Range est spécifié. Appelez d'abord l'opération CreateSelectObjectMeta. |
400 |
Aucun |
||
|
InvalidTextEncoding |
Message d'erreur indiquant que l'objet n'est pas encodé en UTF-8. |
400 |
Aucun |
||
|
InvalidOSSSelectParameters |
Message d'erreur indiquant que les paramètres EnablePayloadCrc et OutputRawData sont définis sur true, ce qui entraîne un conflit. |
400 |
Aucun |
||
|
InternalError |
Message d'erreur indiquant qu'une erreur système OSS s'est produite. |
500 ou 206 |
500 ou Aucun |
||
|
SqlSyntaxError |
Message d'erreur indiquant que la syntaxe de l'instruction SQL décodée en Base64 n'est pas valide. |
400 |
Aucun |
||
|
SqlExceedsMaxInCount |
Message d'erreur indiquant que le nombre de valeurs incluses dans la clause SQL IN dépasse 1 024. |
400 |
Aucun |
||
|
SqlExceedsMaxColumnNameLength |
Message d'erreur indiquant que la taille du nom de colonne dépasse 1 024 octets. |
400 |
Aucun |
||
|
SqlInvalidColumnIndex |
Message d'erreur indiquant que l'index de colonne dans l'instruction SQL est inférieur à 1 octet ou supérieur à 1 000 octets. |
400 |
Aucun |
||
|
SqlAggregationOnNonNumericType |
Message d'erreur indiquant qu'une fonction d'agrégation est utilisée sur une colonne non numérique. |
400 |
Aucun |
||
|
SqlInvalidAggregationOnTimestamp |
Message d'erreur indiquant que la fonction d'agrégation SUM ou AVG est utilisée sur une colonne d'horodatage. |
400 |
Aucun |
||
|
SqlValueTypeOfInMustBeSame |
Message d'erreur indiquant que des valeurs de types différents sont incluses dans la clause SQL IN. |
400 |
Aucun |
||
|
SqlInvalidEscapeChar |
Message d'erreur indiquant qu'un caractère d'échappement non valide, tel qu'un point d'interrogation (?), un signe pourcentage (%) ou un astérisque (*), est spécifié dans la clause SQL LIKE. |
400 |
Aucun |
||
|
SqlOnlyOneEscapeCharIsAllowed |
Message d'erreur indiquant que la taille du caractère d'échappement dans la clause SQL LIKE dépasse 1 octet. |
400 |
Aucun |
||
|
SqlNoCharAfterEscapeChar |
Message d'erreur indiquant qu'aucun caractère n'est spécifié après le caractère d'échappement dans la clause SQL LIKE. |
400 |
Aucun |
||
|
SqlInvalidLimitValue |
Message d'erreur indiquant que le nombre spécifié après la clause SQL Limit est inférieur à 1. |
400 |
Aucun |
||
|
SqlExceedsMaxWildCardCount |
Message d'erreur indiquant que le nombre d'astérisques (*) ou de signes pourcentage (%) dans la clause SQL LIKE dépasse la limite supérieure. |
400 |
Aucun |
||
|
SqlExceedsMaxConditionCount |
Message d'erreur indiquant que le nombre d'expressions conditionnelles dans la clause SQL WHERE dépasse la limite supérieure. |
400 |
Aucun |
||
|
SqlExceedsMaxConditionDepth |
Message d'erreur indiquant que la profondeur de l'arborescence conditionnelle dans la clause SQL WHERE dépasse la limite supérieure. |
400 |
Aucun |
||
|
SqlOneColumnCastToDifferentTypes |
Message d'erreur indiquant qu'une colonne est convertie en différents types via la fonction CAST dans l'instruction SQL. |
400 |
Aucun |
||
|
SqlOperationAppliedToDifferentTypes |
Message d'erreur indiquant qu'un opérateur est utilisé sur deux objets de types différents dans l'instruction SQL. Par exemple, ce code d'erreur est renvoyé si col1 dans _col1 > 3 est une chaîne. |
400 |
Aucun |
||
|
SqlInvalidColumnName |
Message d'erreur indiquant qu'un nom de colonne utilisé dans l'instruction SQL ne figure pas dans l'en-tête de l'objet CSV. |
400 |
Aucun |
||
|
SqlNotSupportedTimestampFormat |
Message d'erreur indiquant que le format d'horodatage spécifié dans la clause SQL CAST n'est pas pris en charge. |
400 |
Aucun |
||
|
SqlNotMatchTimestampFormat |
Message d'erreur indiquant que le format d'horodatage spécifié dans la clause SQL CAST ne correspond pas à la chaîne d'horodatage. |
400 |
Aucun |
||
|
SqlInvalidTimestampValue |
Message d'erreur indiquant qu'aucun format d'horodatage n'est spécifié dans la clause SQL CAST et que la chaîne spécifiée ne peut pas être convertie en horodatage. |
400 |
Aucun |
||
|
SqlInvalidLikeOperand |
Message d'erreur indiquant que les noms ou index de colonne du côté gauche ne sont pas spécifiés dans la clause SQL LIKE, que la colonne spécifiée du côté gauche n'est pas de type chaîne ou que la colonne du côté droit dans la clause LIKE est de type chaîne. |
400 |
Aucun |
||
|
SqlInvalidMixOfAggregationAndColumn |
Message d'erreur indiquant que la clause SQL SELECT inclut des noms de colonne et des index pour les fonctions d'agrégation et les fonctions sans agrégation. |
400 |
Aucun |
||
|
SqlExceedsMaxAggregationCount |
Message d'erreur indiquant que le nombre de fonctions d'agrégation incluses dans la clause SQL SELECT dépasse la limite supérieure. |
400 |
Aucun |
||
|
SqlInvalidMixOfStarAndColumn |
Message d'erreur indiquant qu'un astérisque (*), un nom de colonne et un index de colonne sont inclus dans la même instruction SQL. |
400 |
Aucun |
||
|
SqlInvalidKeepAllColumnsWithAggregation |
Message d'erreur indiquant que l'instruction SQL inclut des fonctions d'agrégation et que le paramètre KeepAllColumns est défini sur true. |
400 |
Aucun |
||
|
SqlInvalidKeepAllColumnsWithDuplicateColumn |
Message d'erreur indiquant que l'instruction SQL inclut des noms ou index de colonne répétés et que le paramètre KeepAllColumns est défini sur true. |
400 |
Aucun |
||
|
SqlInvalidSqlAfterAnalysis |
Message d'erreur indiquant que l'instruction SQL est complexe et que l'instruction SQL analysée n'est pas prise en charge. |
400 |
Aucun |
||
|
InvalidArithmeticOperand |
Message d'erreur indiquant que l'instruction SQL contient des opérations arithmétiques effectuées sur des constantes ou des colonnes non numériques. |
400 |
Aucun |
||
|
SqlInvalidAndOperand |
Message d'erreur indiquant que les expressions jointes par l'opérateur AND dans l'instruction SQL ne sont pas de type booléen. |
400 |
Aucun |
||
|
SqlInvalidOrOperand |
Message d'erreur indiquant que les expressions jointes par l'opérateur OR dans l'instruction SQL ne sont pas de type booléen. |
400 |
Aucun |
||
|
SqlInvalidNotOperand |
Message d'erreur indiquant que les expressions jointes par l'opérateur NOT dans l'instruction SQL ne sont pas de type booléen. |
400 |
Aucun |
||
|
SqlInvalidIsNullOperand |
Message d'erreur indiquant que l'instruction SQL spécifie des opérations basées sur l'opérateur IS NULL effectuées sur une constante. |
400 |
Aucun |
||
|
SqlComparerOperandTypeMismatch |
Message d'erreur indiquant que l'instruction SQL spécifie des opérations basées sur l'opérateur de comparaison effectuées sur deux objets de types différents. |
400 |
Aucun |
||
|
SqlInvalidConcatOperand |
Message d'erreur indiquant que l'instruction SQL contient deux constantes jointes par l'opérateur de concaténation ( |
). |
400 |
Aucun |
|
|
SqlUnsupportedSql |
Message d'erreur indiquant que l'instruction SQL est complexe et que la taille du plan SQL généré dépasse la limite supérieure. |
400 |
Aucun |
||
|
HeaderInfoExceedsMaxSize |
Message d'erreur indiquant que la taille des informations d'en-tête spécifiées dans l'instruction SQL dépasse la limite supérieure. |
400 |
Aucun |
||
|
OutputExceedsMaxSize |
Message d'erreur indiquant que la taille d'une ligne dans la sortie dépasse la limite supérieure. |
400 |
Aucun |
||
|
InvalidCsvLine |
Message d'erreur indiquant qu'une ligne de l'objet CSV n'est pas valide ou que sa taille dépasse la limite supérieure, ou que le nombre de lignes ignorées dépasse la valeur de MaxSkippedRecordsAllowed. |
400 ou 206 |
400 ou Aucun |
||
|
NegativeRowIndex |
Message d'erreur indiquant que la valeur de l'index de tableau dans l'instruction SQL est un nombre négatif. |
400 |
Aucun |
||
|
ExceedsMaxNestedColumnDepth |
Message d'erreur indiquant que le nombre de niveaux imbriqués de l'objet JSON dans l'instruction SQL dépasse la limite supérieure. |
400 |
Aucun |
||
|
NestedColumnNotSupportInCsv |
Message d'erreur indiquant que l'instruction SQL contient des colonnes imbriquées avec des points (.) ou des tableaux avec des crochets ([]). Ces caractères ne sont pas pris en charge pour les instructions SQL des objets CSV. |
400 |
Aucun |
||
|
TableRootNodeOnlySupportInJson |
Message d'erreur indiquant que le chemin du nœud racine n'est pas spécifié après From ossobject dans les objets JSON. |
400 |
Aucun |
||
|
JsonNodeExceedsMaxSize |
Message d'erreur indiquant que la taille du nœud racine dans l'objet JSON dépasse la limite supérieure. |
400 ou 206 |
400 ou Aucun |
||
|
InvalidJsonData |
Message d'erreur indiquant que les données JSON sont mal formatées. |
400 ou 206 |
400 ou Aucun |
||
|
ExceedsMaxJsonArraySize |
Message d'erreur indiquant que le nombre d'éléments dans un tableau du nœud racine de l'objet JSON dépasse la limite supérieure. |
400 ou 206 |
400 ou Aucun |
||
|
WildCardNotAllowed |
Message d'erreur indiquant que les astérisques (*) ne peuvent pas être utilisés dans les clauses SQL SELECT ou SQL WHERE pour l'objet JSON. Par exemple, une erreur est renvoyée si vous exécutez l'instruction suivante : |
400 |
Aucun |
||
|
JsonNodeExceedsMaxDepth |
Message d'erreur indiquant que la profondeur du nœud racine de l'objet JSON dépasse la limite supérieure. |
400 ou 206 |
400 ou Aucun |
ossutil
Pour plus d'informations sur la commande ossutil correspondant à l'opération SelectObject, consultez select-object.