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).

Zobacz też