Sorgu hızlandırma SQL dil başvurusu
Sorgu hızlandırma, blob içeriği üzerinden sorguları ifade etmek için ANSI SQL benzeri bir dili destekler. Sorgu hızlandırma SQL diyalekt, desteklenen veri türleri, işleçler vb. sınırlı bir kümeyle ANSI SQL'in bir alt kümesidir, ancak JSON gibi hiyerarşik yarı yapılandırılmış veri biçimleri üzerindeki sorguları desteklemek için ANSI SQL'de de genişler.
SELECT Söz Dizimi
Sorgu hızlandırma tarafından desteklenen tek SQL deyimi SELECT deyimidir. Bu örnek, ifadenin true döndürdüğü her satırı döndürür.
SELECT * FROM table [WHERE expression] [LIMIT limit]
CSV biçimli veriler için tablo olmalıdır BlobStorage
. Bu, sorgunun REST çağrısında belirtilen bloba göre çalıştırılacağı anlamına gelir. JSON biçimli veriler için tablo bir "tablo tanımlayıcısı"dır. Bu makalenin Tablo Tanımlayıcıları bölümüne bakın.
Aşağıdaki örnekte, WHERE ifadesinin true döndürdüğü her satır için bu deyim, projeksiyon ifadelerinin her birini değerlendirerek yapılan yeni bir satır döndürür.
SELECT expression [, expression ...] FROM table [WHERE expression] [LIMIT limit]
SELECT ifadesinin bir parçası olarak bir veya daha fazla belirli sütun belirtebilirsiniz (örneğin, SELECT Title, Author, ISBN
).
Not
SELECT ifadesinde kullanabileceğiniz en fazla belirli sütun sayısı 49'dur. SELECT deyiminizin 49'dan fazla sütun döndürmesi gerekiyorsa, SELECT ifadesi için bir joker karakter (*
) kullanın (örneğin: SELECT *
).
Aşağıdaki örnek, ifadenin true döndürdüğü satırların her biri üzerinde bir toplama hesaplaması (örneğin: belirli bir sütunun ortalama değeri) döndürür.
SELECT aggregate_expression FROM table [WHERE expression] [LIMIT limit]
Aşağıdaki örnek, CSV biçimli blobu bölmek için uygun uzaklıkları döndürür. Bu makalenin Sys.Split bölümüne bakın.
SELECT sys.split(split_size)FROM BlobStorage
Veri Türleri
Veri Türü | Açıklama |
---|---|
INT | 64 bit işaretli tamsayı. |
FLOAT | 64 bit ("çift duyarlık") kayan nokta. |
DİZE | Değişken uzunlukta Unicode dizesi. |
TIMESTAMP | Zaman içinde bir nokta. |
BOOLEAN | True veya false. |
CSV biçimli verilerden değerler okunurken, tüm değerler dize olarak okunur. Dize değerleri CAST ifadeleri kullanılarak diğer türlere dönüştürülebilir. Değerler bağlama bağlı olarak diğer türlere örtük olarak yayınlanabilir. Daha fazla bilgi için bkz . Veri türü önceliği (Transact-SQL).
İfadeler
Alanlara başvurma
JSON biçimli veriler veya üst bilgi satırına sahip CSV biçimli veriler için alanlara ada göre başvurulabilir. Alan adları tırnak içine alınmış veya tırnak içine alınmamış olabilir. Tırnak içine alınan alan adları çift tırnak karakteri ()"
içine alınır, boşluk içerebilir ve büyük/küçük harfe duyarlıdır. Okunmamış alan adları büyük/küçük harfe duyarlı değildir ve özel karakter içeremez.
CSV biçimli verilerde, alanlara alt çizgi (_
) karakteri ön ekli sıralı olarak da başvurulabilir. Örneğin, ilk alana olarak _1
veya on birinci alana olarak _11
başvurulabilir. Alanlara sıralı olarak başvurmak, üst bilgi satırı içermeyen CSV biçimli veriler için yararlıdır ve bu durumda belirli bir alana başvurmanın tek yolu sıralı olarak yapılır.
İşleçler
Aşağıdaki standart SQL işleçleri desteklenir:
İşleç | Açıklama |
---|---|
= |
İki ifadenin eşitliğini karşılaştırır (karşılaştırma işleci). |
!= |
Bir ifadenin başka bir ifadeye (karşılaştırma işleci) eşit olup olmadığını sınar. |
<> |
eşit olmayan (karşılaştırma işleci) için iki ifadeyi karşılaştırır. |
< |
küçüktür (karşılaştırma işleci) için iki ifadeyi karşılaştırır. |
<= |
İki ifadeyi küçük veya eşittir (karşılaştırma işleci) için karşılaştırır. |
> |
büyüktür (karşılaştırma işleci) için iki ifadeyi karşılaştırır. |
>= |
büyüktür veya eşittir (karşılaştırma işleci) için iki ifadeyi karşılaştırır. |
+ |
İki sayı ekler. Bu toplama aritmetik işleci tarihe gün olarak bir sayı da ekleyebilir. |
- |
İki sayıyı (aritmetik çıkarma işleci) çıkarır. |
/ |
Bir sayıyı diğerine böler (aritmetik bölme işleci). |
* |
İki ifadeyi (aritmetik çarpma işleci) çarpar. |
% |
Bir sayının kalan kısmını başka bir sayıya bölünerek döndürür. |
AND |
İki tamsayı değeri arasında bit düzeyinde mantıksal AND işlemi gerçekleştirir. |
OR |
Transact-SQL deyimleri içindeki ikili ifadelere çevrildiği gibi belirtilen iki tamsayı değeri arasında bit düzeyinde mantıksal OR işlemi gerçekleştirir. |
NOT |
Boole girişini olumsuzlar. |
CAST |
Bir veri türündeki bir ifadeyi bir diğerine dönüştürür. |
BETWEEN |
Test etmek için bir aralık belirtir. |
IN |
Belirtilen değerin bir alt sorgudaki veya listedeki herhangi bir değerle eşleşip eşleşmediğini belirler. |
NULLIF |
Belirtilen iki ifade eşitse null değer döndürür. |
COALESCE |
Bağımsız değişkenleri sırayla değerlendirir ve başlangıçta NULL olarak değerlendirilmeyen ilk ifadenin geçerli değerini döndürür. |
Bir işlecin solundaki ve sağındaki veri türleri farklıysa, otomatik dönüştürme burada belirtilen kurallara göre gerçekleştirilir: Veri türü önceliği (Transact-SQL).
Sorgu hızlandırma SQL dili, bu makalede açıklanan veri türlerinin yalnızca çok küçük bir alt kümesini destekler. Bu makalenin Veri Türleri bölümüne bakın.
Çevirir
Sorgu hızlandırma SQL dili, buradaki kurallara göre CAST işlecini destekler: Veri türü dönüştürme (Veritabanı Altyapısı).
Sorgu hızlandırma SQL dili, bu makalede açıklanan veri türlerinin yalnızca küçük bir alt kümesini destekler. Bu makalenin Veri Türleri bölümüne bakın.
Dize işlevleri
Sorgu hızlandırma SQL dili aşağıdaki standart SQL dizesi işlevlerini destekler:
İşlev | Açıklama |
---|---|
CHAR_LENGTH | Dize ifadesi bir karakter veri türündeyse, dize ifadesinin karakter cinsinden uzunluğunu döndürür; aksi takdirde, dize ifadesinin bayt cinsinden uzunluğunu döndürür (8'e bölünen bit sayısından küçük olmayan en küçük tamsayı). (Bu işlev CHARACTER_LENGTH işleviyle aynıdır.) |
CHARACTER_LENGTH | Dize ifadesi bir karakter veri türündeyse, dize ifadesinin karakter cinsinden uzunluğunu döndürür; aksi takdirde, dize ifadesinin bayt cinsinden uzunluğunu döndürür (8'e bölünen bit sayısından küçük olmayan en küçük tamsayı). (Bu işlev CHAR_LENGTH işleviyle aynıdır |
LOWER | Büyük harf karakter verilerini küçük harfe dönüştürdükten sonra bir karakter ifadesi döndürür. |
UPPER | Küçük harf karakter verilerinin büyük harfe dönüştürüldüğü bir karakter ifadesi döndürür. |
DİZE | SQL Server bir karakter, ikili, metin veya görüntü ifadesinin bir bölümünü döndürür. |
TRIM | Dizenin başındaki ve sonundaki boşluk karakterini (32) veya belirtilen diğer karakterleri kaldırır. |
ÖNDE GELEN | Dizenin başından boşluk karakterini (32) veya belirtilen diğer karakterleri kaldırır. |
IZLEYEN | Karakter karakterlerini (32) veya belirtilen diğer karakterleri dizenin sonundan kaldırır. |
Aşağıda birkaç örnek verilmiştir:
İşlev | Örnek | Sonuç |
---|---|---|
CHARACTER_LENGTH | SELECT CHARACTER_LENGTH('abcdefg') from BlobStorage |
7 |
CHAR_LENGTH | SELECT CHAR_LENGTH(_1) from BlobStorage |
1 |
LOWER | SELECT LOWER('AbCdEfG') from BlobStorage |
abcdefg |
UPPER | SELECT UPPER('AbCdEfG') from BlobStorage |
ABCDEFG |
SUBSTRING | SUBSTRING('123456789', 1, 5) |
23456 |
TRIM | TRIM(BOTH '123' FROM '1112211Microsoft22211122') |
Microsoft |
Tarih işlevleri
Aşağıdaki standart SQL tarih işlevleri desteklenir:
DATE_ADD
DATE_DIFF
EXTRACT
TO_STRING
TO_TIMESTAMP
Şu anda , standart IS08601'in tüm tarih biçimleri dönüştürülür.
DATE_ADD işlevi
Sorgu hızlandırma SQL dili işlev için year, month, day, hour, minute, second işlevlerini DATE_ADD
destekler.
Örnekler:
DATE_ADD(datepart, quantity, timestamp)
DATE_ADD('minute', 1, CAST('2017-01-02T03:04:05.006Z' AS TIMESTAMP)
DATE_DIFF işlevi
Sorgu hızlandırma SQL dili işlev için year, month, day, hour, minute, second işlevlerini DATE_DIFF
destekler.
DATE_DIFF(datepart, timestamp, timestamp)
DATE_DIFF('hour','2018-11-09T00:00+05:30','2018-11-09T01:00:23-08:00')
EXTRACT işlevi
İşlev için desteklenen tarih bölümü dışında EXTRACT için DATE_ADD
sorgu hızlandırma SQL dili tarih bölümü olarak timezone_hour ve timezone_minute destekler.
Örnekler:
EXTRACT(datepart FROM timestampstring)
EXTRACT(YEAR FROM '2010-01-01T')
TO_STRING işlevi
Örnekler:
TO_STRING(TimeStamp , format)
TO_STRING(CAST('1969-07-20T20:18Z' AS TIMESTAMP), 'MMMM d, y')
Bu tabloda işlevin çıkış biçimini TO_STRING
belirtmek için kullanabileceğiniz dizeler açıklanmaktadır.
Biçimlendirme dizesi | Çıktı |
---|---|
yy | 2 basamaklı biçimde yıl - 1999 olarak '99' |
y | 4 basamaklı biçimde yıl |
yyyy | 4 basamaklı biçimde yıl |
M | Yılın ayı - 1 |
MM | Sıfır doldurulmuş Ay - 01 |
AAA | Abbr. Yılın ayı - OCA |
MMMM | Tam ay - Mayıs |
d | Ayın günü (1-31) |
Ekle | Sıfır doldurulmuş ayın günü (01-31) |
a | AM veya PM |
h | Günün saati (1-12) |
hh | Sıfır doldurulmuş Saat od günü (01-12) |
H | Günün saati (0-23) |
HH | Sıfır Doldurulmuş Günün saati (00-23) |
m | Saat dakikası (0-59) |
mm | Sıfır doldurulmuş dakika (00-59) |
s | Dakika saniyesi (0-59) |
ss | Sıfır doldurulmuş Saniye (00-59) |
S | Saniye Kesirli (0,1-0,9) |
SS | Saniye Kesirli (0,01-0,99) |
SSS | Saniye Kesri (0,001-0,999) |
X | Saat Cinsinden Uzaklık |
XX veya XXXX | Saat ve dakika cinsinden uzaklık (+0430) |
XXX veya XXXXX | Saat ve dakika cinsinden uzaklık (-07:00) |
x | Saat cinsinden uzaklık (7) |
xx veya xxxx | Saat ve dakika olarak uzaklık (+0530) |
Xxx veya xxxxx | Saat ve dakika olarak uzaklık (+05:30) |
TO_TIMESTAMP işlevi
Yalnızca IS08601 biçimleri desteklenir.
Örnekler:
TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')
Not
Sistem süresini almak için işlevini de kullanabilirsiniz UTCNOW
.
Toplama İfadeleri
SELECT deyimi bir veya daha fazla yansıtma ifadesi veya tek bir toplama ifadesi içerebilir. Aşağıdaki toplama ifadeleri desteklenir:
İfade | Açıklama |
---|---|
SAY(*) | Koşul ifadesiyle eşleşen kayıt sayısını döndürür. |
BAĞ_DEĞ_SAY(ifade) | İfadenin null olmayan kayıt sayısını döndürür. |
AVG(ifade) | İfadenin null olmayan değerlerinin ortalamasını döndürür. |
MIN(ifade) | İfadenin null olmayan en düşük değerini döndürür. |
MAX(ifade | İfadenin null olmayan en büyük değerini döndürür. |
TOPLA(ifade) | İfadenin null olmayan tüm değerlerinin toplamını döndürür. |
EKSİK
işleci IS MISSING
, sorgu hızlandırma SQL dilinin desteklediği standart olmayan tek dildir. JSON verileri için, belirli bir giriş kaydında bir alan eksikse ifade alanı IS MISSING
true Boole değerini değerlendirir.
Tablo Tanımlayıcıları
CSV verileri için tablo adı her zaman BlobStorage
şeklindedir. Örnek:
SELECT * FROM BlobStorage
JSON verileri için ek seçenekler sağlanır:
SELECT * FROM BlobStorage[*].path
Bu, JSON verilerinin alt kümeleri üzerinde sorgular yapılmasına olanak tanır.
JSON sorguları için FROM yan tümcesinin bir bölümündeki yoldan bahsedebilirsiniz. Bu yollar, JSON verilerinin alt kümesini ayrıştırmaya yardımcı olur. Bu yollar JSON Dizisi ve Nesne değerlerine başvurabilir.
Şimdi bunu daha ayrıntılı olarak anlamak için bir örnek alalım.
Bu bizim örnek verilerimizdir:
{
"id": 1,
"name": "mouse",
"price": 12.5,
"tags": [
"wireless",
"accessory"
],
"dimensions": {
"length": 3,
"width": 2,
"height": 2
},
"weight": 0.2,
"warehouses": [
{
"latitude": 41.8,
"longitude": -87.6
}
]
}
Yukarıdaki verilerden yalnızca warehouses
JSON nesnesiyle ilgilenebilirsiniz.
warehouses
nesnesi bir JSON dizi türüdür, bu nedenle FROM yan tümcesinde bundan bahsedebilirsiniz. Örnek sorgunuz şuna benzer olabilir.
SELECT latitude FROM BlobStorage[*].warehouses[*]
Sorgu tüm alanları alır ancak yalnızca enlemi seçer.
Yalnızca dimensions
JSON nesne değerine erişmek istiyorsanız, sorgunuzda bu nesneye başvurmayı kullanabilirsiniz. Örnek:
SELECT length FROM BlobStorage[*].dimensions
Bu, nesnenin dimensions
üyelerine erişiminizi de sınırlar. JSON alanlarının diğer üyelerine ve JSON nesnelerinin iç değerlerine erişmek istiyorsanız, aşağıdaki örnekte gösterildiği gibi bir sorgu kullanabilirsiniz:
SELECT weight,warehouses[0].longitude,id,tags[1] FROM BlobStorage[*]
Not
BlobStorage ve BlobStorage[*] her ikisi de nesnenin tamamına başvurur. Ancak FROM yan tümcesinde bir yolunuz varsa BlobStorage[*].path kullanmanız gerekir
Sys.Split
Bu, SELECT deyiminin yalnızca CSV biçimli veriler için kullanılabilen özel bir biçimidir.
SELECT sys.split(split_size) FROM BlobStorage
CSV veri kayıtlarını toplu olarak indirip işlemek istediğiniz durumlarda bu deyimi kullanın. Bu şekilde, tüm kayıtları tek seferde indirmek zorunda kalmadan kayıtları paralel olarak işleyebilirsiniz. Bu deyim CSV dosyasındaki kayıtları döndürmez. Bunun yerine, toplu iş boyutlarından oluşan bir koleksiyon döndürür. Daha sonra her toplu iş boyutunu kullanarak bir grup veri kaydı alabilirsiniz.
Her toplu işlemin içermesini istediğiniz bayt sayısını belirtmek için split_size parametresini kullanın. Örneğin, bir kerede yalnızca 10 MB veri işlemek istiyorsanız, deyiminiz şöyle görünür: SELECT sys.split(10485760)FROM BlobStorage
çünkü 10 MB 10.485.760 bayta eşittir. Her toplu işlem, bu 10 MB'a sığabilecek kadar çok kayıt içerir.
Çoğu durumda, her toplu işlemin boyutu belirttiğiniz sayıdan biraz daha yüksek olur. Bunun nedeni toplu işlemde kısmi kayıt bulunamamasıdır. Bir toplu işteki son kayıt eşiğinizin sonundan önce başlarsa, toplu iş tam kaydı içerebilmesi için daha büyük olur. Son toplu işlemi boyutu büyük olasılıkla belirttiğiniz boyuttan daha küçük olacaktır.
Not
split_size en az 10 MB (10485760) olmalıdır.