Freigeben über


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.

Weitere Informationen