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).

Se även