Udostępnij za pośrednictwem


Dokumentacja języka SQL przyspieszania zapytań

Przyspieszanie zapytań obsługuje język podobny do JĘZYKA SQL ANSI do wyrażania zapytań dotyczących zawartości obiektów blob. Przyspieszanie zapytań DIALEKT SQL jest podzbiorem ANSI SQL, z ograniczonym zestawem obsługiwanych typów danych, operatorów itp., ale rozszerza również język ANSI SQL do obsługi zapytań w hierarchicznych półstrukturalnych formatach danych, takich jak JSON.

Składnia SELECT

Jedyną instrukcją SQL obsługiwaną przez przyspieszanie zapytań jest instrukcja SELECT. Ten przykład zwraca 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 na podstawie tego, który obiekt blob został określony 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 obliczania każdego z wyrażeń projekcji.

SELECT expression [, expression ...] FROM table [WHERE expression] [LIMIT limit]

Możesz 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: średnia 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 tego artykułu.

SELECT sys.split(split_size)FROM BlobStorage

Typy danych

Typ danych Opis
INT 64-bitowa liczba całkowita ze znakiem.
PŁYWAĆ 64-bitowa liczba zmiennoprzecinkowa ("podwójna precyzja").
STRUNA Ciąg Unicode o zmiennej długości.
SYGNATURA CZASOWA Punkt w czasie.
BOOLOWSKI Prawda czy fałsz.

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łyane według nazwy. Nazwy pól mogą być cytowane lub bez cudzysłów. Nazwy pól w cudzysłowie są ujęte w znaki podwójnego cudzysłowu ("), mogą zawierać spacje i są wrażliwe na wielkość liter. Nazwy pól bez cudzysłów są bez uwzględniania wielkości liter i mogą nie zawierać żadnych znaków specjalnych.

W danych w formacie CSV pola mogą być również przywoływane za pomocą liczby porządkowej, 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 numerów porządkowych jest przydatne w przypadku danych w formacie CSV, które nie zawierają wiersza nagłówka; w takim przypadku jedynym sposobem odwoływania się do określonego pola jest korzystanie z numerów porządkowych.

Operatorów

Obsługiwane są następujące standardowe operatory SQL:

Obsługujący 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 w celu sprawdzenia, czy jedno jest mniejsze niż drugie (operator porównania).
<= Porównuje dwa wyrażenia, aby sprawdzić, czy jedno jest mniejsze lub równe drugiemu (operator porównania).
> Porównuje dwa wyrażenia za pomocą operatora "większe niż" (operator porównania).
>= Porównuje dwa wyrażenia, sprawdzając, czy jedno jest większe lub równe drugiemu (operator porównania).
+ Dodaje dwie liczby. Ten operator arytmetyczny może również dodać liczbę dni do daty.
- Odejmuje dwie liczby (operator odejmowania arytmetycznego).
/ Dzieli jedną liczbę przez inną (operator dzielenia arytmetycznego).
* Mnoży dwa wyrażenia (operator mnożenia arytmetycznego).
% Zwraca resztę 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 przetłumaczoną na wyrażenia binarne w instrukcjach Transact-SQL.
NOT Neguje dane wejściowe wartości logicznej.
CAST Konwertuje wyrażenie jednego typu danych na inny.
BETWEEN Określa zakres do przetestowania.
IN Określa, czy określona wartość jest zgodna z dowolną wartością w podzapytaniu, 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 podzestaw typów danych omówionych w tym artykule. Zobacz sekcję Typy danych w tym artykule.

Rzuca

Język SQL przyspieszania zapytań obsługuje operator CAST zgodnie z regułami w tym miejscu: Konwersja typu danych (aparat bazy danych).

Język SQL przyspieszania zapytań obsługuje tylko niewielki podzestaw 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 jest typem 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).
DŁUGOŚĆ_ZNAKÓW Zwraca długość znaków wyrażenia ciągu, jeśli wyrażenie ciągu jest typem 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
DOLNY Zwraca wyrażenie znaku po przekonwertowaniu danych z wielkimi literami na małe litery.
GÓRNY Zwraca wyrażenie znakowe z małymi literami przekształconymi na wielkie litery.
podciąg Zwraca część znaku, pliku binarnego, tekstu lub wyrażenia obrazu w programie SQL Server.
trim Usuwa znak spacji (32) lub inne określone znaki od początku i końca ciągu.
Wiodący Usuwa znak spacji (32) lub inne określone znaki od początku ciągu.
ŚLEDZENIE Usuwa znak spacji (32) lub inne określone znaki z końca ciągu.

Oto kilka przykładów:

Funkcja Przykład Wynik
DŁUGOŚĆ_ZNAKÓW SELECT CHARACTER_LENGTH('abcdefg') from BlobStorage 7
CHAR_LENGTH SELECT CHAR_LENGTH(_1) from BlobStorage 1
DOLNY SELECT LOWER('AbCdEfG') from BlobStorage abcdefg
GÓRNY SELECT UPPER('AbCdEfG') from BlobStorage ABCDEFG
PODCIĄG SUBSTRING('123456789', 1, 5) 23456
PRZYCINANIE TRIM(BOTH '123' FROM '1112211Microsoft22211122') Microsoft

Funkcje dotyczące dat

Obsługiwane są następujące standardowe funkcje dat SQL:

  • DATE_ADD
  • DATE_DIFF
  • EXTRACT
  • TO_STRING
  • TO_TIMESTAMP

Obecnie wszystkie formaty dat standardowych IS08601 są konwertowane.

DATE_ADD, funkcja

Język SQL przyspieszania zapytań obsługuje rok, miesiąc, dzień, godzinę, minutę, sekundę dla funkcji DATE_ADD.

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ę, sekundę dla funkcji DATE_DIFF.

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 funkcję DATE_ADD, język SQL przyspieszania zapytań obsługuje timezone_hour i timezone_minute jako części daty.

Przykłady:

EXTRACT(datepart FROM timestampstring)
EXTRACT(YEAR FROM '2010-01-01T')

Funkcja TO_STRING

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.

Formatowanie ciągu Dane wyjściowe
Rr Rok w formacie 2 cyfry — 1999 jako "99"
y Rok w formacie 4-cyfrowym
yyyy Rok w formacie 4-cyfrowym
M Miesiąc roku — 1
MM Miesiąc uzupełniony zerem - 01
MMM Skrócony miesiąc roku — JAN
MMMM Pełny miesiąc — maj
d Dzień miesiąca (1–31)
Dd Dzień miesiąca z dopełnieniem zerowym (01-31)
a AM lub PM
h Godzina dnia (1–12)
Gg Zero dopełnione godziny dnia (01-12)
H Godzina dnia (0–23)
GG Zero Dopełniona godzina dnia (00-23)
m Minuta godziny (0–59)
Mm Minuta zero wypełniona (00-59)
s Sekunda minut (0–59)
ß Zero wypełnionych sekund (00-59)
S Ułamek sekund (0,1–0,9)
ß 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 godzinach i minutach (+0530)
Xxx lub xxxxx Przesunięcie w godzinach i minutach (+05:30)

TO_TIMESTAMP, funkcja

Obsługiwane są tylko IS08601 formaty.

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ć jedno lub więcej wyrażeń projekcji lub pojedyncze wyrażenie agregacji. Obsługiwane są następujące wyrażenia agregacji:

Wyrażenie Opis
COUNT(*) Zwraca liczbę rekordów, które pasują do wyrażenia predykatu.
COUNT(expression) Zwraca liczbę rekordów, dla których wyrażenie nie ma wartości null.
AVG(wyrażenie) 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ść wyrażenia inną niż null.
SUM(expression) Zwraca sumę wszystkich wartości innych niż null wyrażenia.

BRAKUJĄCY

Operator IS MISSING jest jedynym niestandardowym operatorem, który jest obsługiwany przez język SQL do przyspieszania zapytań. W przypadku danych JSON, jeśli 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. Na przykład:

SELECT * FROM BlobStorage

W przypadku danych JSON dostępne są dodatkowe opcje:

SELECT * FROM BlobStorage[*].path

Umożliwia to wykonywanie zapytań w 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 i obiektu JSON.

Przyjrzyjmy się przykładowi, aby zrozumieć to 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. Na przykład:

SELECT length FROM BlobStorage[*].dimensions

Również ogranicza to dostęp do członków obiektu dimensions. 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ć zapytania, takiego jak pokazano w poniższym przykładzie:

SELECT weight,warehouses[0].longitude,id,tags[1] FROM BlobStorage[*]

Uwaga

BlobStorage i BlobStorage[*] odnoszą się do całego obiektu. Jeśli jednak masz ścieżkę w klauzuli FROM, musisz użyć ścieżki BlobStorage[*].path

Sys.Split

Jest to specjalna forma instrukcji SELECT, która jest dostępna tylko dla danych sformatowanych 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 pobierać wszystkie rekordy jednocześnie. 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ć każda partia. Jeśli na przykład chcesz przetworzyć 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 osiągnięciem progu, partia będzie większa, aby mogła zawierać pełny rekord. Rozmiar ostatniej partii prawdopodobnie będzie mniejszy niż rozmiar, który określisz.

Uwaga

Split_size musi mieć co najmniej 10 MB (10485760).

Zobacz też