Freigeben über


Abfragebeschleunigung – SQL-Sprachreferenz

Die Abfragebeschleunigung unterstützt eine ANSI SQL-ähnliche Sprache zum Ausdrücken von Abfragen über BLOB-Inhalte. Der SQL-Dialekt der Abfragebeschleunigung ist eine Teilmenge von ANSI SQL, die eine begrenzte Gruppe unterstützter Datentypen, Operatoren usw. umfasst. Gleichzeitig erweitert er ANSI SQL um die Unterstützung von Abfragen über hierarchische, halbstrukturierte Datenformate wie JSON.

SELECT-Syntax

Die einzige SQL-Anweisung, die von der Abfragebeschleunigung unterstützt wird, 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]

Für CSV-formatierte Daten muss die Tabelle sein BlobStorage. Dies bedeutet, dass die Abfrage für das im REST-Aufruf angegebene Blob ausgeführt wird. Bei JSON-formatierten Daten ist die Tabelle ein "Tabellendeskriptor". Weitere Informationen finden Sie im Abschnitt "Tabellenbeschreibungen " in diesem Artikel.

Im folgenden Beispiel gibt diese Anweisung für jede Zeile, für die der WHERE-Ausdruck "true" zurückgibt, eine neue Zeile zurück, die aus der Auswertung der einzelnen Projektionsausdrücke erstellt wird.

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

Die maximale Anzahl bestimmter Spalten, die Sie im SELECT-Ausdruck verwenden können, beträgt 49. Wenn Ihre SELECT-Anweisung mehr als 49 Spalten zurückgibt, verwenden Sie ein Wildcardzeichen (*) für den SELECT-Ausdruck (z. B.: SELECT *).

Im folgenden Beispiel wird eine Aggregatberechnung (z. B. der Mittelwert einer bestimmten Spalte) über jede der Zeilen zurückgegeben, für die der Ausdruck "true" zurückgibt.

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

Im folgenden Beispiel werden geeignete Offsets zum Teilen eines CSV-formatierten Blobs zurückgegeben. Weitere Informationen finden Sie im Abschnitt "Sys.Split " in diesem Artikel.

SELECT sys.split(split_size)FROM BlobStorage

Datentypen

Datentyp BESCHREIBUNG
INT Eine 64-Bit-Ganzzahl mit Vorzeichen.
SCHWEBEN 64-Bit-Gleitkommazahl (mit doppelter Genauigkeit).
SCHNUR Unicode-Zeichenfolge mit variabler Länge.
ZEITSTEMPEL Ein Punkt in der Zeit.
BOOLESCH „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 in Abhängigkeit vom Kontext implizit in andere Typen umgegossen werden. Weitere Informationen finden Sie unter "Datentyprangfolge (Transact-SQL)".

Ausdrücke

Verweisen auf Felder

Bei JSON-formatierten Daten oder CSV-formatierten Daten mit einer Kopfzeile können Felder anhand des Namens referenziert 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. So kann beispielsweise auf das erste Feld als _1 verwiesen werden, oder auf das elfte Feld als _11. Das Verweisen auf Felder nach Ordnungszahl ist für CSV-formatierte Daten nützlich, die keine Kopfzeile enthalten. In diesem Fall ist die einzige Möglichkeit, auf ein bestimmtes Feld zu verweisen, nach Ordnungszahl festgelegt.

Betriebspersonal

Die folgenden SQL-Standardoperatoren werden unterstützt:

Bediener BESCHREIBUNG
= Vergleicht die Gleichheit von zwei Ausdrücken (einem Vergleichsoperator).
!= Überprüft, ob ein Ausdruck nicht mit einem anderen Ausdruck (einem Vergleichsoperator) identisch ist.
<> 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).
/ Dividiert eine Zahl durch eine andere (arithmetische Divisionsoperator).
* Multipliziert zwei Ausdrücke (ein arithmetischer Multiplikationsoperator).
% Gibt den Rest einer Zahl zurück, die durch eine andere geteilt wird.
AND Führt eine bitweise logische AND-Operation zwischen zwei ganzzahligen Werten aus.
OR Führt eine bitweise logische OR-Operation zwischen zwei angegebenen ganzzahligen Werten aus, die in binäre Ausdrücke innerhalb von Transact-SQL-Anweisungen übersetzt werden.
NOT Negiert eine boolesche Eingabe.
CAST Konvertiert einen Ausdruck eines Datentyps in einen anderen.
BETWEEN Gibt einen zu testenden Bereich an.
IN Bestimmt, ob ein angegebener Wert mit einem beliebigen Wert in einer Unterabfrage oder einer Liste übereinstimmt.
NULLIF Gibt einen NULL-Wert zurück, wenn die beiden angegebenen Ausdrücke gleich sind.
COALESCE Wertet die Argumente in der Reihenfolge aus und gibt den aktuellen Wert des ersten Ausdrucks zurück, der anfangs nicht als NULL ausgewertet wird.

Wenn Datentypen links und rechts von einem Operator unterschiedlich sind, wird die automatische Konvertierung gemäß den hier angegebenen Regeln ausgeführt: Datentyprang (Transact-SQL).

Die SQL-Sprache für die Abfragebeschleunigung unterstützt nur eine sehr kleine Teilmenge der in diesem Artikel erläuterten Datentypen. Weitere Informationen finden Sie im Abschnitt "Datentypen " in diesem Artikel.

Umwandlungen

Die SQL-Sprache für die Abfragebeschleunigung unterstützt den CAST-Operator gemäß den hier aufgeführten Regeln: Datentypkonvertierung (Datenbankmodul).

Die SQL-Sprache für die Abfragebeschleunigung unterstützt nur eine kleine Teilmenge der in diesem Artikel erläuterten Datentypen. Weitere Informationen finden Sie im Abschnitt "Datentypen " in diesem Artikel.

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 ist identisch mit der funktion CHAR_LENGTH
SENKEN Gibt einen Zeichenausdruck zurück, nachdem Großbuchstaben in Kleinbuchstaben konvertiert wurden.
OBERER Gibt einen Zeichenausdruck zurück, bei dem Kleinbuchstaben in Großbuchstaben umgewandelt werden.
Substring Gibt einen Teil eines Zeichen-, Binär-, Text- oder Bildausdrucks in SQL Server zurück.
STUTZEN Entfernt das Leerzeichen (32) oder andere angegebene Zeichen vom Anfang und Ende einer Zeichenfolge.
FÜHREND Entfernt das Leerzeichen (32) oder andere angegebene Zeichen vom Anfang einer Zeichenfolge.
NACHFOLGEND Entfernt das Leerzeichen (32) oder andere angegebene Zeichen vom Ende einer Zeichenfolge.

Hier einige Beispiele:

Funktion Beispiel Ergebnis
CHARACTER_LENGTH SELECT CHARACTER_LENGTH('abcdefg') from BlobStorage 7
CHAR_LENGTH SELECT CHAR_LENGTH(_1) from BlobStorage 1
SENKEN SELECT LOWER('AbCdEfG') from BlobStorage abcdefg
OBERER SELECT UPPER('AbCdEfG') from BlobStorage ABCDEFG
Substring SUBSTRING('123456789', 1, 5) 23456
STUTZEN TRIM(BOTH '123' FROM '1112211Microsoft22211122') Microsoft

Datumsfunktionen

Die folgenden SQL-Standarddatumsfunktionen werden unterstützt:

  • DATE_ADD
  • DATE_DIFF
  • EXTRACT
  • TO_STRING
  • TO_TIMESTAMP

Derzeit werden alle Datumsformate von Standard-IS08601 konvertiert.

DATE_ADD-Funktion

Die SQL-Sprache für die Abfragebeschleunigung unterstützt Jahr, Monat, Tag, Stunde, Minute, Sekunde für die DATE_ADD Funktion.

Beispiele

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

DATE_DIFF-Funktion

Die SQL-Sprache für die Abfragebeschleunigung unterstützt Jahr, Monat, Tag, Stunde, Minute, Sekunde für die DATE_DIFF Funktion.

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 Ausgabe
Yy Jahr im 2-stelligen Format - 1999 als "99"
y Jahr im 4-stelligen Format
yyyy Jahr im 4-stelligen Format
M Monat des Jahres - 1
MM Monat mit Nullen aufgefüllt: 01
MMM Abgekürzter Monat des Jahres - JAN
MMMM Vollständiger Monat - Mai
d Tag des Monats (1-31)
Dd Tag des Monats mit Nullen aufgefüllt (01–31)
ein 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)
ß Sekunden mit Nullen aufgefüllt (00–59)
E Bruchteil von Sekunden (0,1-0,9)
ß Bruchteil von Sekunden (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

Nur IS08601 Formate werden unterstützt.

Beispiele

TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')

Hinweis

Sie können die UTCNOW Funktion auch verwenden, um die Systemzeit abzurufen.

Aggregatausdrücke

Eine SELECT-Anweisung kann einen oder mehrere Projektionsausdrücke oder einen einzelnen Aggregatausdruck enthalten. Die folgenden Aggregatausdrücke werden unterstützt:

Ausdruck BESCHREIBUNG
ANZAHL(*) Gibt die Anzahl der Datensätze zurück, die dem Prädikatausdruck entsprechen.
COUNT(Ausdruck) Gibt die Anzahl der Datensätze zurück, für die der Ausdruck ungleich Null ist.
AVG(Ausdruck) Gibt den Mittelwert der Nicht-NULL-Werte des Ausdrucks zurück.
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.
SUMME(Ausdruck) Gibt die Summe aller Nicht-Null-Werte des Ausdrucks zurück.

FEHLEND

Der IS MISSING Operator ist der einzige Nichtstandard, den die SQL-Sprache für die Abfragebeschleunigung unterstützt. Wenn für JSON-Daten ein Feld aus einem bestimmten Eingabedatensatz fehlt, wird das Ausdrucksfeld IS MISSING auf den booleschen Wert true ausgewertet.

Tabellendeskriptoren

Für CSV-Daten ist der Tabellenname immer BlobStorage. Beispiel:

SELECT * FROM BlobStorage

Für JSON-Daten stehen weitere Optionen zur Verfügung:

SELECT * FROM BlobStorage[*].path

Dies ermöglicht Abfragen über Teilmengen der JSON-Daten.

Bei JSON-Abfragen können Sie den Pfad in einem Teil der FROM-Klausel angeben. Diese Pfade helfen bei der Analyse der Teilmenge von JSON-Daten. Diese Pfade können auf JSON-Array- und Object-Werte verweisen.

Sehen wir uns ein Beispiel an, um dies ausführlicher zu verstehen.

Dies sind 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 warehouses JSON-Objekt aus den obigen Daten. Das warehouses Objekt ist ein JSON-Arraytyp, sodass Sie dies in der FROM-Klausel erwähnen können. Ihre Beispielabfrage kann etwa wie folgt aussehen.

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

Die Abfrage ruft alle Felder ab, wählt jedoch nur den Breitengrad aus.

Wenn Sie nur auf den dimensions JSON-Objektwert zugreifen möchten, können Sie in Ihrer Abfrage auf dieses Objekt verweisen. Beispiel:

SELECT length FROM BlobStorage[*].dimensions

Dadurch wird auch der Zugriff auf Elemente des dimensions Objekts beschränkt. Wenn Sie auf andere Elemente von JSON-Feldern und inneren Werten 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 über einen Pfad in der FROM-Klausel verfügen, müssen Sie BlobStorage[*].path verwenden.

Sys.Split

Dies ist eine spezielle 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 in Fällen, in denen Sie CSV-Datensätze in Batches herunterladen und verarbeiten möchten. Auf diese Weise können Sie Datensätze parallel verarbeiten, anstatt alle Datensätze gleichzeitig 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 parameter split_size , um die Anzahl der Bytes anzugeben, die jeder Batch enthalten soll. Wenn Sie beispielsweise jeweils nur 10 MB Daten verarbeiten möchten, würde Ihre Anweisung wie folgt aussehen: SELECT sys.split(10485760)FROM BlobStorage da 10 MB gleich 10.485.760 Bytes sind. 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 die von Ihnen angegebene Zahl. Das liegt daran, dass ein Batch keinen Teildatensatz enthalten kann. Wenn der letzte Datensatz in einem Batch vor dem Ende des Schwellenwerts beginnt, ist der Batch größer, sodass er den vollständigen Datensatz enthalten kann. Die Größe des letzten Batches ist wahrscheinlich kleiner als die von Ihnen angegebene Größe.

Hinweis

Die split_size muss mindestens 10 MB (10485760) betragen.

Siehe auch