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 som stöds, operatorer osv., men den utökar även ANSI SQL för att stödja frågor över hierarkiska halvstrukturerade dataformat som JSON.

Syntax för SELECT

Den enda SQL-instruktion 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 sant, 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).

Anmärkning

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 aggregerad 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 offsets för delning av 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-bit signerat heltal.
FLYT 64-bitars flyttalsnummer ("dubbelprecision").
sträng Unicode-sträng med variabel längd.
TIDSSTÄMPEL En tidpunkt.
BOOLESK 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 cast-uttryck. Värden kan implicit omvandlas till andra typer beroende på kontext. Mer information finns i Prioritet för datatyp (Transact-SQL).

Uttryck

Refererar 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. Angivna fältnamn omges av tecken med dubbla citattecken ("), kan innehålla blanksteg och är skiftlägeskänsliga. Namn på ociterade fält är skiftlägeskänsliga och får inte innehålla några specialtecken.

I CSV-formaterade data kan fält också refereras till med ordningstal, med ett prefix av ett understreckstecken (_). 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 ordning ä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.

Operatörer

Följande SQL-standardoperatorer stöds:

Operatör 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 som ä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).
/ Dividerar ett tal med ett annat (en aritmetikdivisionsoperator).
* Multiplicerar två uttryck (en aritmetisk multiplikationsoperator).
% 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 Negerar booleska indata.
CAST Konverterar ett uttryck av 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 med.
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 är olika utförs automatisk konvertering enligt de regler som anges här: Datatypprioritet (Transact-SQL).

SQL-språket för frågeacceleration stöder endast 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: Datatypkonvertering (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.)
TECKENLÄNGD 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
LÄGRE Returnerar ett teckenuttryck efter konvertering av versaler till gemener.
ÖVRE Returnerar en teckensträng där små bokstäver har omvandlats till stora bokstäver.
DELSTRÄNG Returnerar en del av ett tecken, binärt uttryck, text eller bilduttryck i SQL Server.
TRIMMA Tar bort blankstegstecken (32) eller andra angivna tecken från början och slutet av en sträng.
LEDANDE Tar bort blanksteget (teckenkod 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
TECKENLÄNGD SELECT CHARACTER_LENGTH('abcdefg') from BlobStorage 7
CHAR_LENGTH SELECT CHAR_LENGTH(_1) from BlobStorage 1
Lägre SELECT LOWER('AbCdEfG') from BlobStorage abcdefg
ÖVRE SELECT UPPER('AbCdEfG') from BlobStorage ABCDEFG
delsträng SUBSTRING('123456789', 1, 5) 23456
TRIMMA 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 av standarden ISO8601.

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)

DATE_DIFF-funktionen

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 datumdel 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')

Den här tabellen beskriver strängar som du kan använda för att ange funktionens TO_STRING utdataformat.

Formatera sträng Utgång
Åå År i 2-siffrigt format – 1999 som "99"
y År i fyrsiffrigt format
yyyyy År i fyrsiffrigt format
M Månad på året - 1
MM Noll vadderad månad - 01
MMM Förkortad 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 Dagens timme (1–12)
Hh Noll vadderade timmar på dagen (01-12)
H Dagens timme (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)
ß Noll vadderade sekunder (00–59)
S Bråkdel av sekunder (0,1-0,9)
ß Bråkdel 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')

Anmärkning

Du kan också använda UTCNOW funktionen för att hämta systemtiden.

Aggregerade uttryck

En SELECT-instruktion kan innehålla antingen ett eller flera projektionsuttryck eller ett enda aggregeringsuttryck. Följande aggregeringsuttryck 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 icke-null-värden.
MIN(uttryck) Returnerar det minsta icke-null-värdet för uttrycket.
MAX(uttryck) Returnerar det maximala värdet för uttrycket som inte är null.
SUM(expression) Returnerar summan av alla icke-null-värden för uttrycket.

FÖRSVUNNEN

Operatorn IS MISSING är den enda icke-standard som SQL-språket för frågeacceleration stöder. Om ett fält saknas i 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. Till 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 endast latitud.

Om du bara vill komma åt dimensions JSON-objektvärdet kan du referera till objektet i din fråga. Till 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 en fråga som visas i följande exempel:

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

Anmärkning

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. Det här uttalandet returnerar inte poster från CSV-filen. Istället returnerar den 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 registreringen i en sats startar innan tröskeln är nådd, kommer satsen att bli större så att den kan innehålla hela registreringen. Storleken på den sista batchen kommer sannolikt att vara mindre än den storlek som du anger.

Anmärkning

Split_size måste vara minst 10 MB (10485760).

Se även