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.