Aracılığıyla paylaş


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 karşı ç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 birinin değerlendirilmesinden elde edilen 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).

Uyarı

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 tam sayı.
yüzen nesne 64 bit ("çift duyarlıklı") kayan nokta.
İPLİK Değişken uzunlukta Unicode dizesi.
ZAMAN DAMGASI Zaman içinde bir nokta.
boolean Doğru ya da yanlış.

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 dönüştürülebilir. Daha fazla bilgi için bkz. Veri türü önceliği (Transact-SQL).

İfadeler

Alanlara referans verme

JSON biçimli veriler veya üst bilgi satırı içeren CSV biçimli veriler için alanlara ada göre başvurulabilir. Alan adları tırnak içine alınabilir veya tırnak içine alınmayabilir. Tırnak içine alınan alan adları çift tırnak karakterleri (") ile çevrelenir, boşluk içerebilir ve büyük/küçük harfe duyarlıdır. Harfsiz alan adları büyük/küçük harfe duyarlı değildir ve özel karakter içermeyebilir.

CSV biçimli verilerde alanlara, önüne alt çizgi (_) karakteri eklenmiş sıra numarası ile de başvurulabilir. Örneğin, ilk alan _1 olarak kullanılabilir veya on birinci alan _11 olarak kullanılabilir. Alanlara sıralı olarak başvurmak, üst bilgi satırı içermeyen CSV biçimli veriler için kullanışlıdır ve bu durumda belirli bir alana başvurmanın tek yolu sıralı olarak yapılır.

Operatörler

Aşağıdaki standart SQL işleçleri desteklenir:

Operatör 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.
<> İki ifadeyi eşit olmadığını belirlemek amacıyla karşılaştırır (bir karşılaştırma işleci).
< Bir ifadenin diğerinden küçük olup olmadığını (karşılaştırma operatörü) değerlendirir.
<= İki ifadeyi küçük veya eşit (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.
>= İki ifadeyi büyüktür veya eşittir durumuna göre (karşılaştırma işleci olarak) karşılaştırır.
+ İki sayı ekler. Bu toplama aritmetik işleci, tarihe gün olarak bir sayı da ekleyebilir.
- İki sayıyı çıkarır (aritmetik çıkarma işleci).
/ Bir sayıyı diğerine böler (aritmetik bölme işleci).
* İki ifadeyi çarpar (aritmetik çarpma işleci).
% Bir sayının başka bir sayıya bölünmesi sonucunda kalan kısmı 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 şekilde 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ünün ifadesini başka bir veri türüne 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
DÜŞÜR Büyük harf karakter verilerini küçük harfe dönüştürdükten sonra bir karakter ifadesi döndürür.
ÜST Küçük harf karakter verilerinin büyük harfe dönüştürüldüğü bir karakter ifadesi döndürür.
ALT DİZİ SQL Server'da karakter, ikili, metin veya görüntü ifadesinin bir bölümünü döndürür.
SÜSLEMEK Dizenin başlangıcından ve sonundan boşluk karakterini (32) veya belirtilen diğer karakterleri kaldırır.
ÖNDE GELEN Dizenin başlangıcından boşluk karakterini (32) veya belirtilen diğer karakterleri kaldırır.
IZLEYEN Dizenin sonundaki boşluk karakteri karakterlerini (32) veya belirtilen diğer karakterleri kaldırır.

İşte birkaç örnek:

İşlev Örnek Sonuç
CHARACTER_LENGTH SELECT CHARACTER_LENGTH('abcdefg') from BlobStorage 7
CHAR_LENGTH SELECT CHAR_LENGTH(_1) from BlobStorage 1
DÜŞÜR SELECT LOWER('AbCdEfG') from BlobStorage abcdefg
ÜST SELECT UPPER('AbCdEfG') from BlobStorage ABCDEFG
Alt Dizi SUBSTRING('123456789', 1, 5) 23456
SÜSLEMEK 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ülmektedir.

DATE_ADD işlevi

Sorgu hızlandırma SQL dili işlev için yıl, ay, gün, saat, dakika, saniyeyi 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 yıl, ay, gün, saat, dakika, saniyeyi 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 fonksiyonu

EXTRACT işlevi için tarihin desteklenen bölümleri haricinde, sorgu hızlandırma SQL dili timezone_hour ve timezone_minute'yi tarih bölümü olarak 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.

Dizeyi biçimlendir Çıktı
Yy Yılın 2 basamaklı formatı - 1999, '99' olarak yazılır
y Yılın 4 basamaklı formatı
yyyy Yılın 4 basamaklı formatı
M Yılın ayı - 1
MM Sıfır doldurulmuş ay - 01
MMM Yılın kısaltılmış ayı - OCA
MMMM Tam ay - Mayıs
d Ayın günü (1-31)
Dd Ayın sıfır doldurulmuş günü (01-31)
a AM veya PM
h Günün saati (1-12)
Hh Sıfırla doldurulmuş günün saatleri (01-12)
H Günün saati (0-23)
HH Günün sıfır doldurulmuş saati (00-23)
m Saatin dakikası (0-59)
Mm Sıfır doldurulmuş dakika (00-59)
s Dakikanın saniyesi (0-59)
ss Sıfır doldurulmuş saniyeler (00-59)
S Saniyenin kesirleri (0,1-0,9)
SS Saniyenin kesir kısmı (0,01-0,99)
SSS Saniye kesri (0,001-0,999)
X Saat cinsinden uzaklık
XX veya XXXX Saat ve dakika cinsinden zaman farkı (+0430)
XXX veya XXXXX Saat ve dakika cinsinden fark (-07:00)
x Saat cinsinden uzaklık (7)
xx veya xxxx Saat ve dakika olarak zaman dilimi farkı (+0530)
Xxx veya xxxxx Saat ve dakika olarak fark (+05:30)

TO_TIMESTAMP işlevi

Yalnızca IS08601 biçimleri desteklenir.

Örnekler:

TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')

Uyarı

Sistem saatini almak için işlevini de kullanabilirsiniz UTCNOW .

Toplama İfadeleri

SELECT deyimi bir veya daha fazla projeksiyon ifadesi veya tek bir toplama ifadesi içerebilir. Aşağıdaki toplama ifadeleri desteklenir:

İfade Açıklama
COUNT(*) Koşul ifadesiyle eşleşen kayıt sayısını döndürür.
BAĞ_DEĞ_SAY(ifade) İfade için null olmayan kayıtların 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

IS MISSING işleç, 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. Örneğin:

SELECT * FROM BlobStorage

JSON verileri için ek seçenekler sağlanır:

SELECT * FROM BlobStorage[*].path

Bu, JSON verilerinin alt kümeleri üzerinden sorgu yapılmasını sağlar.

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ı anlamak için bir örnek alalım.

Örnek verilerimiz:

{
  "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 ilgileniyor olabilirsiniz. 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. Örneğin:

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[*]

Uyarı

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ı bir kerede indirmek zorunda kalmadan kayıtları paralel olarak işleyebilirsiniz. Bu ifade CSV dosyasından kayıtları döndürmez. Bunun yerine, işlem grubu boyutlarından oluşan bir koleksiyon döndürür. Ardından 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 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şlemin kısmi kayıt içerememesidir. Bir toplu işteki son kayıt, eşik sona ermeden önce başlarsa, toplu iş tüm kaydı içerebilmesi için daha büyük olur. Son toplu işlemin boyutu büyük olasılıkla belirttiğiniz boyuttan küçük olacaktır.

Uyarı

split_size en az 10 MB (10485760) olmalıdır.

Ayrıca bkz.