Hedef nesne üzerinde SQL deyimlerini çalıştırır ve sonuçları döndürür.
Kullanım notları
Nesne üzerinde okuma izninizin olması gerekir.
Geçerli bir SQL deyimi HTTP durum kodu 206 döndürür. Geçersiz veya eşleşmeyen bir SQL deyimi HTTP durum kodu 400 döndürür.
SelectObject API'sini kullanarak veri sorgularken, kaynak nesneden taranan gerçek veri miktarına göre ücretlendirilirsiniz. Daha fazla bilgi için bkz. Veri işleme ücretleri.
İstek sözdizimi
İstek sözdizimi CSV ve JSON nesneleri için farklılık gösterir.
-
CSV nesneleri için istek sözdizimi
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> -
JSON nesneleri için istek sözdizimi
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>
İstek öğeleri
|
Öğe |
Tür |
Açıklama |
|
SelectRequest |
Container |
SelectRequest isteğini depolayan konteyner. Alt düğümler: Expression, InputSerialization ve OutputSerialization Üst düğümler: yok |
|
Expression |
String |
Base64 ile kodlanmış SQL deyimi. Alt düğümler: yok Üst düğümler: SelectRequest |
|
InputSerialization |
Container |
İsteğe bağlı. Giriş serileştirme parametrelerini belirtir. Alt düğümler: CompressionType, CSV ve JSON Üst düğümler: SelectRequest |
|
OutputSerialization |
Container |
İsteğe bağlı. Çıkış serileştirme parametrelerini belirtir. Alt düğümler: CSV, JSON ve OutputRawData Üst düğümler: SelectRequest |
|
CSV(InputSerialization) |
Container |
İsteğe bağlı. CSV nesneleri için giriş serileştirme parametrelerini belirtir. Alt düğümler: FileHeaderInfo, RecordDelimiter, FieldDelimiter, QuoteCharacter, CommentCharacter ve Range Üst düğümler: InputSerialization |
|
CSV(OutputSerialization) |
Container |
İsteğe bağlı. CSV nesneleri için çıkış serileştirme parametrelerini belirtir. Alt düğümler: RecordDelimiter ve FieldDelimiter Üst düğümler: OutputSerialization |
|
JSON(InputSerialization) |
Container |
İsteğe bağlı. JSON nesneleri için giriş serileştirme parametrelerini belirtir. Alt düğümler: Type, Range ve ParseJsonNumberAsString |
|
JSON(OutputSerialization) |
Container |
İsteğe bağlı. JSON nesneleri için çıkış serileştirme parametrelerini belirtir. Alt düğümler: RecordDelimiter |
|
Type |
Enumeration |
Giriş JSON nesnesinin türü. Geçerli değerler: DOCUMENT ve LINES. |
|
OutputRawData |
Boolean |
İsteğe bağlı. Ham verilerin dışa aktarılıp aktarılmayacağını belirtir. Varsayılan değer: false. Alt düğümler: yok Üst düğümler: OutputSerialization Not
|
|
CompressionType |
Enumeration |
Nesnenin sıkıştırma türü. Geçerli değerler: None ve GZIP. Alt düğümler: yok Üst düğümler: InputSerialization |
|
FileHeaderInfo |
Enumeration |
İsteğe bağlı. CSV üst bilgi bilgilerini belirtir. Geçerli değerler:
Alt düğümler: yok Üst düğümler: CSV (giriş) |
|
RecordDelimiter |
String |
İsteğe bağlı. Base64 ile kodlanmış satır sonu karakterini belirtir. Varsayılan değer: Alt düğümler: yok Üst düğümler: CSV (giriş ve çıkış) ve JSON (çıkış) |
|
FieldDelimiter |
String |
İsteğe bağlı. CSV nesnesi için Base64 ile kodlanmış sütun sınırlayıcısını belirtir. Varsayılan değer: Alt düğümler: yok Üst düğümler: CSV (giriş ve çıkış) |
|
QuoteCharacter |
String |
İsteğe bağlı. CSV nesnesi için Base64 ile kodlanmış tırnak işaretini belirtir. Varsayılan değer: Alt düğümler: yok Üst düğümler: CSV (giriş) |
|
CommentCharacter |
String |
CSV nesnesinde kullanmak istediğiniz yorum karakteri. Bu öğenin değeri Base64 ile kodlanmalıdır. Bu öğe varsayılan olarak boştur. |
|
Range |
String |
İsteğe bağlı. Sorgu aralığını belirtir. Desteklenen yöntemler: Not
Range tabanlı sorgulanan nesneler için SelectMeta oluşturulmalıdır.
Başlangıç ve bitiş parametreleri dahildir. Yukarıdaki iki parametre range get içindeki range parametresiyle aynı biçimi kullanır. Bu parametre yalnızca nesne CSV biçimindeyse veya JSON türü LINES ise kullanılabilir. Alt düğümler: yok Üst düğümler: CSV (giriş) ve JSON (çıkış) |
|
KeepAllColumns |
bool |
İsteğe bağlı. CSV nesnesindeki tüm sütunların yanıta dahil edilip edilmeyeceğini belirtir. Varsayılan değer: false. Yalnızca SELECT yan tümcesindeki sütunlar değer içerir. Yanıttaki sütunlar sütun numarasına göre artan sırada sıralanır. Örnek:
KeepAllColumns değerini true olarak ayarlarsanız ve CSV nesnesinde altı sütun bulunuyorsa yukarıdaki SELECT yan tümcesi için aşağıdaki sonuç döndürülür: 1. sütunun değeri,,,,5. sütunun değeri,\n Alt düğümler: yok Üst düğümler: OutputSerialization (CSV) |
|
EnablePayloadCrc |
bool |
Her karenin doğrulanması için CRC-32 değeri. İstemci her yükün CRC-32 değerini hesaplayabilir ve veri bütünlüğünü doğrulamak için bunu dahil edilen CRC-32 değeriyle karşılaştırabilir. Alt düğümler: yok Üst düğümler: OutputSerialization |
|
Options |
Container |
Diğer isteğe bağlı parametreler. Alt düğümler: SkipPartialDataRecord ve MaxSkippedRecordsAllowed Üst düğümler: SelectRequest |
|
OutputHeader |
bool |
CSV nesnesine ilişkin üst bilgi bilgilerinin yanıtın başında dahil edilip edilmeyeceğini belirtir. Varsayılan değer: false. Alt düğümler: yok Üst düğümler: OutputSerialization |
|
SkipPartialDataRecord |
bool |
Verilerin eksik olduğu satırların yoksayılıp yoksayılmayacağını belirtir. Bu parametre false olarak ayarlanırsa OSS satır verilerini null olarak işler ve hata bildirmez. Bu parametre true olarak ayarlanırsa veri içermeyen satırlar atlanır. Atlanan satır sayısı atlanabilecek maksimum satır sayısını aşarsa OSS hata bildirir ve verileri işlemeyi durdurur. Varsayılan değer: false. Alt düğümler: yok Üst düğümler: Options |
|
MaxSkippedRecordsAllowed |
Int |
Atlanabilecek maksimum satır sayısı. Bir satır SQL deyimi belirtilen türle eşleşmiyorsa veya bir satırdaki bir veya daha fazla sütun eksikse ve SkipPartialDataRecord değeri true ise satırlar atlanır. Atlanan satır sayısı bu parametrenin değerini aşarsa OSS hata bildirir ve verileri işlemeyi durdurur. Not
Bir CSV nesnesindeki bir satır doğru biçimlendirilmemişse OSS verileri işlemeyi durdurur ve hata bildirir çünkü bu biçim hatası CSV nesnesinin hatalı ayrıştırılmasına neden olabilir. Örneğin satırdaki bir sütun sürekli tek sayıda tırnak işareti içerir. Bu parametre düzensiz verilere yönelik toleransı değiştirmek için kullanılabilir ancak geçersiz CSV nesneleri için yapılandırılamaz. Varsayılan değer: 0. Alt düğümler: yok Üst düğümler: Options |
|
ParseJsonNumberAsString |
bool |
JSON nesnesindeki tamsayı ve kayan noktalı sayıların dize olarak ayrıştırılıp ayrıştırılmayacağını belirtir. Sayılar ayrıştırıldığında kayan nokta hassasiyeti azalır. Ham verileri korumak için bu parametreyi true olarak ayarlayın. Ayrıştırılan verileri INT DOUBLE veya DECIMAL gibi gerekli türe dönüştürmek için SQL'de CAST işlevini kullanın. Varsayılan değer: false. Alt düğümler: yok Üst düğümler: JSON |
|
AllowQuotedRecordDelimiter |
bool |
CSV nesnesinin tırnak işaretleri (") içinde satır sonları içerebileceğini belirtir. Örneğin bir sütunun değeri "abc\ndef" ise ve \n bir satır sonu ise bu parametreyi true olarak ayarlayın. Bu parametre false olarak ayarlanırsa daha verimli çok parçalı sorgular gerçekleştirmek üzere istek üst bilgisinde bir aralık belirtmek için SelectObject işlemini çağırabilirsiniz. Varsayılan değer: true. Alt düğümler: yok Üst düğümler: InputSerialization |
Yanıt gövdesi
Yanıt HTTP durum kodu 4xx döndürürse SQL sözdizimi denetimi başarısız oldu veya istekte hatalar var. Hata gövdesi biçimi GetObject hatalarıyla aynıdır.
Yanıt HTTP durum kodu 5xx döndürürse bir iç sunucu hatası oluştu. Hata gövdesi biçimi GetObject hatalarıyla aynıdır.
-
HTTP durum kodu 206 başarıyı gösterir.
x-oss-select-output-raw üst bilgisinin değeri true ise kare tabanlı veriler hariç nesne verileri döndürülür. İstemci verileri GetObject işlemiyle aynı şekilde alabilir.
x-oss-select-output-raw değeri false ise sonuç kareler olarak döndürülür.
-
Kareler
Version|Frame-Type | Payload Length | Header Checksum | Payload | Payload Checksum<1 byte><--3 bytes--><---4 bytes----><-------4 bytes--><variable><----4bytes---------->biçiminde döndürülür.NotKarelerdeki Checksum değeri CRC-32'dir. Bir karedeki tüm tamsayılar büyük endian şeklindedir. Şu anda Version değeri 1'dir.
Kare türleri
SelectObject üç kare türünü destekler.
|
Kare türü |
Değer |
Yük biçimi |
Açıklama |
|
Data Frame |
8388609 |
offset | data<-8 bytes><---variable-> |
SelectObject isteği için döndürülen veriler. offset parametresinin değeri mevcut tarama konumunu (dosya üst bilgisinden uzaklığı) gösteren 8 bitlik bir tamsayıdır. Bu parametre işlemin ilerlemesini bildirmek için kullanılır. |
|
Continuous Frame |
8388612 |
offset<----8 bytes--> |
Bir işlemin ilerlemesini bildirmek ve HTTP bağlantısını sürdürmek için kullanılan kare. Bir sorgu isteği için 5 saniye içinde veri döndürülmezse bir continuous frame döndürülür. |
|
End Frame |
8388613 |
offset | total scanned bytes | http status code | error message<--8bytes-><--8bytes---------><----4 bytes--------><-variable------> |
Bir end frame taranan baytlar ve olası hata mesajları dahil olmak üzere bir işlemin son durumunu döndürmek için kullanılır.
|
Örnek istekler
CSV ve JSON nesneleri için örnekler:
-
CSV nesneleri için örnek istekler
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> -
JSON nesneleri için örnek istekler
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>
SQL deyimi sözdizimi
Bir SelectObject SQL deyiminin genel formu SELECT select-list from table where_opt limit_opt şeklindedir.
Aşağıdaki anahtar kelimeler değiştirilemez: SELECT ve 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
Aşağıdaki işlevler desteklenir: AVG, SUM, MAX, MIN, COUNT ve CAST (tür dönüştürme işlevi). COUNT sonrasında yalnızca yıldız işareti (*) belirtebilirsiniz.
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: aşağıdaki operatörleri içerir:
>,<,>=,<=,! =,=,,,LIKE,+,-,*,/,%ve||.cast: CAST işlevini kullanarak bir sütundaki verileri bir türden başka bir türe dönüştürebilirsiniz.
Bir toplama işlevi ve limit kombinasyonu:
Select avg(cast(_1 as int)) from ossobject limit 100. Yukarıdaki deyim ilk 100 satırdaki ilk sütunun ortalamasını hesaplar. Bu işlev MySQL tarafından desteklenen deyimden farklıdır çünkü SelectObject işlemlerinde bir toplama işlevi için yalnızca tek bir satır döndürülür. Bu nedenle çıkış verisi boyutu için sınırlandırma yapılmaz. SelectObject'i çağırırken limit işlemi toplama işleminden önce gerçekleştirilir.
SQL deyimi sınırlamaları
SQL deyimleri aşağıdaki sınırlamalara sahiptir:
Yalnızca UTF-8 ile kodlanmış metin nesneleri ve GZIP biçiminde sıkıştırılmış UTF-8 metin nesneleri desteklenir. GZIP nesneleri için deflate biçimi desteklenmez.
Bir SQL deyimi kullanırken yalnızca tek bir nesne sorgulanabilir. Aşağıdaki yan tümceler desteklenmez: JOIN, ORDER BY, GROUP BY ve HAVING.
Bir WHERE yan tümcesi toplama koşulları içeremez. Örneğin aşağıdaki yan tümceye izin verilmez: WHERE max(cast(age as int)) > 100.
Bir SQL deyimi için en fazla 1.000 sütun belirtilebilir. Bir SQL deyimindeki sütun adı en fazla 1.024 bayt uzunluğunda olabilir.
Bir LIKE yan tümcesinde en fazla beş joker karakter (%) desteklenir. Yüzde işareti (%) ve yıldız işareti () sıfır veya daha fazla karakteri belirten joker karakterlerdir. ESCAPE anahtar kelimesi SQL LIKE yan tümceleri için desteklenir ve yüzde işaretleri (%), yıldız işaretleri () ve soru işaretleri (?) gibi özel karakterleri normal dizelere dönüştürmek için kullanılır.
Bir IN yan tümcesinde en fazla 1.024 sabit değer desteklenir.
SELECT sonrasında belirtilen Projection bir sütun adı, bir CSV sütun dizini (_1 veya _2 gibi), bir toplama işlevi veya bir CAST işlevi olabilir. select _1 + _2 from ossobject gibi diğer ifadeler desteklenmez.
Bir CSV nesnesi için maksimum sütun boyutu ve satır boyutu 256 KB'tır.
FROM sonrasında belirtilen JSON yolları maksimum boyutu 512 KB olan JSON düğümlerini destekler. Yol en fazla 10 düzey içerebilir ve bir dizi en fazla 5.000 öğe içerebilir. SELECT ve WHERE sonrasında belirtilen alanlar FROM sonrasında belirtilen JSON yollarına karşılık gelen düğümlerden gelmelidir.
Bir JSON nesnesinin SQL deyimlerinde SELECT veya WHERE ifadeleri dizi joker karakterlerini ([]) içeremez. Dizi joker karakterleri ([]) yalnızca FROM sonrasında belirtilen JSON yollarında bulunabilir. Örneğin select s.contacts[] from ossobject s yerine select from ossobject.contacts[*] kullanabilirsiniz.
Bir SQL deyiminin maksimum boyutu 16 KB'tır. WHERE sonrasında en fazla 20 ifade eklenebilir. Her deyim en fazla 10 düzey ve 100 toplama işlemini destekler.
Veri hatası işleme
Aşağıdaki senaryolar veri hatalarının nasıl işlendiğini açıklar.
-
Bir CSV nesnesindeki bazı satırlarda bazı sütunlar eksiktir.
SkipPartialDataRecord belirtilmemişse veya false olarak ayarlanmışsa OSS eksik sütunların değerlerini null olarak işleyerek SQL deyimi içindeki ifadeleri hesaplar.
SkipPartialDataRecord true olarak ayarlanmışsa OSS bazı sütunların eksik olduğu satırları yoksayar. Bu durumda MaxSkippedRecordsAllowed belirtilmemişse veya atlanan satır sayısından küçük bir değere ayarlanmışsa OSS HTTP durum kodu 400 göndererek veya HTTP durum kodu 400'ü end frame içine dahil ederek hata bildirir.
select _1, _3 from ossobjectSQL deyiminin yürütüldüğünü ve CSV nesnesindeki bir satırdaki verilerin "John, Company A" olduğunu varsayalım.SkipPartialDataRecord false olarak ayarlanmışsa "John,\n" döndürülür.
SkipPartialDataRecord true olarak ayarlanmışsa bu satır atlanır.
-
Bir JSON nesnesinde bazı anahtarlar eksiktir.
Bazı JSON nesneleri SQL deyimi içinde belirtilen anahtarları içermeyebilir.
SkipPartialDataRecord belirtilmemişse veya false olarak ayarlanmışsa OSS eksik anahtarları null olarak işleyerek SQL deyimi içindeki ifadeleri hesaplar.
SkipPartialDataRecord true olarak ayarlanmışsa OSS JSON düğümündeki verileri atlar. Bu durumda MaxSkippedRecordsAllowed belirtilmemişse veya atlanan satır sayısından küçük bir değere ayarlanmışsa OSS HTTP durum kodu 400 göndererek veya HTTP durum kodu 400'ü end frame içine dahil ederek hata bildirir.
select s.firstName, s.lastName , s.age from ossobject.contacts[*] sSQL deyiminin yürütüldüğünü ve bir JSON düğümünün değerinin {"firstName":"John", "lastName":"Smith"} olduğunu varsayalım.SkipPartialDataRecord belirtilmemişse veya false olarak ayarlanmışsa {"firstName":"John", "lastName":"Smith"} döndürülür.
SkipPartialDataRecord true olarak ayarlanmışsa bu satır atlanır.
NotJSON nesneleri için bir isteğin döndürülen verilerindeki anahtarlar için çıktı JSON nesneleri yalnızca LINES olabilir. Çıktıdaki Key değeri aşağıdaki kurallara göre döndürülür:
-
select * from ossobject…SQL deyiminin yürütüldüğünü varsayalım. bir JSON nesnesine ({...}) karşılık geliyorsa JSON nesnesi döndürülür. bir dizeye veya bir diziye karşılık geliyorsa dize veya dizi DummyKey _1 olarak döndürülür.{"Age":5}
select * from ossobject.Age s where s = 5kullanılırsa *'a karşılık gelen 5 değeri bir JSON nesnesi olmadığından {"_1":5} döndürülür.select * from ossobject s where s.Age = 5SQL deyimi yürütüldüğünde *'a karşılık gelen {"Age":5} döndürülür. -
SQL deyimi select * kullanmıyor ancak sütunları belirtiyorsa döndürülen içerik
{"{Column 1}": Value, "{Column 2}": Value...}biçimindedir. {Column n} aşağıdaki yöntemler kullanılarak oluşturulabilir:Sütunun takma adı SELECT yan tümcesinde belirtilmişse takma ad geçerli olur.
Sütun adı bir JSON nesnesinin anahtarıysa bu anahtar çıktı anahtar değeri olarak kullanılır.
Sütun bir JSON dizisinin öğesi veya bir toplama işleviyse sütun adının önüne seri numarası (1'den başlayarak) ve alt çizgi (_) eklenerek çıktı anahtar değeri olarak kullanılır.
{"contacts":{"Age":35, "Children":["child1", "child2", "child3"]}} kullanıldığını varsayalım:
select s.contacts.Age, s.contacts.Children[0] from ossobjectsSQL deyimi yürütüldüğünde Age giriş JSON nesnesinin anahtarıdır ve Children[0] Children dizisinin ilk öğesini gösterir ve çıktı içeriğindeki ikinci sütundur. Bu durumda {"Age":35, "_2":"child1"} döndürülür.select max(cast(s.Age as int)) from ossobject.contacts sSQL deyimi yürütüldüğünde ve seçilen sütun bir toplama işleviyse sütunun önüne _1 ve çıktıda seri numarası eklenir. Bu durumda {"_1":35} döndürülür.SQL deyimi
select s.contacts.Age, s.contacts.Children[0] as firstChild from ossobjectiçinde sütunun takma adı belirtildiğinde {"Age":35, "firstChild":"child1"} döndürülür.
JSON nesneleri ve SQL deyimleriyle eşleşen anahtarlar büyük/küçük harfe duyarlıdır. Örneğin "select s. Age" ve "select s. age" farklıdır.
-
Bir CSV nesnesindeki bazı sütunların veri türü SQL deyimi içinde belirtilen veri türüyle eşleşmiyor.
Bir CSV nesnesindeki bir satırın veri türü SQL deyimi içinde belirtilen türle eşleşmiyorsa satır atlanır. Atlanan satır sayısı MaxSkippedRecordsAllowed değerini aşarsa OSS veri işlemeyi durdurur ve HTTP durum kodu 400 döndürür.
select _1, _3 from ossobject where _3 > 5SQL deyiminin yürütüldüğünü varsayalım. CSV nesnesindeki bir satırın değeriJohn, Company A, To be hiredise satırdaki üçüncü sütun tamsayı türünde olmadığından bu satır atlanır. -
Bir JSON nesnesindeki bazı anahtarların veri türü SQL deyimi içinde belirtilen veri türüyle eşleşmiyor.
select s.name from ossobject s where s.aliren_age > 5SQL deyiminin yürütüldüğünü varsayalım. Bir JSON düğümünün değeri{"Name":"John", "Career_age": To be hired}ise bu düğüm atlanır.
Desteklenen zaman biçimleri
Aşağıdaki tabloda zaman biçimini belirtmeye gerek kalmadan bir zaman damgasına dönüştürülebilen biçimler listelenmiştir. Örneğin cast('20121201' as timestamp) dizesi otomatik olarak 1 Aralık 2012'nin zaman damgası olarak ayrıştırılır.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
yıl-ay-gün T saat:dakika+saat:dakika veya yıl-ay-gün T saat: dakika-saat:dakika "+" işareti geçerli saat dilimindeki yerel saatin standart UTC saatinden sonra olduğunu gösterir. "-" işareti geçerli saat dilimindeki yerel saatin standart UTC saatinden önce olduğunu gösterir. Bu biçimde ISO8601-0 kullanılabilir. |
|
|
yıl-ay-gün T saat:dakika+saat:dakika veya yıl-ay-gün T saat: dakika-saat:dakika "+" işareti geçerli saat dilimindeki yerel saatin standart UTC saatinden sonra olduğunu gösterir. "-" işareti geçerli saat dilimindeki yerel saatin standart UTC saatinden önce olduğunu gösterir. Bu biçimde ISO 8601-1 kullanılabilir. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Aşağıdaki tabloda hata oluşmasına neden olabilecek biçimler listelenmiştir. Bu biçimlerdeki dizeleri kullanırken bir zaman biçimi belirtmeniz gerekir. Örneğin cast('20121201' as timestamp format 'YYYYDDMM') deyimi 20121201 dizesini yanlışlıkla 12 Ocak 2012 olarak ayrıştırır.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Hata kodları
SelectObject hata kodlarını iki şekilde döndürür:
HTTP durum kodu yanıt üst bilgisine ve hata kodu yanıt gövdesine dahil edilir; bu diğer OSS istekleriyle aynıdır. Bu şekilde döndürülen hata kodları geçersiz bir SQL deyimi veya veri hataları gibi giriş hatalarının oluştuğunu gösterir.
Hata kodu yanıt gövdesinin end frame'ine dahil edilir. Bu şekilde döndürülen hata kodları verilerin yanlış olduğunu veya SQL deyimi içinde belirtilen veri türüyle eşleşmediğini gösterir. Örneğin SQL deyimi içinde türü tamsayı olarak ayarlanmış bir sütunda bir dize bulunmaktadır. Bu durumda verilerin bir kısmı işlenir ve ardından HTTP durum kodu 206 ile işlenen veriler istemciye gönderilir.
InvalidCSVLine gibi hata kodları CSV nesnesi içindeki hata satırının konumuna bağlı olarak yanıt üst bilgisinde bir HTTP durum kodu veya end frame içinde bir durum kodu olarak döndürülebilir.
|
|
|
|
|
|
|
Belirtilen SQL parametresinin mevcut olmadığına dair hata mesajı döndürüldü. İstekteki SQL deyimi null, SQL deyiminin boyutu üst sınırı aştı veya SQL deyimi Base64 ile kodlanmadı. |
|
|
|
|
Giriş CSV nesnesi geçersiz sütun sınırlayıcıları içerdiğine dair hata mesajı döndürüldü. Parametre Base64 ile kodlanmadı veya parametre çözüldükten sonra boyutu 1 bayttan büyük. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ossutil
SelectObject işlemine karşılık gelen ossutil komutu hakkında bilgi için bkz. select-object.