Sql-språkreferens för frågeacceleration
Frågeacceleration stöder ett ANSI SQL-liknande språk för att uttrycka frågor över blobinnehåll. Sql-dialekten för frågeacceleration är en delmängd av ANSI SQL, med en begränsad uppsättning datatyper, operatorer och så vidare, men den utökar även ANSI SQL för att stödja frågor om hierarkiska halvstrukturerade dataformat som JSON.
SELECT-syntax
Den enda SQL-instruktionen som stöds av frågeacceleration är SELECT-instruktionen. Det här exemplet returnerar varje rad som uttrycket returnerar sant för.
SELECT * FROM table [WHERE expression] [LIMIT limit]
För CSV-formaterade data måste tabellen vara BlobStorage
. Det innebär att frågan körs mot den blob som angavs i REST-anropet. För JSON-formaterade data är tabellen en "tabellbeskrivning". Se avsnittet Tabellbeskrivningar i den här artikeln.
I följande exempel, för varje rad där WHERE-uttrycket returnerar true, returnerar den här instruktionen en ny rad som görs från utvärdering av vart och ett av projektionsuttrycken.
SELECT expression [, expression ...] FROM table [WHERE expression] [LIMIT limit]
Du kan ange en eller flera specifika kolumner som en del av SELECT-uttrycket (till exempel SELECT Title, Author, ISBN
).
Anteckning
Det maximala antalet specifika kolumner som du kan använda i SELECT-uttrycket är 49. Om du behöver select-instruktionen för att returnera fler än 49 kolumner använder du ett jokertecken (*
) för SELECT-uttrycket (till exempel: SELECT *
).
I följande exempel returneras en sammanställd beräkning (till exempel medelvärdet för en viss kolumn) över var och en av de rader som uttrycket returnerar sant för.
SELECT aggregate_expression FROM table [WHERE expression] [LIMIT limit]
I följande exempel returneras lämpliga förskjutningar för att dela upp en CSV-formaterad blob. Se avsnittet Sys.Split i den här artikeln.
SELECT sys.split(split_size)FROM BlobStorage
Datatyper
Datatyp | Beskrivning |
---|---|
INT | 64-bitars signerat heltal. |
FLYTA | 64-bitars flyttal ("dubbelprecision"). |
STRÄNG | Unicode-sträng med variabel längd. |
TIMESTAMP | En tidpunkt. |
BOOLEAN | Sant eller falskt. |
När du läser värden från CSV-formaterade data läss alla värden som strängar. Strängvärden kan konverteras till andra typer med hjälp av CAST-uttryck. Värden kan implicit omvandlas till andra typer beroende på kontext. Mer information finns i Datatypprioritet (Transact-SQL).
Uttryck
Referera till fält
För JSON-formaterade data eller CSV-formaterade data med en rubrikrad kan fält refereras efter namn. Fältnamn kan citeras eller inte anges. Namn på citerade fält omges av dubbla citattecken ("
), kan innehålla blanksteg och är skiftlägeskänsliga. Ociterade fältnamn är skiftlägesokänsliga och får inte innehålla några specialtecken.
I CSV-formaterade data kan fält också refereras till av ordningstal, prefix med ett understreck (_
) tecken. Det första fältet kan till exempel refereras till som _1
, eller så kan det elfte fältet refereras till som _11
. Att referera till fält efter ordningstal är användbart för CSV-formaterade data som inte innehåller en rubrikrad, i vilket fall det enda sättet att referera till ett visst fält är med ordningstal.
Operatorer
Följande SQL-standardoperatorer stöds:
Operator | Beskrivning |
---|---|
= |
Jämför likheten mellan två uttryck (en jämförelseoperator). |
!= |
Testar om ett uttryck inte är lika med ett annat uttryck (en jämförelseoperator). |
<> |
Jämför två uttryck för inte lika med (en jämförelseoperator). |
< |
Jämför två uttryck för mindre än (en jämförelseoperator). |
<= |
Jämför två uttryck för mindre än eller lika med (en jämförelseoperator). |
> |
Jämför två uttryck för större än (en jämförelseoperator). |
>= |
Jämför två uttryck för större än eller lika med (en jämförelseoperator). |
+ |
Lägger till två tal. Den här tilläggsaritmetiska operatorn kan också lägga till ett tal, i dagar, till ett datum. |
- |
Subtraherar två tal (en aritmisk subtraktionsoperator). |
/ |
Delar ett tal med ett annat (en aritmetikdivisionsoperator). |
* |
Multiplicerar två uttryck (en aritmetikoperator för multiplikation). |
% |
Returnerar resten av ett tal dividerat med ett annat. |
AND |
Utför en bitvis logisk AND-åtgärd mellan två heltalsvärden. |
OR |
Utför en bitvis logisk OR-åtgärd mellan två angivna heltalsvärden som översätts till binära uttryck i Transact-SQL-uttryck. |
NOT |
Negera booleska indata. |
CAST |
Konverterar ett uttryck med en datatyp till en annan. |
BETWEEN |
Anger ett intervall som ska testas. |
IN |
Avgör om ett angivet värde matchar något värde i en underfråga eller en lista. |
NULLIF |
Returnerar ett null-värde om de två angivna uttrycken är lika. |
COALESCE |
Utvärderar argumenten i ordning och returnerar det aktuella värdet för det första uttrycket som ursprungligen inte utvärderas till NULL. |
Om datatyperna till vänster och höger om en operator skiljer sig åt utförs automatisk konvertering enligt de regler som anges här: Datatypprioritet (Transact-SQL).
SQL-språket för frågeacceleration stöder bara en mycket liten delmängd av de datatyper som beskrivs i den artikeln. Se avsnittet Datatyper i den här artikeln.
Kastar
SQL-språket för frågeacceleration stöder CAST-operatorn, enligt reglerna här: Datatypskonvertering (databasmotor).
SQL-språket för frågeacceleration stöder endast en liten delmängd av de datatyper som beskrivs i den artikeln. Se avsnittet Datatyper i den här artikeln.
Strängfunktioner
SQL-språket för frågeacceleration stöder följande SQL-standardsträngfunktioner:
Funktion | Beskrivning |
---|---|
CHAR_LENGTH | Returnerar längden i tecken i stränguttrycket, om stränguttrycket är av en teckendatatyp. annars returnerar längden i byte för stränguttrycket (det minsta heltalet inte mindre än antalet bitar dividerat med 8). (Den här funktionen är samma som funktionen CHARACTER_LENGTH.) |
CHARACTER_LENGTH | Returnerar längden i tecken i stränguttrycket, om stränguttrycket är av en teckendatatyp. annars returnerar längden i byte för stränguttrycket (det minsta heltalet inte mindre än antalet bitar dividerat med 8). (Den här funktionen är samma som funktionen CHAR_LENGTH |
LOWER | Returnerar ett teckenuttryck efter konvertering av versaler till gemener. |
UPPER | Returnerar ett teckenuttryck med gemener som konverterats till versaler. |
DELSTRÄNG | Returnerar en del av ett tecken, binärt, text eller bilduttryck i SQL Server. |
TRIM | Tar bort blankstegstecknet (32) eller andra angivna tecken från början och slutet av en sträng. |
LEDANDE | Tar bort teckentecken (32) eller andra angivna tecken från början av en sträng. |
AVSLUTANDE | Tar bort blankstegstecken (32) eller andra angivna tecken från slutet av en sträng. |
Här är några exempel:
Funktion | Exempel | Resultat |
---|---|---|
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 |
Datumfunktioner
Följande standardfunktioner för SQL-datum stöds:
DATE_ADD
DATE_DIFF
EXTRACT
TO_STRING
TO_TIMESTAMP
För närvarande konverteras alla datumformat för STANDARD IS08601 .
funktionen DATE_ADD
SQL-språket för frågeacceleration stöder år, månad, dag, timme, minut och sekund för DATE_ADD
funktionen.
Exempel:
DATE_ADD(datepart, quantity, timestamp)
DATE_ADD('minute', 1, CAST('2017-01-02T03:04:05.006Z' AS TIMESTAMP)
funktionen DATE_DIFF
SQL-språket för frågeacceleration stöder år, månad, dag, timme, minut och sekund för DATE_DIFF
funktionen.
DATE_DIFF(datepart, timestamp, timestamp)
DATE_DIFF('hour','2018-11-09T00:00+05:30','2018-11-09T01:00:23-08:00')
Funktionen EXTRACT
För extrahering annat än datumdelen som stöds för funktionen stöder SQL-språket för DATE_ADD
frågeacceleration timezone_hour och timezone_minute som datumdel.
Exempel:
EXTRACT(datepart FROM timestampstring)
EXTRACT(YEAR FROM '2010-01-01T')
funktionen TO_STRING
Exempel:
TO_STRING(TimeStamp , format)
TO_STRING(CAST('1969-07-20T20:18Z' AS TIMESTAMP), 'MMMM d, y')
I den här tabellen beskrivs strängar som du kan använda för att ange funktionens TO_STRING
utdataformat.
Formatsträng | Utdata |
---|---|
yy | År i 2-siffrigt format – 1999 som "99" |
y | År i fyrsiffrigt format |
yyyy | År i fyrsiffrigt format |
M | Månad på året - 1 |
MM | Noll vadderad månad - 01 |
MMM | Abbr. månad på året - JAN |
MMMM | Hel månad – maj |
d | Dag i månaden (1–31) |
dd | Noll vadderad dag i månaden (01-31) |
a | AM eller PM |
h | Timme på dagen (1–12) |
hh | Noll vadderade timmar od dag (01-12) |
H | Timme på dagen (0–23) |
HH | Noll vadderad timme på dagen (00-23) |
m | Minut i timmen (0–59) |
mm | Noll vadderad minut (00-59) |
s | Sekund av minuter (0-59) |
ss | Noll vadderade sekunder (00-59) |
S | Bråkdel av sekunder (0,1-0,9) |
SS | Del av sekunder (0,01-0,99) |
SSS | Bråkdel av sekunder (0,001-0,999) |
X | Förskjutning i timmar |
XX eller XXXX | Förskjutning i timmar och minuter (+0430) |
XXX eller XXXXX | Förskjutning i timmar och minuter (-07:00) |
x | Förskjutning i timmar (7) |
xx eller xxxx | Förskjutning i timme och minut (+0530) |
Xxx eller xxxxx | Förskjutning i timme och minut (+05:30) |
funktionen TO_TIMESTAMP
Endast IS08601-format stöds.
Exempel:
TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')
Anteckning
Du kan också använda UTCNOW
funktionen för att hämta systemtiden.
Mängduttryck
En SELECT-instruktion kan innehålla antingen ett eller flera projektionsuttryck eller ett enda mängduttryck. Följande mängduttryck stöds:
Uttryck | Beskrivning |
---|---|
COUNT(*) | Returnerar antalet poster som matchade predikatuttrycket. |
COUNT(expression) | Returnerar antalet poster för vilka uttrycket inte är null. |
AVG(expression) | Returnerar medelvärdet för uttryckets värden som inte är null. |
MIN(uttryck) | Returnerar det minsta icke-null-värdet för uttryck. |
MAX(expression | Returnerar det maximala icke-null-värdet för uttryck. |
SUM(expression) | Returnerar summan av alla icke-null-värden för uttrycket. |
SAKNAS
Operatorn IS MISSING
är den enda icke-standard som SQL-språket för frågeacceleration stöder. Om ett fält saknas från en viss indatapost för JSON-data utvärderas uttrycksfältet IS MISSING
till det booleska värdet true.
Tabellbeskrivningar
För CSV-data är tabellnamnet alltid BlobStorage
. Exempel:
SELECT * FROM BlobStorage
För JSON-data finns ytterligare alternativ tillgängliga:
SELECT * FROM BlobStorage[*].path
Detta tillåter frågor över delmängder av JSON-data.
För JSON-frågor kan du nämna sökvägen i en del av FROM-satsen. De här sökvägarna hjälper till att parsa delmängden av JSON-data. De här sökvägarna kan referera till JSON-matris- och objektvärden.
Låt oss ta ett exempel för att förstå detta mer detaljerat.
Det här är våra exempeldata:
{
"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
}
]
}
Du kanske bara warehouses
är intresserad av JSON-objektet från ovanstående data. Objektet warehouses
är en JSON-matristyp, så du kan nämna detta i FROM-satsen. Exempelfrågan kan se ut ungefär så här.
SELECT latitude FROM BlobStorage[*].warehouses[*]
Frågan hämtar alla fält men väljer bara latitud.
Om du bara dimensions
vill komma åt JSON-objektvärdet kan du använda referera till objektet i frågan. Exempel:
SELECT length FROM BlobStorage[*].dimensions
Detta begränsar även din åtkomst till medlemmar i dimensions
objektet. Om du vill komma åt andra medlemmar i JSON-fält och inre värden för JSON-objekt kan du använda frågor som visas i följande exempel:
SELECT weight,warehouses[0].longitude,id,tags[1] FROM BlobStorage[*]
Anteckning
BlobStorage och BlobStorage[*] refererar båda till hela objektet. Men om du har en sökväg i FROM-satsen måste du använda BlobStorage[*].path
Sys.Split
Det här är en särskild form av SELECT-instruktionen, som endast är tillgänglig för CSV-formaterade data.
SELECT sys.split(split_size) FROM BlobStorage
Använd den här instruktionen om du vill ladda ned och sedan bearbeta CSV-dataposter i batchar. På så sätt kan du bearbeta poster parallellt i stället för att behöva ladda ned alla poster samtidigt. Den här instruktionen returnerar inte poster från CSV-filen. I stället returneras en samling batchstorlekar. Du kan sedan använda varje batchstorlek för att hämta en batch med dataposter.
Använd parametern split_size för att ange antalet byte som du vill att varje batch ska innehålla. Om du till exempel bara vill bearbeta 10 MB data åt gången ser instruktionen ut så här: SELECT sys.split(10485760)FROM BlobStorage
eftersom 10 MB är lika med 10 485 760 byte. Varje batch innehåller så många poster som får plats i dessa 10 MB.
I de flesta fall är storleken på varje batch något högre än det tal som du anger. Det beror på att en batch inte kan innehålla en partiell post. Om den sista posten i en batch startar före slutet av tröskelvärdet blir batchen större så att den kan innehålla den fullständiga posten. Storleken på den sista batchen är troligen mindre än den storlek som du anger.
Anteckning
Split_size måste vara minst 10 MB (10485760).