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 _1veya on birinci alana olarak _11baş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.

Ayrıca bkz.