Sql-taalreferentie voor queryversnelling

Queryversnelling ondersteunt een ANSI SQL-achtige taal voor het uitdrukken van query's via blobinhoud. Het SQL-dialect voor queryversnelling is een subset van ANSI SQL, met een beperkte set ondersteunde gegevenstypen, operators, enzovoort, maar het breidt ook uit op ANSI SQL ter ondersteuning van query's via hiërarchische semi-gestructureerde gegevensindelingen, zoals JSON.

SELECT-syntaxis

De enige SQL-instructie die door queryversnelling wordt ondersteund, is de SELECT-instructie. In dit voorbeeld wordt elke rij geretourneerd waarvoor de expressie true retourneert.

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

Voor gegevens in CSV-indeling moet de tabel zijn BlobStorage. Dit betekent dat de query wordt uitgevoerd op de blob die is opgegeven in de REST-aanroep. Voor gegevens in JSON-indeling is tabel een 'tabeldescriptor'. Zie de sectie Tabeldescriptors van dit artikel.

In het volgende voorbeeld retourneert deze instructie voor elke rij waarvoor de WHERE-expressie waar retourneert een nieuwe rij die is gemaakt op basis van de evaluatie van elk van de projectie-expressies.

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

U kunt een of meer specifieke kolommen opgeven als onderdeel van de SELECT-expressie (bijvoorbeeld SELECT Title, Author, ISBN).

Notitie

Het maximum aantal specifieke kolommen dat u in de SELECT-expressie kunt gebruiken, is 49. Als u met de SELECT-instructie meer dan 49 kolommen wilt retourneren, gebruikt u een jokerteken (*) voor de SELECT-expressie (bijvoorbeeld: SELECT *).

In het volgende voorbeeld wordt een aggregatieberekening geretourneerd (bijvoorbeeld: de gemiddelde waarde van een bepaalde kolom) voor elk van de rijen waarvoor expressie true retourneert.

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

In het volgende voorbeeld worden geschikte offsets geretourneerd voor het splitsen van een blob met CSV-indeling. Zie de sectie Sys.Split van dit artikel.

SELECT sys.split(split_size)FROM BlobStorage

Gegevenstypen

Gegevenstype Beschrijving
INT 64-bits geheel getal met teken.
FLOAT 64-bits ('dubbele precisie') met drijvende komma.
STRING Unicode-tekenreeks met variabele lengte.
TIMESTAMP Een punt in de tijd.
BOOLEAN Waar of onwaar.

Bij het lezen van waarden uit gegevens in CSV-indeling worden alle waarden gelezen als tekenreeksen. Tekenreekswaarden kunnen worden geconverteerd naar andere typen met behulp van CAST-expressies. Waarden kunnen impliciet naar andere typen worden gecast, afhankelijk van de context. Zie Gegevenstypeprioriteit (Transact-SQL) voor meer informatie.

Expressies

Naar velden verwijzen

Voor gegevens in JSON-indeling of csv-gegevens met een veldnamenrij kan worden verwezen naar velden met een naam. Veldnamen kunnen worden aanhalingstekens of aanhalingstekens worden verwijderd. Veldnamen met aanhalingstekens worden tussen dubbele aanhalingstekens () geplaatst," kunnen spaties bevatten en zijn hoofdlettergevoelig. Veldnamen zonder aanhalingstekens zijn niet hoofdlettergevoelig en mogen geen speciale tekens bevatten.

In gegevens in CSV-indeling kan ook worden verwezen naar velden met een rangtelwoord, voorafgegaan door een onderstrepingsteken (_). Er kan bijvoorbeeld naar het eerste veld worden verwezen als _1, of naar het elfde veld kan worden verwezen als _11. Het verwijzen naar velden op rangtelwoord is handig voor gegevens in CSV-indeling die geen veldnamenrij bevatten. In dat geval is de enige manier om naar een bepaald veld te verwijzen, met ordinaal.

Operators

De volgende standaard SQL-operators worden ondersteund:

Operator Beschrijving
= Vergelijkt de gelijkheid van twee expressies (een vergelijkingsoperator).
!= Test of één expressie niet gelijk is aan een andere expressie (een vergelijkingsoperator).
<> Vergelijkt twee expressies voor niet gelijk aan (een vergelijkingsoperator).
< Vergelijkt twee expressies voor kleiner dan (een vergelijkingsoperator).
<= Vergelijkt twee expressies voor kleiner dan of gelijk aan (een vergelijkingsoperator).
> Vergelijkt twee expressies voor groter dan (een vergelijkingsoperator).
>= Vergelijkt twee expressies voor groter dan of gelijk (een vergelijkingsoperator).
+ Telt twee getallen op. Met deze rekenkundige operator voor optellen kan ook een getal, in dagen, worden toegevoegd aan een datum.
- Trekt twee getallen af (een rekenkundige operator voor aftrekken).
/ Deelt het ene getal door een ander getal (een rekenkundige deeloperator).
* Vermenigvuldigt twee expressies (een rekenkundige vermenigvuldigingsoperator).
% Retourneert het restgetal van één getal gedeeld door een ander getal.
AND Voert een bitsgewijze logische AND-bewerking uit tussen twee waarden voor gehele getallen.
OR Voert een bitsgewijze logische OF-bewerking uit tussen twee opgegeven waarden voor gehele getallen, zoals omgezet in binaire expressies in Transact-SQL-instructies.
NOT Een Booleaanse invoer wordt genegeerd.
CAST Zet een expressie van één gegevenstype om in een ander type.
BETWEEN Hiermee geeft u een bereik te testen.
IN Bepaalt of een opgegeven waarde overeenkomt met een waarde in een subquery of een lijst.
NULLIF Retourneert een null-waarde als de twee opgegeven expressies gelijk zijn.
COALESCE Evalueert de argumenten op volgorde en retourneert de huidige waarde van de eerste expressie die in eerste instantie niet null oplevert.

Als de gegevenstypen links en rechts van een operator verschillend zijn, wordt automatische conversie uitgevoerd volgens de regels die hier zijn opgegeven: Gegevenstype prioriteit (Transact-SQL).

De SQL-taal voor queryversnelling ondersteunt slechts een zeer kleine subset van de gegevenstypen die in dat artikel worden besproken. Zie de sectie Gegevenstypen van dit artikel.

Werpt

De SQL-taal voor queryversnelling ondersteunt de CAST-operator volgens de regels hier: Gegevenstypeconversie (database-engine).

De SQL-taal voor queryversnelling ondersteunt slechts een kleine subset van de gegevenstypen die in dat artikel worden besproken. Zie de sectie Gegevenstypen van dit artikel.

Tekenreeksfuncties

De SQL-taal voor queryversnelling ondersteunt de volgende standaard SQL-tekenreeksfuncties:

Functie Beschrijving
CHAR_LENGTH Retourneert de lengte in tekens van de tekenreeksexpressie, als de tekenreeksexpressie een tekengegevenstype is; retourneert anders de lengte in bytes van de tekenreeksexpressie (het kleinste gehele getal niet kleiner dan het aantal bits gedeeld door 8). (Deze functie is hetzelfde als de functie CHARACTER_LENGTH.)
CHARACTER_LENGTH Retourneert de lengte in tekens van de tekenreeksexpressie, als de tekenreeksexpressie een tekengegevenstype is; retourneert anders de lengte in bytes van de tekenreeksexpressie (het kleinste gehele getal niet kleiner dan het aantal bits gedeeld door 8). (Deze functie is hetzelfde als de functie CHAR_LENGTH
LOWER Retourneert een tekenexpressie na het converteren van hoofdletters naar kleine letters.
UPPER Retourneert een tekenexpressie met kleine letters die zijn geconverteerd naar hoofdletters.
SUBTEKENREEKS Retourneert een deel van een teken-, binaire, tekst- of afbeeldingsexpressie in SQL Server.
TRIM Hiermee verwijdert u de spatieteken char(32) of andere opgegeven tekens van het begin en einde van een tekenreeks.
LEIDENDE Hiermee verwijdert u de spatieteken char(32) of andere opgegeven tekens vanaf het begin van een tekenreeks.
ACHTERSTAND Hiermee verwijdert u de spatie teken(32) of andere opgegeven tekens aan het einde van een tekenreeks.

Hier volgen enkele voorbeelden:

Functie Voorbeeld Resultaat
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

Datumfuncties

De volgende standaard SQL-datumfuncties worden ondersteund:

  • DATE_ADD
  • DATE_DIFF
  • EXTRACT
  • TO_STRING
  • TO_TIMESTAMP

Momenteel worden alle datumnotaties van standaard IS08601 geconverteerd.

DATE_ADD functie

De SQL-taal voor queryversnelling ondersteunt jaar, maand, dag, uur, minuut en seconde voor de DATE_ADD functie.

Voorbeelden:

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

DATE_DIFF functie

De SQL-taal voor queryversnelling ondersteunt jaar, maand, dag, uur, minuut en seconde voor de DATE_DIFF functie.

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

EXTRACT, functie

Voor andere EXTRACT dan het datumonderdeel dat wordt ondersteund voor de DATE_ADD functie, ondersteunt de SQL-taal voor queryversnelling timezone_hour en timezone_minute als datumonderdeel.

Voorbeelden:

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

TO_STRING functie

Voorbeelden:

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

In deze tabel worden tekenreeksen beschreven die u kunt gebruiken om de uitvoerindeling van de TO_STRING functie op te geven.

Notatietekenreeks Uitvoer
yy Jaar in 2-cijferige notatie - 1999 als '99'
y Jaar in 4-cijferige notatie
yyyy Jaar in 4-cijferige notatie
M Maand van het jaar - 1
MM Nul opgevulde maand - 01
MMM Afgekort. maand van het jaar - JAN
MMMM Volledige maand - mei
d Dag van de maand (1-31)
dd Nul opgevulde dag van de maand (01-31)
een AM of PM
h Uur van de dag (1-12)
hh Nul opgevulde uren od dag (01-12)
H Uur van de dag (0-23)
HH Nul opgevuld uur van de dag (00-23)
m Minuut van uur (0-59)
mm Nul opgevulde minuten (00-59)
s Seconde van minuten (0-59)
ss Nul opgevulde seconden (00-59)
S Fractie van seconden (0,1-0,9)
SS Fractie van seconden (0,01-0,99)
SSS Fractie van seconden (0,001-0,999)
X Verschuiving in uren
XX of XXXX Verschuiving in uren en minuten (+0430)
XXX of XXXXX Verschuiving in uren en minuten (-07:00)
x Verschuiving in uren (7)
xx of xxxx Verschuiving in uur en minuut (+0530)
Xxx of xxxxx Verschuiving in uur en minuut (+05:30)

TO_TIMESTAMP functie

Alleen IS08601-indelingen worden ondersteund.

Voorbeelden:

TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')

Notitie

U kunt ook de UTCNOW functie gebruiken om de systeemtijd op te halen.

Aggregatie-expressies

Een SELECT-instructie kan een of meer projectie-expressies of één aggregatie-expressie bevatten. De volgende aggregatie-expressies worden ondersteund:

Expressie Beschrijving
COUNT(*) Retourneert het aantal records dat overeenkomt met de predicaatexpressie.
AANTAL(expressie) Retourneert het aantal records waarvoor de expressie niet null is.
AVG(expressie) Retourneert het gemiddelde van de niet-null-waarden van expressie.
MIN(expressie) Retourneert de minimale niet-null-waarde van de expressie.
MAX(expressie Retourneert de maximale niet-null-waarde van de expressie.
SOM(expressie) Retourneert de som van alle niet-null-waarden van de expressie.

ONTBREKENDE

De IS MISSING operator is de enige niet-standaard die de SQL-taal voor queryversnelling ondersteunt. Als voor JSON-gegevens een veld ontbreekt in een bepaalde invoerrecord, wordt in het expressieveld IS MISSING de booleaanse waarde true geëvalueerd.

Tabeldescriptors

Voor CSV-gegevens is de tabelnaam altijd BlobStorage. Bijvoorbeeld:

SELECT * FROM BlobStorage

Voor JSON-gegevens zijn aanvullende opties beschikbaar:

SELECT * FROM BlobStorage[*].path

Hierdoor kunnen query's worden uitgevoerd op subsets van de JSON-gegevens.

Voor JSON-query's kunt u het pad vermelden in een deel van de FROM-component. Deze paden helpen bij het parseren van de subset van JSON-gegevens. Deze paden kunnen verwijzen naar JSON-matrix- en objectwaarden.

Laten we een voorbeeld nemen om dit in meer detail te begrijpen.

Dit zijn onze voorbeeldgegevens:

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

Mogelijk bent u alleen geïnteresseerd in het warehouses JSON-object uit de bovenstaande gegevens. Het warehouses object is een JSON-matrixtype, dus u kunt dit vermelden in de FROM-component. Uw voorbeeldquery kan er ongeveer als volgt uitzien.

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

De query haalt alle velden op, maar selecteert alleen de breedtegraad.

Als u alleen toegang wilt krijgen tot de waarde van het dimensions JSON-object, kunt u naar dat object verwijzen in uw query. Bijvoorbeeld:

SELECT length FROM BlobStorage[*].dimensions

Dit beperkt ook uw toegang tot leden van het dimensions object. Als u toegang wilt krijgen tot andere leden van JSON-velden en interne waarden van JSON-objecten, kunt u query's gebruiken zoals in het volgende voorbeeld:

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

Notitie

BlobStorage en BlobStorage[*] verwijzen beide naar het hele object. Als u echter een pad in de FROM-component hebt, moet u BlobStorage[*].path gebruiken

Sys.Split

Dit is een speciale vorm van de SELECT-instructie, die alleen beschikbaar is voor gegevens in CSV-indeling.

SELECT sys.split(split_size) FROM BlobStorage

Gebruik deze instructie in gevallen waarin u CSV-gegevensrecords in batches wilt downloaden en verwerken. Op die manier kunt u records parallel verwerken in plaats van dat u alle records tegelijk moet downloaden. Deze instructie retourneert geen records uit het CSV-bestand. In plaats daarvan wordt een verzameling batchgrootten geretourneerd. Vervolgens kunt u elke batchgrootte gebruiken om een batch met gegevensrecords op te halen.

Gebruik de parameter split_size om het aantal bytes op te geven dat elke batch moet bevatten. Als u bijvoorbeeld slechts 10 MB aan gegevens tegelijk wilt verwerken, ziet uw instructie er als volgt uit: SELECT sys.split(10485760)FROM BlobStorage omdat 10 MB gelijk is aan 10.485.760 bytes. Elke batch bevat zoveel records als in die 10 MB past.

In de meeste gevallen is de grootte van elke batch iets groter dan het getal dat u opgeeft. Dat komt omdat een batch geen gedeeltelijke record kan bevatten. Als de laatste record in een batch begint vóór het einde van de drempelwaarde, is de batch groter, zodat deze de volledige record kan bevatten. De grootte van de laatste batch is waarschijnlijk kleiner dan de grootte die u opgeeft.

Notitie

De split_size moet ten minste 10 MB (10485760) zijn.

Zie ook