Share via


Naslaginformatie over SQL-taal voor queryversnelling

Queryversnelling ondersteunt een ANSI SQL-achtige taal voor het uitdrukken van query's via blob-inhoud. 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 wordt ondersteund door queryversnelling, is de SELECT-instructie. In dit voorbeeld wordt elke rij geretourneerd waarvoor de expressie waar retourneert.

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

Voor csv-opgemaakte gegevens moet de tabel zijn BlobStorage. Dit betekent dat de query wordt uitgevoerd op basis van de blob die is opgegeven in de REST-aanroep. Voor met JSON opgemaakte gegevens is de 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 van het evalueren 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).

Opmerking

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

In het volgende voorbeeld wordt een statistische berekening geretourneerd (bijvoorbeeld de gemiddelde waarde van een bepaalde kolom) voor elk van de rijen waarvoor de expressie waar retourneert.

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

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

SELECT sys.split(split_size)FROM BlobStorage

Gegevenstypen

Gegevenssoort Beschrijving
INT 64-bit teken geheel getal.
Drijven 64-bits drijvende komma ('dubbele precisie').
TEKENREEKS Unicode-tekenreeks met variabele lengte.
TIJDSTEMPEL Een bepaald tijdstip.
Booleaans 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 worden omgezet naar andere typen, afhankelijk van de context. Zie De prioriteit van het gegevenstype (Transact-SQL) voor meer informatie.

Uitdrukkingen

Verwijzen naar velden

Voor met JSON opgemaakte gegevens of csv-opgemaakte gegevens met een veldnamenrij kunnen velden worden verwezen op naam. Veldnamen kunnen worden aanhalingeerd of niet aanhalingeerd. Namen van aanhalingstekens staan tussen dubbele aanhalingstekens ("), kunnen spaties bevatten en hoofdlettergevoelig zijn. Namen van niet-aanhalingstekens zijn niet hoofdlettergevoelig en mogen geen speciale tekens bevatten.

In csv-opgemaakte gegevens kunnen velden ook worden verwezen door rangtelwoorden, 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 per rangschikking 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 per rangschikking.

Bedieners

De volgende standaard-SQL-operators worden ondersteund:

Operateur Beschrijving
= Vergelijkt de gelijkheid van twee expressies (een vergelijkingsoperator).
!= Test of de ene expressie niet gelijk is aan een andere expressie (een vergelijkingsoperator).
<> Vergelijkt twee expressies voor niet gelijk aan (een vergelijkingsoperator).
< Vergelijkt twee expressies voor minder dan (een vergelijkingsoperator).
<= Vergelijkt twee expressies voor minder dan of gelijk aan (een vergelijkingsoperator).
> Vergelijkt twee expressies voor groter dan (een vergelijkingsoperator).
>= Vergelijkt twee expressies voor groter dan of gelijk aan (een vergelijkingsoperator).
+ Telt twee getallen op. Deze rekenkundige operator kan ook een getal, in dagen, toevoegen aan een datum.
- Hiermee trekt u twee getallen af (een rekenkundige aftrekkingsoperator).
/ Hiermee wordt één getal door een ander getal gedeeld (een rekenkundige delingsoperator).
* Vermenigvuldigt twee expressies (een rekenkundige vermenigvuldigingsoperator).
% Retourneert de rest van één getal gedeeld door een ander getal.
AND Voert een bitsgewijze logische AND-bewerking uit tussen twee gehele getallen.
OR Voert een bitsgewijze logische OR-bewerking uit tussen twee opgegeven gehele getallen, zoals vertaald naar binaire expressies binnen Transact-SQL instructies.
NOT Negeert een Booleaanse invoer.
CAST Converteert een expressie van het ene gegevenstype naar het andere.
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 resulteert in NULL.

Als gegevenstypen aan de linkerkant en rechts van een operator verschillend zijn, wordt automatische conversie uitgevoerd volgens de regels die hier zijn opgegeven: Prioriteit van gegevenstype (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: Conversie van gegevenstype (Database Engine).a0>

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.

Stringfuncties

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 van een tekengegevenstype is; retourneert anders de lengte in bytes van de tekenreeksexpressie (het kleinste gehele getal dat niet kleiner is 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 van een tekengegevenstype is; retourneert anders de lengte in bytes van de tekenreeksexpressie (het kleinste gehele getal dat niet kleiner is dan het aantal bits gedeeld door 8). (Deze functie is hetzelfde als de functie CHAR_LENGTH
VERLAGEN Retourneert een tekenexpressie na het converteren van hoofdlettergegevens naar kleine letters.
BOVENSTE Retourneert een tekenexpressie met kleine letters, geconverteerd naar hoofdletters.
substring Retourneert een deel van een teken-, binaire, tekst- of afbeeldingsexpressie in SQL Server.
BIJKNIPPEN Hiermee verwijdert u het tekenteken (32) of andere opgegeven tekens uit het begin en einde van een tekenreeks.
LEIDEND Hiermee verwijdert u het tekenteken (32) of andere opgegeven tekens vanaf het begin van een tekenreeks.
ACHTERSTAND Hiermee verwijdert u het tekenteken (32) of andere opgegeven tekens uit 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
LAGER SELECT LOWER('AbCdEfG') from BlobStorage abcdefg
BOVENSTE SELECT UPPER('AbCdEfG') from BlobStorage ABCDEFG
deelreeks SUBSTRING('123456789', 1, 5) 23456
BIJSNEDEN 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, 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, 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 EXTRACT anders 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.

Tekenreeks opmaken Uitvoer
Jj Jaar in 2 cijfernotatie - 1999 als '99'
y Jaar in 4 cijfernotatie
jjjj Jaar in 4 cijfernotatie
M Maand van het jaar - 1
MM Nul opgevulde maand - 01
MMM Afgekorte 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 van de dag (01-12)
H Uur van de dag (0-23)
HH Zero Padded hour of the day (00-23)
m Minuut van het uur (0-59)
Mm Nul opgevulde minuut (00-59)
s Seconde van minuten (0-59)
ß Nul opgevulde seconden (00-59)
S Fractie van seconden (0,1-0,9)
ß 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')

Opmerking

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

Samenvoegingsexpressies

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

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

VERMIST

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 het expressieveld IS MISSING geëvalueerd naar de Booleaanse waarde waar.

Tabeldescriptors

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

SELECT * FROM BlobStorage

Voor JSON-gegevens zijn er extra 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 dimensions JSON-objectwaarde, kunt u verwijzen naar dat object in uw query. Voorbeeld:

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 binnenste waarden van JSON-objecten, kunt u een query gebruiken, zoals wordt weergegeven in het volgende voorbeeld:

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

Opmerking

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 zo veel records als in die 10 MB kan passen.

In de meeste gevallen is de grootte van elke batch iets hoger dan het getal dat u opgeeft. Dat komt doordat 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.

Opmerking

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

Zie ook