Dokumentacja języka SQL przyspieszania zapytań
Przyspieszanie zapytań obsługuje język przypominający język SQL ANSI do wyrażania zapytań za pośrednictwem zawartości obiektu blob. Dialekt SQL przyspieszania zapytań jest podzestawem JĘZYKA SQL ANSI, z ograniczonym zestawem obsługiwanych typów danych, operatorów itp., ale rozszerza również język SQL ANSI do obsługi zapytań w hierarchicznych formatach danych częściowo ustrukturyzowanych, takich jak JSON.
SKŁADNIA SELECT
Jedyną instrukcją SQL obsługiwaną przez przyspieszanie zapytań jest instrukcja SELECT. W tym przykładzie zwracany jest każdy wiersz, dla którego wyrażenie zwraca wartość true.
SELECT * FROM table [WHERE expression] [LIMIT limit]
W przypadku danych sformatowanych w formacie CSV tabela musi mieć wartość BlobStorage
. Oznacza to, że zapytanie będzie uruchamiane względem każdego obiektu blob określonego w wywołaniu REST. W przypadku danych sformatowanych w formacie JSON tabela jest deskryptorem "tabeli". Zobacz sekcję Deskryptory tabel w tym artykule.
W poniższym przykładzie dla każdego wiersza, dla którego wyrażenie WHERE zwraca wartość true, ta instrukcja zwróci nowy wiersz wykonany z oceny każdego z wyrażeń projekcji.
SELECT expression [, expression ...] FROM table [WHERE expression] [LIMIT limit]
Można określić co najmniej jedną konkretną kolumnę w ramach wyrażenia SELECT (na przykład SELECT Title, Author, ISBN
).
Uwaga
Maksymalna liczba określonych kolumn, których można użyć w wyrażeniu SELECT, wynosi 49. Jeśli potrzebujesz instrukcji SELECT, aby zwrócić więcej niż 49 kolumn, użyj symbolu wieloznakowego (*
) dla wyrażenia SELECT (na przykład: SELECT *
).
Poniższy przykład zwraca zagregowane obliczenia (na przykład średnią wartość określonej kolumny) dla każdego z wierszy, dla których wyrażenie zwraca wartość true.
SELECT aggregate_expression FROM table [WHERE expression] [LIMIT limit]
Poniższy przykład zwraca odpowiednie przesunięcia do dzielenia obiektu blob sformatowanego w formacie CSV. Zobacz sekcję Sys.Split w tym artykule.
SELECT sys.split(split_size)FROM BlobStorage
Typy danych
Typ danych | Opis |
---|---|
INT | 64-bitowa liczba całkowita podpisana. |
FLOAT | Zmiennoprzecinkowa 64-bitowa ("podwójna precyzja"). |
CIĄG | Ciąg Unicode o zmiennej długości. |
TIMESTAMP | Punkt w czasie. |
BOOLEAN | TRUE lub FALSE. |
Podczas odczytywania wartości z danych sformatowanych w formacie CSV wszystkie wartości są odczytywane jako ciągi. Wartości ciągów mogą być konwertowane na inne typy przy użyciu wyrażeń CAST. Wartości mogą być niejawnie rzutowe do innych typów w zależności od kontekstu. Aby uzyskać więcej informacji, zobacz Pierwszeństwo typu danych (Transact-SQL).
Wyrażenia
Odwoływanie się do pól
W przypadku danych sformatowanych w formacie JSON lub danych sformatowanych w formacie CSV z wierszem nagłówka pola mogą być przywoływane według nazwy. Nazwy pól mogą być cytowane lub niekwestionowane. Nazwy pól cytowanych są ujęte w znaki podwójnego cudzysłowu ("
), mogą zawierać spacje i są uwzględniane wielkość liter. Niekwestionowane nazwy pól są bez uwzględniania wielkości liter i mogą nie zawierać żadnych znaków specjalnych.
W danych sformatowanych w formacie CSV pola mogą być również przywoływane przez porządkowe, poprzedzone znakiem podkreślenia (_
). Na przykład pierwsze pole może być przywołyne jako _1
, lub jedenaste pole może być przywołyne jako _11
. Odwoływanie się do pól według porządkowych jest przydatne w przypadku danych sformatowanych w formacie CSV, które nie zawierają wiersza nagłówka, w którym jedynym sposobem odwołania się do określonego pola jest porządkowa.
Operatory
Obsługiwane są następujące standardowe operatory SQL:
Operator | Opis |
---|---|
= |
Porównuje równość dwóch wyrażeń (operator porównania). |
!= |
Sprawdza, czy jedno wyrażenie nie jest równe innemu wyrażeniu (operator porównania). |
<> |
Porównuje dwa wyrażenia nie równe (operator porównania). |
< |
Porównuje dwa wyrażenia dla mniejszych niż (operator porównania). |
<= |
Porównuje dwa wyrażenia dla mniejszych lub równych (operator porównania). |
> |
Porównuje dwa wyrażenia większe niż (operator porównania). |
>= |
Porównuje dwa wyrażenia dla większej lub równej (operator porównania). |
+ |
Dodaje dwie liczby. Ten dodatkowy operator arytmetyczny może również dodać liczbę w dniach do daty. |
- |
Odejmuje dwie liczby (operator odejmowania arytmetycznego). |
/ |
Dzieli jedną liczbę na inną (operator dzielenia arytmetycznego). |
* |
Mnoży dwa wyrażenia (operator mnożenia arytmetycznego). |
% |
Zwraca pozostałą część jednej liczby podzielonej przez inną. |
AND |
Wykonuje bitową operację logiczną AND między dwiema wartościami całkowitymi. |
OR |
Wykonuje bitową operację logiczną OR między dwiema określonymi wartościami całkowitymi w postaci przetłumaczonej na wyrażenia binarne w instrukcjach Języka Transact-SQL. |
NOT |
Neguje dane wejściowe logiczne. |
CAST |
Konwertuje wyrażenie jednego typu danych na inne. |
BETWEEN |
Określa zakres do przetestowania. |
IN |
Określa, czy określona wartość jest zgodna z dowolną wartością w podquery, czy na liście. |
NULLIF |
Zwraca wartość null, jeśli dwa określone wyrażenia są równe. |
COALESCE |
Oblicza argumenty w kolejności i zwraca bieżącą wartość pierwszego wyrażenia, które początkowo nie daje wartości NULL. |
Jeśli typy danych po lewej i prawej stronie operatora są różne, automatyczna konwersja zostanie wykonana zgodnie z regułami określonymi tutaj: pierwszeństwo typu danych (Transact-SQL).
Język SQL przyspieszania zapytań obsługuje tylko bardzo mały podzbiór typów danych omówionych w tym artykule. Zobacz sekcję Typy danych w tym artykule.
Rzuca
Język SQL przyspieszania zapytań obsługuje operatora CAST, zgodnie z regułami tutaj: Konwersja typu danych (aparat bazy danych).
Język SQL przyspieszania zapytań obsługuje tylko niewielki podzbiór typów danych omówionych w tym artykule. Zobacz sekcję Typy danych w tym artykule.
Funkcje ciągów
Język SQL przyspieszania zapytań obsługuje następujące standardowe funkcje ciągów SQL:
Funkcja | Opis |
---|---|
CHAR_LENGTH | Zwraca długość znaków wyrażenia ciągu, jeśli wyrażenie ciągu ma typ danych znaków; w przeciwnym razie zwraca długość w bajtach wyrażenia ciągu (najmniejsza liczba całkowita nie mniejsza niż liczba bitów podzielona przez 8). (Ta funkcja jest taka sama jak funkcja CHARACTER_LENGTH). |
CHARACTER_LENGTH | Zwraca długość znaków wyrażenia ciągu, jeśli wyrażenie ciągu ma typ danych znaków; w przeciwnym razie zwraca długość w bajtach wyrażenia ciągu (najmniejsza liczba całkowita nie mniejsza niż liczba bitów podzielona przez 8). (Ta funkcja jest taka sama jak funkcja CHAR_LENGTH |
LOWER | Zwraca wyrażenie znaku po przekonwertowaniu danych wielkich liter na małe litery. |
UPPER | Zwraca wyrażenie znaku z małymi literami, które są konwertowane na wielkie litery. |
PODCIĄG | Zwraca część znaku, pliku binarnego, tekstu lub wyrażenia obrazu w SQL Server. |
TRIM | Usuwa znak spacji (32) lub inne określone znaki od początku i końca ciągu. |
WIODĄCYCH | Usuwa znak spacji (32) lub inne określone znaki od początku ciągu. |
KOŃCOWE | Usuwa znak spacji (32) lub inne określone znaki z końca ciągu. |
Oto kilka przykładów:
Funkcja | Przykład | Wynik |
---|---|---|
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 |
Funkcje daty
Obsługiwane są następujące standardowe funkcje daty SQL:
DATE_ADD
DATE_DIFF
EXTRACT
TO_STRING
TO_TIMESTAMP
Obecnie wszystkie formaty dat standardowego IS08601 są konwertowane.
DATE_ADD, funkcja
Język SQL przyspieszania zapytań obsługuje rok, miesiąc, dzień, godzinę, minutę DATE_ADD
, sekundę dla funkcji.
Przykłady:
DATE_ADD(datepart, quantity, timestamp)
DATE_ADD('minute', 1, CAST('2017-01-02T03:04:05.006Z' AS TIMESTAMP)
DATE_DIFF, funkcja
Język SQL przyspieszania zapytań obsługuje rok, miesiąc, dzień, godzinę, minutę DATE_DIFF
, sekundę dla funkcji.
DATE_DIFF(datepart, timestamp, timestamp)
DATE_DIFF('hour','2018-11-09T00:00+05:30','2018-11-09T01:00:23-08:00')
EXTRACT, funkcja
W przypadku funkcji EXTRACT innej niż część daty obsługiwana przez DATE_ADD
funkcję przyspieszanie zapytań język SQL obsługuje timezone_hour i timezone_minute jako część daty.
Przykłady:
EXTRACT(datepart FROM timestampstring)
EXTRACT(YEAR FROM '2010-01-01T')
TO_STRING, funkcja
Przykłady:
TO_STRING(TimeStamp , format)
TO_STRING(CAST('1969-07-20T20:18Z' AS TIMESTAMP), 'MMMM d, y')
W tej tabeli opisano ciągi, których można użyć do określenia formatu wyjściowego TO_STRING
funkcji.
Ciąg formatu | Dane wyjściowe |
---|---|
RR | Rok w formacie 2 cyfry — 1999 jako "99" |
Y | Rok w formacie 4 cyfry |
yyyy | Rok w formacie 4 cyfry |
M | Miesiąc roku — 1 |
MM | Zero dopełniony miesiąc - 01 |
MMM | Abbr. miesiąc roku — STYCZEŃ |
MMMM | Pełny miesiąc — maj |
d | Dzień miesiąca (1–31) |
dd | Zero dopełniony dzień miesiąca (01-31) |
a | AM lub PM |
h | Godzina dnia (1–12) |
hh | Zero wypełnionych godzin od dnia (01-12) |
H | Godzina dnia (0–23) |
HH | Zero Dopełniona godzina dnia (00-23) |
m | Minuta godziny (0–59) |
mm | Zero dopełnione minuty (00-59) |
s | Sekunda minut (0–59) |
ss | Zero wypełnione sekundy (00-59) |
S | Ułamek sekund (0,1–0,9) |
SS | Ułamek sekund (0,01-0,99) |
SSS | Ułamek sekund (0,001-0,999) |
X | Przesunięcie w godzinach |
XX lub XXXX | Przesunięcie w godzinach i minutach (+0430) |
XXX lub XXXXX | Przesunięcie w godzinach i minutach (-07:00) |
x | Przesunięcie w godzinach (7) |
xx lub xxxx | Przesunięcie w godzinę i minutę (+0530) |
Xxx lub xxxxx | Przesunięcie w godzinę i minutę (+05:30) |
TO_TIMESTAMP, funkcja
Obsługiwane są tylko formaty IS08601.
Przykłady:
TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')
Uwaga
Możesz również użyć UTCNOW
funkcji , aby uzyskać czas systemowy.
Wyrażenia agregacji
Instrukcja SELECT może zawierać co najmniej jedno wyrażenie projekcji lub jedno wyrażenie agregacji. Obsługiwane są następujące wyrażenia agregacyjne:
Wyrażenie | Opis |
---|---|
COUNT(*) | Zwraca liczbę rekordów pasującą do wyrażenia predykatu. |
COUNT(expression) | Zwraca liczbę rekordów, dla których wyrażenie nie ma wartości null. |
AVG(expression) | Zwraca średnią wartości wyrażenia innego niż null. |
MIN(wyrażenie) | Zwraca minimalną wartość wyrażenia inną niż null. |
MAX(wyrażenie | Zwraca maksymalną wartość niepustą wyrażenia. |
SUM(expression) | Zwraca sumę wszystkich wartości innych niż null wyrażenia. |
BRAKUJE
Operator IS MISSING
jest jedynym standardem, który obsługuje język SQL przyspieszania zapytań. Jeśli w przypadku danych JSON brakuje pola z określonego rekordu wejściowego, pole IS MISSING
wyrażenia zwróci wartość logiczną true.
Deskryptory tabel
W przypadku danych CSV nazwa tabeli to zawsze BlobStorage
. Przykład:
SELECT * FROM BlobStorage
W przypadku danych JSON dostępne są dodatkowe opcje:
SELECT * FROM BlobStorage[*].path
Umożliwia to wykonywanie zapytań na podzestawach danych JSON.
W przypadku zapytań JSON można wspomnieć o ścieżce w części klauzuli FROM. Te ścieżki ułatwią analizowanie podzestawu danych JSON. Te ścieżki mogą odwoływać się do wartości tablicy JSON i obiektu.
Przyjrzyjmy się przykładowi, aby to zrozumieć bardziej szczegółowo.
Oto nasze przykładowe dane:
{
"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
}
]
}
Być może interesuje Cię tylko warehouses
obiekt JSON z powyższych danych. Obiekt warehouses
jest typem tablicy JSON, więc możesz wspomnieć o tym w klauzuli FROM. Przykładowe zapytanie może wyglądać mniej więcej tak.
SELECT latitude FROM BlobStorage[*].warehouses[*]
Zapytanie pobiera wszystkie pola, ale wybiera tylko szerokość geograficzną.
Jeśli chcesz uzyskać dostęp tylko dimensions
do wartości obiektu JSON, możesz użyć odwołania do tego obiektu w zapytaniu. Przykład:
SELECT length FROM BlobStorage[*].dimensions
Ogranicza to również dostęp do elementów członkowskich dimensions
obiektu. Jeśli chcesz uzyskać dostęp do innych elementów członkowskich pól JSON i wartości wewnętrznych obiektów JSON, możesz użyć zapytań, takich jak pokazano w poniższym przykładzie:
SELECT weight,warehouses[0].longitude,id,tags[1] FROM BlobStorage[*]
Uwaga
Obiekty BlobStorage i BlobStorage[*] odwołują się do całego obiektu. Jeśli jednak masz ścieżkę w klauzuli FROM, musisz użyć obiektu BlobStorage[*].path
Sys.Split
Jest to specjalna forma instrukcji SELECT, która jest dostępna tylko dla danych w formacie CSV.
SELECT sys.split(split_size) FROM BlobStorage
Użyj tej instrukcji w przypadkach, w których chcesz pobrać, a następnie przetworzyć rekordy danych CSV w partiach. Dzięki temu można przetwarzać rekordy równolegle zamiast jednocześnie pobierać wszystkie rekordy. Ta instrukcja nie zwraca rekordów z pliku CSV. Zamiast tego zwraca kolekcję rozmiarów partii. Następnie możesz użyć każdego rozmiaru partii, aby pobrać partię rekordów danych.
Użyj parametru split_size , aby określić liczbę bajtów, które mają zawierać poszczególne partie. Jeśli na przykład chcesz przetwarzać tylko 10 MB danych jednocześnie, instrukcja będzie wyglądać następująco: SELECT sys.split(10485760)FROM BlobStorage
ponieważ 10 MB jest równe 10 485 760 bajtów. Każda partia będzie zawierać tyle rekordów, ile może mieścić się w tych 10 MB.
W większości przypadków rozmiar każdej partii będzie nieco wyższy niż określona liczba. Dzieje się tak, ponieważ partia nie może zawierać rekordu częściowego. Jeśli ostatni rekord w partii rozpoczyna się przed końcem progu, partia będzie większa, aby mogła zawierać pełny rekord. Rozmiar ostatniej partii będzie prawdopodobnie mniejszy niż określony rozmiar.
Uwaga
Split_size musi mieć co najmniej 10 MB (10485760).