Megosztás a következőn keresztül:


Lekérdezésgyorsítási SQL-nyelvi referencia

A lekérdezésgyorsítás egy ANSI SQL-szerű nyelvet támogat a lekérdezések blobtartalmakon keresztüli kifejezéséhez. A lekérdezésgyorsító SQL-dialektus az ANSI SQL egy részhalmaza, amely korlátozott számú támogatott adattípussal, operátorral stb. rendelkezik, de az ANSI SQL-en is bővül, hogy támogassa a lekérdezéseket hierarchikus félig strukturált adatformátumokon, például a JSON-on.

SELECT Szintaxis

A lekérdezésgyorsítás által támogatott egyetlen SQL-utasítás a SELECT utasítás. Ez a példa minden olyan sort visszaad, amelynél a kifejezés igaz értéket ad vissza.

SELECT * FROM table [WHERE expression] [LIMIT limit]

CSV formátumú adatok esetén a táblának kell lennie BlobStorage. Ez azt jelenti, hogy a lekérdezés a REST-hívásban megadott bármelyik blobon fog futni. JSON-formátumú adatok esetén a tábla egy "táblaleíró". Lásd a cikk Táblaleírók szakaszát.

Az alábbi példában minden olyan sor esetében, amelynek a WHERE kifejezés igaz értéket ad vissza, ez az utasítás egy új sort ad vissza, amely az egyes vetületi kifejezések kiértékelésével jön létre.

SELECT expression [, expression ...] FROM table [WHERE expression] [LIMIT limit]

A SELECT kifejezés részeként megadhat egy vagy több oszlopot (például SELECT Title, Author, ISBN).

Megjegyzés

A SELECT kifejezésben használható oszlopok maximális száma 49. Ha a SELECT utasításnak 49-nél több oszlopot kell visszaadnia, akkor használjon helyettesítő karaktert (*) a SELECT kifejezéshez (például: SELECT *).

Az alábbi példa aggregátumszámítást (például egy adott oszlop átlagértékét) ad vissza az egyes sorokban, amelyeknél a kifejezés igaz értéket ad vissza.

SELECT aggregate_expression FROM table [WHERE expression] [LIMIT limit]

Az alábbi példa megfelelő eltolásokat ad vissza egy CSV formátumú blob felosztásához. Lásd a cikk Sys.Split szakaszát.

SELECT sys.split(split_size)FROM BlobStorage

Adattípusok

Adattípus Leírás
INT 64 bites aláírt egész szám.
ÚSZIK 64 bites ("dupla pontosságú") lebegőpontos.
Zsinór Változó hosszúságú Unicode-sztring.
IDŐBÉLYEG Egy pont az időben.
BULIÁN Igaz vagy hamis.

Ha CSV formátumú adatokból olvas be értékeket, minden érték sztringként lesz beolvasva. A sztringértékek más típusúvá alakíthatók CAST-kifejezések használatával. Az értékek a környezettől függően implicit módon más típusokra is átadhatók. További információ: Adattípus elsőbbsége (Transact-SQL).

Kifejezések

Hivatkozási mezők

hu-HU: JSON-formátumú adatok vagy fejlécsort tartalmazó CSV-formátumú adatok esetében a mezőkre a nevük alapján lehet hivatkozni. A mezőnevek idézhetők vagy visszavonhatók. Az idézett mezőneveket kettős idézőjelek (") közé tesszük, tartalmazhatnak szóközöket, és megkülönböztetik a kis- és nagybetűket. Az idézőjelek használata nélküli mezőnevek nem érzékenyek a kis- és nagybetűkre, és nem tartalmazhatnak speciális karaktereket.

CSV-formátumú adatokban a mezőkre lehet sorszám alapján is hivatkozni, ami egy aláhúzásjellel (_) kezdődik. Például az első mezőre úgy hivatkozhat, mint _1, vagy a tizenegyedik mezőre úgy hivatkozhat, mint _11. A mezők sorszám szerinti hivatkozása olyan CSV-formátumú adatok esetében hasznos, amelyek nem tartalmaznak fejlécsort, ebben az esetben az egyetlen módja annak, hogy egy adott mezőre sorszám alapján hivatkozzon.

Működtetők

A következő szabványos SQL-operátorok támogatottak:

Operátor Leírás
= Két kifejezés egyenlőségét hasonlítja össze (összehasonlító operátor).
!= Azt vizsgálja, hogy az egyik kifejezés nem egyenlő-e egy másik kifejezéssel (összehasonlító operátor).
<> Két olyan kifejezést hasonlít össze, amely nem egyenlő (összehasonlító operátor).
< Két kifejezést hasonlít össze kisebb mint (összehasonlító operátor) esetében.
<= Két kifejezést hasonlít össze kisebb vagy egyenlő értékre (összehasonlító operátor).
> Két kifejezést hasonlít össze a "nagyobb mint" összehasonlító operátorral.
>= Két kifejezést hasonlít össze nagyobb vagy egyenlő értékre (összehasonlító operátor).
+ Két számot ad hozzá. Ez az összeadási aritmetikai operátor egy napokban megadott számot is hozzáadhat egy dátumhoz.
- Kivon két számot (aritmetikai kivonási operátor).
/ Egy számot egy másikkal (aritmetikai osztás operátorával) oszt el.
* Két kifejezés (aritmetikai szorzási operátor) szorzása.
% Egy szám fennmaradó részét adja vissza egy másikkal osztva.
AND Bitenkénti logikai ÉS műveletet hajt végre két egész szám között.
OR Bitenkénti logikai VAGY műveletet hajt végre két megadott egész számérték között az Transact-SQL utasításokban lévő bináris kifejezésekre lefordítva.
NOT Logikai bemenetet nem ad ki.
CAST Egy adattípus kifejezését konvertálja egy másikra.
BETWEEN Egy tesztelni kívánt tartományt határoz meg.
IN Meghatározza, hogy egy megadott érték megfelel-e egy al lekérdezés vagy lista bármely értékének.
NULLIF Null értéket ad vissza, ha a két megadott kifejezés egyenlő.
COALESCE Az argumentumokat sorrendben értékeli ki, és az első olyan kifejezés aktuális értékét adja vissza, amely kezdetben nem null értékű.

Ha egy operátor bal és jobb oldalán eltérő adattípusok vannak, akkor az automatikus átalakítás az itt megadott szabályok szerint történik: Adattípus elsőbbsége (Transact-SQL).

A lekérdezésgyorsító SQL-nyelv csak a cikkben tárgyalt adattípusok egy nagyon kis részét támogatja. Lásd a cikk Adattípusok szakaszát.

Szereposztás

A lekérdezésgyorsító SQL-nyelv támogatja a CAST operátort az alábbi szabályok szerint: Adattípus-átalakítás (Adatbázismotor).

A lekérdezésgyorsító SQL-nyelv csak a cikkben tárgyalt adattípusok egy kis részét támogatja. Lásd a cikk Adattípusok szakaszát.

Karakterlánc függvények

A lekérdezésgyorsító SQL-nyelv a következő szabványos SQL-sztringfüggvényeket támogatja:

Funkció Leírás
KAR_HOSSZ A sztringkifejezés karaktereinek hosszát adja vissza, ha a sztringkifejezés karakter adattípusú; ellenkező esetben a sztringkifejezés bájtban megadott hosszát adja vissza (a legkisebb egész nem kisebb, mint a bitek száma 8-tal osztva). (Ez a függvény megegyezik a CHARACTER_LENGTH függvénnyel.)
KARAKTER_HOSSZUSÁG A sztringkifejezés karaktereinek hosszát adja vissza, ha a sztringkifejezés karakter adattípusú; ellenkező esetben a sztringkifejezés bájtban megadott hosszát adja vissza (a legkisebb egész nem kisebb, mint a bitek száma 8-tal osztva). (Ez a függvény megegyezik a CHAR_LENGTH függvénnyel
ALSÓ A nagybetűs karakteradatok kisbetűssé alakítása után visszaad egy karakterkifejezést.
FELSŐ Egy kisbetűs adatokat nagybetűssé konvertáló karakterkifejezést ad vissza.
részszöveg Egy karakter, bináris, szöveg vagy képkifejezés egy részét adja vissza az SQL Serverben.
NYÍR Eltávolítja a szóköz karaktert (char 32) vagy a megadott karaktereket a karakterlánc elejéről és végéről.
VEZETŐ Eltávolítja a szóköz karaktert char(32) vagy más megadott karaktereket a karakterlánc elejéről.
LEMARADÓ Eltávolítja a szóköz karakter (32) vagy más megadott karaktereket a karakterlánc végéről.

Íme néhány példa:

Funkció Példa Eredmény
KARAKTER_HOSSZUSÁG SELECT CHARACTER_LENGTH('abcdefg') from BlobStorage 7
KAR_HOSSZ SELECT CHAR_LENGTH(_1) from BlobStorage 1
ALSÓ SELECT LOWER('AbCdEfG') from BlobStorage abcdefg
FELSŐ SELECT UPPER('AbCdEfG') from BlobStorage ABCDEFG
részszöveg SUBSTRING('123456789', 1, 5) 23456
NYÍR TRIM(BOTH '123' FROM '1112211Microsoft22211122') Microsoft

Dátumfüggvények

A következő szabványos SQL-dátumfüggvények támogatottak:

  • DATE_ADD
  • DATE_DIFF
  • EXTRACT
  • TO_STRING
  • TO_TIMESTAMP

Jelenleg a standard IS08601 összes dátumformátuma konvertálva van.

DATE_ADD függvény

A lekérdezésgyorsító SQL-nyelv támogatja a függvény év, hónap, nap, óra, perc és másodperc értékét DATE_ADD .

Példák:

DATE_ADD(datepart, quantity, timestamp)
DATE_ADD('minute', 1, CAST('2017-01-02T03:04:05.006Z' AS TIMESTAMP)

DATE_DIFF függvény

A lekérdezésgyorsító SQL-nyelv támogatja a függvény év, hónap, nap, óra, perc és másodperc értékét DATE_DIFF .

DATE_DIFF(datepart, timestamp, timestamp)
DATE_DIFF('hour','2018-11-09T00:00+05:30','2018-11-09T01:00:23-08:00') 

EXTRACT függvény

A DATE_ADD függvény által támogatott dátumrészeken kívül a lekérdezésgyorsító SQL-nyelv támogatja a timezone_hour és timezone_minute elemeket dátumrészként.

Példák:

EXTRACT(datepart FROM timestampstring)
EXTRACT(YEAR FROM '2010-01-01T')

TO_STRING függvény

Példák:

TO_STRING(TimeStamp , format)
TO_STRING(CAST('1969-07-20T20:18Z' AS TIMESTAMP),  'MMMM d, y')

Ez a táblázat a függvény kimeneti formátumának TO_STRING megadására használható sztringeket ismerteti.

Sztring formázása Kimenet
Yy Év kétjegyű formátumban - 1999 mint '99'
y Év 4 jegyű formátumban
yyyyy Év 4 jegyű formátumban
M Év hónapja – 1
MM Nulla párnázott hónap – 01
MMM Az év rövidített hónapja – JANUÁR
MMMM Teljes hónap – május
d A hónap napja (1-31)
Dd A hónap napjának nullával kiegészített formája (01-31)
egy AM vagy PM
h A nap órája (1-12)
Hh A nap nullával kiegészített órái (01-12)
H A nap órája (0-23)
HH A nap nulla párnázott órája (00-23)
m Az óra percének száma (0-59)
Mm Nulla párnázott perc (00-59)
s Percek másodperce (0-59)
Ss Nulla párnázott másodperc (00-59)
S Másodperc törtrésze (0,1-0,9)
SS Másodperc törtrésze (0,01-0,99)
ÉER Másodperc törtrésze (0,001-0,999)
X Eltolás órákban
XX vagy XXXX Eltolás órákban és percekben (+0430)
XXX vagy XXXXX Eltolás órákban és percekben (-07:00)
x Eltolás órákban (7)
xx vagy xxxx Eltolás óránként és percben (+0530)
Xxx vagy xxxxx Eltolás óránként és percben (+05:30)

TO_TIMESTAMP függvény

Csak IS08601 formátumok támogatottak.

Példák:

TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')

Megjegyzés

A UTCNOW függvény használatával is lekérheti a rendszeridőt.

Kifejezések összesítése

A SELECT utasítás tartalmazhat egy vagy több vetületi kifejezést vagy egyetlen összesítő kifejezést. A következő összesítő kifejezések támogatottak:

Kifejezés Leírás
DARAB(*) A predikátumkifejezésnek megfelelő rekordok számát adja vissza.
DARAB(kifejezés) Azoknak a rekordoknak a számát adja vissza, amelyek kifejezése nem null.
AVG(kifejezés) A kifejezés nem null értékű értékeinek átlagát adja eredményül.
MIN(kifejezés) A kifejezés minimális nem null értékű értékét adja vissza.
MAX(kifejezés) A kifejezés maximális nem null értékű értékét adja vissza.
SZUM(kifejezés) A kifejezés összes nem null értékű értékének összegét adja vissza.

HIÁNYZÓ

Az IS MISSING operátor az egyetlen nem szabványos, amelyet a lekérdezésgyorsítási SQL-nyelv támogat. JSON-adatok esetén, ha egy mező hiányzik egy adott bemeneti rekordból, a kifejezésmező IS MISSING igaz logikai értékre lesz kiértékelve.

Táblaleírások

CSV-adatok esetén a tábla neve mindig BlobStorage. Például:

SELECT * FROM BlobStorage

JSON-adatok esetén további lehetőségek érhetők el:

SELECT * FROM BlobStorage[*].path

Ez lehetővé teszi a lekérdezéseket a JSON-adatok részhalmazai felett.

JSON-lekérdezések esetén az elérési utat a FROM záradék egy részében említheti meg. Ezek az elérési utak segítenek elemezni a JSON-adatok részhalmazát. Ezek az elérési utak JSON-tömb- és objektumértékekre hivatkozhatnak.

Vegyünk egy példát ennek részletesebb megértéséhez.

Ezek a mintaadatok:

{
  "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
    }
  ]
}

Előfordulhat, hogy csak a warehouses fenti adatokból származó JSON-objektum érdekli. Az warehouses objektum egy JSON-tömbtípus, ezért ezt a FROM záradékban is megemlítheti. A minta lekérdezés így nézhet ki.

SELECT latitude FROM BlobStorage[*].warehouses[*]

A lekérdezés lekéri az összes mezőt, de csak a szélességet választja ki.

Ha csak a dimensions JSON-objektum értékét szeretné elérni, a lekérdezésben hivatkozhat erre az objektumra. Például:

SELECT length FROM BlobStorage[*].dimensions

Ez is korlátozza a dimensions objektum tagjaihoz való hozzáférést. Ha a JSON-mezők más tagjait és a JSON-objektumok belső értékeit szeretné elérni, akkor használhat egy lekérdezést, amely az alábbi példában látható:

SELECT weight,warehouses[0].longitude,id,tags[1] FROM BlobStorage[*]

Megjegyzés

A BlobStorage és a BlobStorage[*] egyaránt az egész objektumra hivatkozik. Ha azonban van egy elérési útja a FROM záradékban, akkor a BlobStorage[*].path függvényt kell használnia

Sys.Split

Ez a SELECT utasítás egy speciális formája, amely csak CSV formátumú adatokhoz érhető el.

SELECT sys.split(split_size) FROM BlobStorage

Ezt az utasítást olyan esetekben használja, amikor csV-adatrekordokat szeretne letölteni és feldolgozni kötegekben. Így párhuzamosan is feldolgozhatja a rekordokat ahelyett, hogy egyszerre kellene letöltenie az összes rekordot. Ez az utasítás nem ad vissza rekordokat a CSV-fájlból. Ehelyett kötegméretek gyűjteményét adja vissza. Ezután az egyes kötegméretek használatával lekérheti az adatrekordok kötegét.

A split_size paraméter használatával adja meg az egyes kötegek által tartalmazandó bájtok számát. Ha például egyszerre csak 10 MB adatot szeretne feldolgozni, az utasítás így nézne ki: SELECT sys.split(10485760)FROM BlobStorage mivel a 10 MB egyenlő 10 485 760 bájttal. Minden köteg annyi rekordot tartalmaz, amennyi belefér a 10 MB-ba.

A legtöbb esetben az egyes kötegek mérete valamivel nagyobb lesz, mint a megadott szám. Ennek az az oka, hogy egy köteg nem tartalmazhat részleges rekordot. Ha egy köteg utolsó rekordja a küszöbérték vége előtt kezdődik, a köteg nagyobb lesz, hogy az tartalmazza a teljes rekordot. Az utolsó köteg mérete valószínűleg kisebb lesz, mint a megadott méret.

Megjegyzés

A split_size legalább 10 MB-nak (10485760) kell lennie.

Lásd még