Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Akcelerace dotazů podporuje jazyk podobný jazyku ANSI SQL pro vyjádření dotazů nad obsahem objektů blob. Dialekt SQL akcelerace dotazů je podmnožinou ANSI SQL s omezenou sadou podporovaných datových typů, operátorů atd., ale rozšiřuje se také na ANSI SQL, aby podporovala dotazy v hierarchických částečně strukturovaných datových formátech, jako je JSON.
Syntaxe SELECT
Jediným příkazem SQL podporovaným akcelerací dotazů je příkaz SELECT. Tento příklad vrátí každý řádek, pro který výraz vrátí hodnotu true.
SELECT * FROM table [WHERE expression] [LIMIT limit]
Pro data ve formátu CSV musí být tabulka správně nastavena. To znamená, že dotaz se spustí proti objektu blob zadanému ve volání REST. Pro data ve formátu JSON je tabulka "popisovač tabulky". Viz část Popisovače tabulek v tomto článku.
V následujícím příkladu pro každý řádek, pro který výraz WHERE vrátí hodnotu true, tento příkaz vrátí nový řádek, který se vytvoří z vyhodnocení každého výrazu projekce.
SELECT expression [, expression ...] FROM table [WHERE expression] [LIMIT limit]
Jako součást výrazu SELECT můžete zadat jeden nebo více konkrétních sloupců (například SELECT Title, Author, ISBN
).
Poznámka:
Maximální počet konkrétních sloupců, které můžete použít ve výrazu SELECT, je 49. Pokud potřebujete příkaz SELECT k vrácení více než 49 sloupců, použijte zástupný znak (*
) pro výraz SELECT (například: SELECT *
).
Následující příklad vrátí agregovaný výpočet (například: průměrná hodnota konkrétního sloupce) u každého řádku, pro který výraz vrátí hodnotu true.
SELECT aggregate_expression FROM table [WHERE expression] [LIMIT limit]
Následující příklad vrátí vhodné offsety pro rozdělení objektu blob formátovaného jako CSV. Viz část Sys.Split tohoto článku.
SELECT sys.split(split_size)FROM BlobStorage
Datové typy
Datový typ | Popis |
---|---|
INT | 64-bitové celé číslo se znaménkem. |
PLOVAT | 64bitová ("dvojitá přesnost") s plovoucí desetinnou čárkou. |
ŘETĚZEC | Řetězec Unicode s proměnnou délkou |
ČASOVÁ ZNAČKA | Bod v čase. |
BOOLEOVSKÝ | Pravda nebo nepravda. |
Při čtení hodnot z dat ve formátu CSV se všechny hodnoty čtou jako řetězce. Řetězcové hodnoty mohou být převedeny na jiné typy pomocí výrazů CAST. Hodnoty mohou být implicitně přetypovávat na jiné typy v závislosti na kontextu. Další informace naleznete v tématu Priorita datového typu (Transact-SQL).
Výrazy
Odkazování na pole
U dat ve formátu JSON nebo dat ve formátu CSV s řádkem záhlaví můžou být pole odkazována podle názvu. Názvy polí můžou být citované nebo necitované. Názvy polí uzavřené v dvojitých uvozovkách ("
) mohou obsahovat mezery a rozlišují velká a malá písmena. Necitované názvy polí nerozlišují malá a velká písmena a nesmí obsahovat žádné speciální znaky.
V datech formátovaných ve formátu CSV můžou být pole také odkazována pořadovým znakem s předponou podtržítka (_
). Na první pole lze například odkazovat jako _1
, nebo na jedenácté pole lze odkazovat jako _11
. Odkazování na pole podle pořadí je užitečné pro data ve formátu CSV, která neobsahují řádek záhlaví, v takovém případě je jediným způsobem, jak odkazovat na konkrétní pole, podle pořadí.
Operátoři
Podporují se následující standardní operátory SQL:
Operátor | Popis |
---|---|
= |
Porovná rovnost dvou výrazů (relační operátor). |
!= |
Testuje, zda se jeden výraz nerovná jinému výrazu (relační operátor). |
<> |
Porovná dva výrazy, které se nerovnají (relační operátor). |
< |
Porovnává dva výrazy pro menší než (porovnávací operátor). |
<= |
Porovná dva výrazy pomocí operátoru menší nebo rovno (relační operátor). |
> |
Porovná dva výrazy pro větší než (relační operátor). |
>= |
Porovnává dva výrazy, zda jsou větší nebo rovny (porovnávací operátor). |
+ |
Sečte dvě čísla. Tento aritmetický operátor sčítání může také přidat k datu číslo vyjádřené v dnech. |
- |
Odečte dvě čísla (aritmetický operátor odčítání). |
/ |
Vydělí jedno číslo jiným (aritmetický operátor dělení). |
* |
Vynásobí dva výrazy (aritmetický operátor násobení). |
% |
Vrátí zbytek jednoho čísla děleného jiným číslem. |
AND |
Provede bitovou logickou operaci A mezi dvěma celočíselnými hodnotami. |
OR |
Provede bitovou logickou operaci OR mezi dvěma zadanými celočíselnými hodnotami převedenými na binární výrazy v rámci příkazů Transact-SQL. |
NOT |
Neguje logický vstup. |
CAST |
Převede výraz jednoho datového typu na jiný. |
BETWEEN |
Určuje rozsah, který se má testovat. |
IN |
Určuje, zda zadaná hodnota odpovídá libovolné hodnotě v poddotazu nebo seznamu. |
NULLIF |
Vrátí hodnotu null, pokud jsou dva zadané výrazy stejné. |
COALESCE |
Vyhodnotí argumenty v pořadí a vrátí aktuální hodnotu prvního výrazu, který se zpočátku nevyhodnocuje jako NULL. |
Pokud se datové typy na levé a pravé straně operátoru liší, provede se automatický převod podle pravidel uvedených zde: priorita datového typu (Transact-SQL).
Jazyk SQL akcelerace dotazů podporuje pouze velmi malou podmnožinu datových typů probíraných v tomto článku. Viz část Datové typy tohoto článku.
Předvádí
Jazyk SQL akcelerace dotazů podporuje operátor CAST podle pravidel zde: Převod datového typu (databázový stroj).
Jazyk SQL akcelerace dotazů podporuje pouze malou podmnožinu datových typů, které jsou popsány v tomto článku. Viz část Datové typy tohoto článku.
Řetězcové funkce
Jazyk SQL akcelerace dotazů podporuje následující standardní funkce řetězce SQL:
Funkce | Popis |
---|---|
CHAR_LENGTH | Vrátí délku znaků řetězcového výrazu, pokud je řetězcový výraz datový typ znaku; v opačném případě vrátí délku v bajtech řetězcového výrazu (nejmenší celé číslo není menší než počet bitů dělený číslem 8). (Tato funkce je stejná jako funkce CHARACTER_LENGTH.) |
Délka_znaku | Vrátí délku znaků řetězcového výrazu, pokud je řetězcový výraz datový typ znaku; v opačném případě vrátí délku v bajtech řetězcového výrazu (nejmenší celé číslo není menší než počet bitů dělený číslem 8). (Tato funkce je stejná jako funkce CHAR_LENGTH |
DOLNÍ | Vrátí výraz znaku po převodu velkých písmen na malá písmena. |
HORNÍ | Vrátí textový výraz, ve kterém jsou malá písmena převedena na velká písmena. |
podřetězec | Vrátí část znaku, binárního, textového nebo obrázkového výrazu v SQL Serveru. |
ZASTŘIHNOUT | Odebere znak mezery char(32) nebo jiné zadané znaky ze začátku a konce řetězce. |
VEDOUCÍ | Odebere znak mezery char(32) nebo jiné zadané znaky od začátku řetězce. |
STOPOVÁNÍ | Odebere znak mezery char(32) nebo jiné určené znaky na konci řetězce. |
Zde je několik příkladů:
Funkce | Příklad | Výsledek |
---|---|---|
Délka_znaku | SELECT CHARACTER_LENGTH('abcdefg') from BlobStorage |
7 |
CHAR_LENGTH | SELECT CHAR_LENGTH(_1) from BlobStorage |
1 |
DOLNÍ | SELECT LOWER('AbCdEfG') from BlobStorage |
abcdefg |
VRCHNÍ | SELECT UPPER('AbCdEfG') from BlobStorage |
ABCDEFG |
PODŘETĚZEC | SUBSTRING('123456789', 1, 5) |
23456 |
ZASTŘIHNOUT | TRIM(BOTH '123' FROM '1112211Microsoft22211122') |
Microsoft |
Datumové funkce
Podporují se následující standardní funkce data SQL:
DATE_ADD
DATE_DIFF
EXTRACT
TO_STRING
TO_TIMESTAMP
V současné době jsou převedeny všechny formáty dat standardu ISO8601.
Funkce DATE_ADD
Jazyk SQL akcelerace dotazů podporuje rok, měsíc, den, hodinu, minutu, sekundu DATE_ADD
pro funkci.
Příklady:
DATE_ADD(datepart, quantity, timestamp)
DATE_ADD('minute', 1, CAST('2017-01-02T03:04:05.006Z' AS TIMESTAMP)
funkce DATE_DIFF
Jazyk SQL akcelerace dotazů podporuje rok, měsíc, den, hodinu, minutu, sekundu DATE_DIFF
pro funkci.
DATE_DIFF(datepart, timestamp, timestamp)
DATE_DIFF('hour','2018-11-09T00:00+05:30','2018-11-09T01:00:23-08:00')
FUNKCE EXTRACT
Pokud jde o funkci EXTRACT jinou než část data, kterou podporuje jazyk SQL pro akceleraci dotazů, jsou jako část data podporovány timezone_hour a timezone_minute.
Příklady:
EXTRACT(datepart FROM timestampstring)
EXTRACT(YEAR FROM '2010-01-01T')
Funkce TO_STRING
Příklady:
TO_STRING(TimeStamp , format)
TO_STRING(CAST('1969-07-20T20:18Z' AS TIMESTAMP), 'MMMM d, y')
Tato tabulka popisuje řetězce, které můžete použít k určení výstupního TO_STRING
formátu funkce.
Formát řetězce | Výstup |
---|---|
Rr | Rok ve formátu 2 číslic – 1999 jako 99 |
y | Rok ve formátu 4 číslic |
yyyyy | Rok ve formátu 4 číslic |
M | Měsíc roku – 1 |
MILIMETR | Měsíc s nulovým doplněním - 01 |
MMM | Zkrácený měsíc roku – JAN |
MMMM | Celý měsíc – květen |
d | Den v měsíci (1–31) |
Dd | Nulový den v měsíci (01–31) |
a | DOM nebo PM |
h | Hodina dne (1–12) |
Hh | Nulami doplněné hodiny dne ve dvanáctihodinovém formátu (01-12) |
H | Hodina dne (0–23) |
HH | Nulová hodina dne (00–23) |
m | Minuta hodiny (0–59) |
milimetr | Nulová minuta (00–59) |
s | Druhá v rámci minut (0–59) |
ß | Nula v sekundách (00–59) |
S | Zlomek sekund (0,1-0,9) |
ß | Díl sekundy (0,01-0,99) |
SSS | Zlomek sekund (0,001-0,999) |
X | Posun v hodinách |
XX nebo XXXX | Posun v hodinách a minutách (+0430) |
XXX nebo XXXXX | Posun v hodinách a minutách (-07:00) |
x | Časový posun v hodinách (7) |
xx nebo xxxx | Posun za hodinu a minutu (+0530) |
Xxx nebo xxxxx | Posun v hodině a minutě (+05:30) |
TO_TIMESTAMP funkce
Podporují se pouze IS08601 formáty.
Příklady:
TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')
Poznámka:
Funkci můžete také použít UTCNOW
k získání systémového času.
Agregační výrazy
Příkaz SELECT může obsahovat jeden nebo více výrazů projekce nebo jeden agregační výraz. Podporují se následující agregační výrazy:
Výraz | Popis |
---|---|
COUNT(*) | Vrátí počet záznamů, které odpovídají výrazu predikátu. |
COUNT(výraz) | Vrátí počet záznamů, pro které je výraz nenulový. |
AVG(výraz) | Vrátí průměr nenulových hodnot výrazu. |
MIN(výraz) | Vrátí minimální hodnotu výrazu, která není null. |
MAX(výraz) | Vrátí maximální hodnotu výrazu, která není null. |
SUMA(výraz) | Vrátí součet všech nenulových hodnot výrazu. |
NEPŘÍTOMNÝ
Operátor IS MISSING
je jediným nestandardním kódem, který jazyk SQL akcelerace dotazů podporuje. Pokud v datech JSON chybí pole v určitém vstupním záznamu, výraz IS MISSING
se vyhodnotí jako logickou hodnotou true.
Popisovače tabulek
U dat CSV je název tabulky vždy BlobStorage
. Například:
SELECT * FROM BlobStorage
Pro data JSON jsou k dispozici další možnosti:
SELECT * FROM BlobStorage[*].path
To umožňuje dotazy nad podmnožinami dat JSON.
U dotazů JSON můžete zmínit cestu v části klauzule FROM. Tyto cesty vám pomůžou analyzovat podmnožinu dat JSON. Tyto cesty můžou odkazovat na hodnoty pole JSON a objektu.
Podívejme se na příklad, abychom ho podrobněji pochopili.
Toto jsou naše ukázková data:
{
"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
}
]
}
Může vás zajímat jenom warehouses
objekt JSON z výše uvedených dat. Objekt warehouses
je typ pole JSON, takže ho můžete zmínit v klauzuli FROM. Ukázkový dotaz může vypadat přibližně takto.
SELECT latitude FROM BlobStorage[*].warehouses[*]
Dotaz získá všechna pole, ale vybere jenom zeměpisnou šířku.
Pokud chcete získat přístup pouze k hodnotě objektu dimensions
JSON, můžete použít odkaz na tento objekt v dotazu. Například:
SELECT length FROM BlobStorage[*].dimensions
Tím také omezíte přístup k členům objektu dimensions
. Pokud chcete získat přístup k ostatním členům polí JSON a vnitřním hodnotám objektů JSON, můžete použít dotaz, například v následujícím příkladu:
SELECT weight,warehouses[0].longitude,id,tags[1] FROM BlobStorage[*]
Poznámka:
BlobStorage a BlobStorage[*] odkazují na celý objekt. Pokud však máte v klauzuli FROM cestu, budete muset použít BlobStorage[*].path.
Sys.Split
Toto je speciální forma příkazu SELECT, která je k dispozici pouze pro data ve formátu CSV.
SELECT sys.split(split_size) FROM BlobStorage
Tento příkaz použijte v případech, kdy chcete stáhnout a zpracovat datové záznamy CSV v dávkách. Díky tomu můžete zpracovávat záznamy paralelně, nemusíte stahovat všechny záznamy najednou. Tento příkaz nevrací záznamy ze souboru CSV. Místo toho vrátí kolekci velikostí dávek. Každou velikost dávky pak můžete použít k načtení dávky datových záznamů.
Pomocí parametru split_size určete počet bajtů, které má každá dávka obsahovat. Pokud například chcete zpracovat jenom 10 MB dat najednou, bude příkaz vypadat takto: SELECT sys.split(10485760)FROM BlobStorage
protože 10 MB se rovná 10 485 760 bajtům. Každá dávka bude obsahovat tolik záznamů, kolik se vejde do těchto 10 MB.
Ve většině případů bude velikost každé dávky o něco vyšší než zadané číslo. Je to proto, že dávka nemůže obsahovat částečný záznam. Pokud se poslední záznam v dávce spustí před koncem prahové hodnoty, dávka bude větší, aby obsahovala úplný záznam. Velikost poslední dávky bude pravděpodobně menší než zadaná velikost.
Poznámka:
Split_size musí být aspoň 10 MB (10485760).