Abfragebeschleunigung – SQL-Sprachreferenz
Die Abfragebeschleunigung unterstützt eine ANSI SQL-ähnliche Sprache, um Abfragen für Blobinhalte zu schreiben. Der SQL-Dialekt für die Abfragebeschleunigung stellt eine Teilmenge von ANSI SQL mit einer begrenzten Anzahl unterstützter Datentypen, Operatoren usw. dar, bietet aber gleichzeitig auch eine Erweiterung von ANSI SQL, um Abfragen für hierarchische teilstrukturierte Datenformate wie JSON zu unterstützen.
SELECT-Syntax
Die einzige von der Abfragebeschleunigung unterstützte SQL-Anweisung ist die SELECT-Anweisung. In diesem Beispiel wird jede Zeile zurückgegeben, für die der Ausdruck „true“ zurückgibt.
SELECT * FROM table [WHERE expression] [LIMIT limit]
Bei CSV-formatierten Daten muss table lauten. Dies bedeutet, dass die Abfrage für jedes Blob ausgeführt wird, das im REST-Aufruf angegeben wurde. Für JSON formatierte Daten, Tabelle ist ein "Tabellendeskriptor". Siehe Abschnitt Tabellendeskriptoren in diesem Artikel.
Im folgenden Beispiel gibt die Anweisung für jede Zeile, für die der WHERE-Ausdruck (expression) „true“ zurückgibt, eine neue Zeile zurück, die aus der Auswertung der einzelnen Projektionsausdrücke resultiert.
SELECT expression [, expression ...] FROM table [WHERE expression] [LIMIT limit]
Sie können eine oder mehrere bestimmte Spalten als Teil des SELECT-Ausdrucks angeben (z. B. SELECT Title, Author, ISBN
).
Hinweis
Maximal können Sie im SELECT-Ausdruck 49 bestimmte Spalten verwenden. Wenn Ihre SELECT-Anweisung mehr als 49 Spalten zurückgeben muss, verwenden Sie für den SELECT-Ausdruck ein Platzhalterzeichen (*
) (Beispiel: SELECT *
).
Im folgenden Beispiel wird eine aggregierte Berechnung (z. B. der Durchschnittswert einer bestimmten Spalte) für jede Zeile zurückgegeben, für die expression „true“ zurückgibt.
SELECT aggregate_expression FROM table [WHERE expression] [LIMIT limit]
Im folgenden Beispiel werden geeignete Offsets zum Aufteilen eines CSV-formatierten Blobs zurückgegeben. Weitere Informationen finden Sie im Abschnitt Sys.Split dieses Artikels.
SELECT sys.split(split_size)FROM BlobStorage
Datentypen
Datentyp | BESCHREIBUNG |
---|---|
INT | Ganze 64-Bit-Zahl mit Vorzeichen: |
GLEITKOMMAZAHL | 64-Bit-Gleitkommazahl (mit doppelter Genauigkeit). |
STRING | Unicode-Zeichenfolge variabler Länge. |
timestamp | Ein Zeitpunkt. |
BOOLEAN | „true“ oder „false“. |
Beim Lesen von Werten aus CSV-formatierten Daten werden alle Werte als Zeichenfolgen gelesen. Zeichenfolgenwerte können mithilfe von CAST-Ausdrücken in andere Typen konvertiert werden. Werte können abhängig vom Kontext implizit in andere Typen umgewandelt werden. Weitere Informationen finden Sie unter Rangfolge der Datentypen (Transact-SQL).
Ausdrücke
Verweisen auf Felder
Bei JSON-formatierten oder CSV-formatierten Daten mit einer Kopfzeile kann anhand des Namens auf Felder verwiesen werden. Feldnamen können mit oder ohne Anführungszeichen angegeben werden. Feldnamen in Anführungszeichen werden in doppelte Anführungszeichen ("
) eingeschlossen und dürfen Leerzeichen enthalten. Außerdem wird die Groß-/Kleinschreibung beachtet. Bei Feldnamen ohne Anführungszeichen wird die Groß-/Kleinschreibung nicht beachtet, und Sie dürfen keine Sonderzeichen enthalten.
In CSV-formatierten Daten kann auch durch eine Ordnungszahl, der ein Unterstrich (_
) vorangestellt ist, auf Felder verwiesen werden. Beispielsweise kann auf das erste Feld mit _1
oder auf das elfte Feld mit _11
verwiesen werden. Anhand der Ordnungszahl auf Felder zu verweisen, ist bei CSV-formatierten Daten hilfreich, die keine Kopfzeile enthalten. In diesem Fall bietet die Ordnungszahl die einzige Möglichkeit, auf ein bestimmtes Feld zu verweisen.
Operatoren
Folgende SQL-Standardoperatoren werden unterstützt:
Operator | Beschreibung |
---|---|
= |
Vergleicht die Gleichwertigkeit von zwei Ausdrücken (ein Vergleichsoperator). |
!= |
Testet, ob zwei Ausdrücke ungleich sind (ein Vergleichsoperator). |
<> |
Vergleicht zwei Ausdrücke nach dem Kriterium „ungleich“ (ein Vergleichsoperator). |
< |
Vergleicht zwei Ausdrücke nach dem Kriterium „kleiner als“ (ein Vergleichsoperator). |
<= |
Vergleicht zwei Ausdrücke nach dem Kriterium „kleiner als oder gleich“ (ein Vergleichsoperator). |
> |
Vergleicht zwei Ausdrücke nach dem Kriterium „größer als“ (ein Vergleichsoperator). |
>= |
Vergleicht zwei Ausdrücke nach dem Kriterium größer als oder gleich (ein Vergleichsoperator). |
+ |
Addition zweier Zahlen. Mit diesem arithmetischen Operator für die Addition kann auch eine Anzahl von Tagen zu einem Datum addiert werden. |
- |
Subtrahiert zwei Zahlen (ein arithmetischer Subtraktionsoperator). |
/ |
Division einer Zahl durch eine andere (arithmetischer Operator für die Division). |
* |
Multiplikation zweier Ausdrücke (arithmetischer Operator für die Multiplikation). |
% |
Gibt den Rest der Division einer Zahl durch eine andere zurück. |
AND |
Führt eine bitweise logische AND-Operation zwischen zwei ganzzahligen Werten aus. |
OR |
Führt eine bitweise logische OR-Operation zwischen zwei gegebenen ganzzahligen Werten durch, die innerhalb von Transact-SQL-Anweisungen in binäre Ausdrücke umgewandelt wurden. |
NOT |
Negiert eine boolesche Eingabe. |
CAST |
Konvertiert einen Ausdruck von einem Datentyp in einen anderen. |
BETWEEN |
Gibt einen zu testenden Bereich an. |
IN |
Ermittelt, ob ein angegebener Wert mit einem Wert aus einer Unterabfrage oder Liste übereinstimmt. |
NULLIF |
Gibt einen NULL-Wert zurück, wenn die beiden angegebenen Ausdrücke gleich sind. |
COALESCE |
Wertet die Argumente in der vorliegenden Reihenfolge aus und gibt den aktuellen Wert des ersten Ausdrucks zurück, der zuerst nicht als NULL ausgewertet wird. |
Wenn sich die Datentypen auf der linken und rechten Seite eines Operators unterscheiden, wird eine automatische Konvertierung gemäß den hier angegebenen Regeln durchgeführt: Rangfolge der Datentypen (Transact-SQL).
Die SQL-Sprache für die Abfragebeschleunigung unterstützt nur eine sehr kleine Teilmenge der Datentypen, die in diesem Artikel erläutert werden. Weitere Informationen finden Sie im Abschnitt Datentypen dieses Artikels.
Umwandlungen
Die SQL-Sprache für die Abfragebeschleunigung unterstützt den CAST-Operator gemäß den folgenden Regeln: Datentypkonvertierung (Datenbank-Engine).
Die SQL-Sprache für die Abfragebeschleunigung unterstützt nur eine kleine Teilmenge der Datentypen, die in diesem Artikel erläutert werden. Weitere Informationen finden Sie im Abschnitt Datentypen dieses Artikels.
Zeichenfolgenfunktionen
Die SQL-Sprache für die Abfragebeschleunigung unterstützt die folgenden standardmäßigen SQL-Zeichenfolgenfunktionen:
Funktion | Beschreibung |
---|---|
CHAR_LENGTH | Gibt die Länge des Zeichenfolgenausdrucks in Zeichen zurück, wenn der Zeichenfolgenausdruck den Zeichenfolgendatentyp aufweist. Anderenfalls wird die Länge des Zeichenfolgenausdrucks in Byte zurückgegeben (die kleinste ganze Zahl, die nicht weniger als die Anzahl von Bits ist, dividiert durch 8). (Diese Funktion entspricht der CHARACTER_LENGTH-Funktion.) |
CHARACTER_LENGTH | Gibt die Länge des Zeichenfolgenausdrucks in Zeichen zurück, wenn der Zeichenfolgenausdruck den Zeichenfolgendatentyp aufweist. Anderenfalls wird die Länge des Zeichenfolgenausdrucks in Byte zurückgegeben (die kleinste ganze Zahl, die nicht weniger als die Anzahl von Bits ist, dividiert durch 8). (Diese Funktion entspricht der CHAR_LENGTH-Funktion.) |
LOWER | Gibt einen Zeichenausdruck zurück, dessen Zeichen von Großbuchstaben in Kleinbuchstaben umgewandelt wurden. |
UPPER | Gibt einen Zeichenausdruck zurück, wobei Kleinbuchstaben in Großbuchstaben umgewandelt werden. |
SUBSTRING | Gibt einen Teil eines Zeichen-, Binär-, Text- oder Bildausdrucks in SQL Server zurück. |
TRIM | Entfernt das Leerzeichen – char(32) – oder andere am Beginn und Ende einer Zeichenfolge angegebene Zeichen. |
LEADING | Entfernt das Leerzeichen – char(32) – oder andere am Beginn einer Zeichenfolge angegebene Zeichen. |
TRAILING | Entfernt das Leerzeichen char(32) oder andere angegebene Zeichen vom Ende einer Zeichenkette. |
Hier einige Beispiele:
Funktion | Beispiel | Ergebnis |
---|---|---|
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 |
Datumsfunktionen
Die folgenden standardmäßigen SQL-Datumsfunktionen werden unterstützt:
DATE_ADD
DATE_DIFF
EXTRACT
TO_STRING
TO_TIMESTAMP
Derzeit werden alle Datumsformate der Norm IS08601 konvertiert.
DATE_ADD-Funktion
In der SQL-Sprache für die Abfragebeschleunigung können für die DATE_ADD
-Funktion „year“, „month“, „day“, „hour“, „minute“ und „second“ angegeben werden.
Beispiele:
DATE_ADD(datepart, quantity, timestamp)
DATE_ADD('minute', 1, CAST('2017-01-02T03:04:05.006Z' AS TIMESTAMP)
DATE_DIFF-Funktion
In der SQL-Sprache für die Abfragebeschleunigung können für die DATE_DIFF
-Funktion „year“, „month“, „day“, „hour“, „minute“ und „second“ angegeben werden.
DATE_DIFF(datepart, timestamp, timestamp)
DATE_DIFF('hour','2018-11-09T00:00+05:30','2018-11-09T01:00:23-08:00')
EXTRACT-Funktion
Bei EXTRACT unterstützt die SQL-Sprache für die Abfragebeschleunigung im Gegensatz zum Datumsteil für die DATE_ADD
-Funktion „timezone_hour“ und „timezone_minute“ als Datumsteil.
Beispiele:
EXTRACT(datepart FROM timestampstring)
EXTRACT(YEAR FROM '2010-01-01T')
TO_STRING-Funktion
Beispiele:
TO_STRING(TimeStamp , format)
TO_STRING(CAST('1969-07-20T20:18Z' AS TIMESTAMP), 'MMMM d, y')
In dieser Tabelle werden Zeichenfolgen beschrieben, mit denen Sie das Ausgabeformat der TO_STRING
-Funktion angeben können.
Formatzeichenfolge | Output |
---|---|
yy | Jahr im zweistelligen Format: 1999 als „99“ |
y | Jahr im vierstelligen Format |
yyyy | Jahr im vierstelligen Format |
M | Monat des Jahres: 1 |
MM | Monat mit Nullen aufgefüllt: 01 |
MMM | Abkürzung für den Monat des Jahres: JAN |
MMMM | Vollständiger Monatsname: April |
d | Tag des Monats (1–31) |
dd | Tag des Monats mit Nullen aufgefüllt (01–31) |
a | AM oder PM |
h. | Stunde des Tages (1–12) |
hh | Stunden des Tages mit Nullen aufgefüllt (01–12) |
H | Stunde des Tages (0–23) |
HH | Stunde des Tages mit Nullen aufgefüllt (00–23) |
m | Minute der Stunde (0–59) |
MM | Minute mit Nullen aufgefüllt (00–59) |
s | Sekunde der Minuten (0–59) |
ss | Sekunden mit Nullen aufgefüllt (00–59) |
E | Sekundenbruchteil (0,1–0,9) |
SS | Sekundenbruchteil (0,01–0,99) |
SSS | Sekundenbruchteil (0,001–0,999) |
X | Abweichung in Stunden |
XX oder XXXX | Abweichung in Stunden und Minuten (+0430) |
XXX oder XXXXX | Abweichung in Stunden und Minuten (-07:00) |
x | Abweichung in Stunden (7) |
xx oder xxxx | Abweichung in Stunden und Minuten (+0530) |
Xxx oder xxxxx | Abweichung in Stunden und Minuten (+05:30) |
TO_TIMESTAMP-Funktion
Es werden nur IS0-8601-Formate unterstützt.
Beispiele:
TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')
Hinweis
Sie können auch die UTCNOW
-Funktion verwenden, um die Systemzeit abzurufen.
Aggregatausdrücke
Eine SELECT-Anweisung kann entweder einen oder mehrere Projektionsausdrücke oder einen einzelnen Aggregatausdruck enthalten. Die folgenden Aggregatausdrücke werden unterstützt:
Ausdruck | Beschreibung |
---|---|
COUNT(*) | Gibt die Anzahl der Datensätze zurück, die mit dem Prädikatausdruck übereinstimmen. |
COUNT(Ausdruck) | Gibt die Anzahl der Datensätze zurück, für die der Ausdruck ungleich NULL ist. |
AVG(expression) | Gibt den Durchschnitt der Werte des Ausdrucks zurück, die ungleich NULL sind. |
MIN(Ausdruck) | Gibt den kleinsten Wert des Ausdrucks zurück, der ungleich NULL ist. |
MAX(Ausdruck | Gibt den größten Wert des Ausdrucks zurück, der ungleich NULL ist. |
SUM(Ausdruck) | Gibt die Summe aller Werte des Ausdrucks zurück, die ungleich NULL sind. |
MISSING
IS MISSING
ist der einzige nicht standardmäßige Operator, der von der SQL-Sprache für die Abfragebeschleunigung unterstützt wird. Wenn bei JSON-Daten in einem bestimmten Eingabedatensatz ein Feld fehlt, ergibt das Ausdrucksfeld IS MISSING
den booleschen Wert „true“.
Tabellendeskriptoren
Bei CSV-Daten lautet der Tabellenname immer BlobStorage
. Beispiel:
SELECT * FROM BlobStorage
Für JSON-Daten stehen zusätzliche Optionen zur Verfügung:
SELECT * FROM BlobStorage[*].path
Dadurch können Abfragen für Teilmengen von JSON-Daten ausgeführt werden.
Bei JSON-Abfragen können Sie den Pfad in einem Teil der FROM-Klausel angeben. Diese Pfade helfen, die Teilmenge von JSON-Daten zu analysieren. Die Pfade können auf JSON-Array- und -Objektwerte verweisen.
Wir erläutern dies ausführlicher anhand eines Beispiels.
Hier unsere Beispieldaten:
{
"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
}
]
}
Möglicherweise interessieren Sie sich nur für das JSON-Objekt warehouses
in den oben aufgeführten Daten. Das Objekt warehouses
ist ein JSON-Arraytyp. Sie können es in der FROM-Klausel angeben. Die Beispielabfrage sieht in etwa wie folgt aus.
SELECT latitude FROM BlobStorage[*].warehouses[*]
Mit der Abfrage werden alle Felder abgerufen, jedoch nur „latitude“ ausgewählt.
Wenn Sie nur auf den JSON-Objektwert dimensions
zugreifen möchten, können Sie in der Abfrage auf dieses Objekt verweisen. Beispiel:
SELECT length FROM BlobStorage[*].dimensions
Dadurch wird auch der Zugriff auf Elemente des Objekts dimensions
eingeschränkt. Wenn Sie auf andere Elemente von JSON-Feldern und auf innere Werte von JSON-Objekten zugreifen möchten, können Sie eine Abfrage wie im folgenden Beispiel verwenden:
SELECT weight,warehouses[0].longitude,id,tags[1] FROM BlobStorage[*]
Hinweis
BlobStorage und BlobStorage[*] verweisen beide auf das gesamte Objekt. Wenn Sie jedoch einen Pfad in der FROM-Klausel angegeben haben, müssen Sie BlobStorage[*].path verwenden
Sys.Split
Dies ist eine besondere Form der SELECT-Anweisung, die nur für CSV-formatierte Daten verfügbar ist.
SELECT sys.split(split_size) FROM BlobStorage
Verwenden Sie diese Anweisung, wenn Sie CSV-Datensätze in Batches herunterladen und verarbeiten möchten. Auf diese Weise können Datensätze parallel verarbeitet werden, anstatt alle Datensätze einzeln herunterladen zu müssen. Diese Anweisung gibt keine Datensätze aus der CSV-Datei zurück. Stattdessen wird eine Auflistung von Batchgrößen zurückgegeben. Anschließend können Sie jede Batchgröße verwenden, um einen Batch von Datensätzen abzurufen.
Verwenden Sie den split_size-Parameter, um die Anzahl von Bytes anzugeben, die jeder Batch enthalten soll. Wenn Sie z. B. jeweils nur 10 MB an Daten verarbeiten möchten, sieht die Anweisung wie folgt aus: SELECT sys.split(10485760)FROM BlobStorage
. Dabei entsprechen 10 MB 10.485.760 Bytes. Jeder Batch enthält so viele Datensätze, wie in diese 10 MB passen.
In den meisten Fällen ist die Größe jedes Batches etwas höher als der von Ihnen angegebene Wert. Dies liegt daran, dass ein Batch keinen Teildatensatz enthalten darf. Wenn der letzte Datensatz in einem Batch vor dem Ende Ihres Schwellenwerts beginnt, wird der Batch vergrößert, so dass er den vollständigen Datensatz aufnehmen kann. Die Größe des letzten Batches wird wahrscheinlich etwas unter der von Ihnen angegebenen Größe liegen.
Hinweis
Die Größe für „split_size“ muss mindestens 10 MB (10485760) betragen.