Wykonywanie zapytań dotyczących zasobów usługi Azure Cosmos DB przy użyciu interfejsu API REST
Usługa Azure Cosmos DB to usługa globalnie dystrybuowanej, wielomodelowej bazy danych z obsługą wielu interfejsów API. W tym artykule opisano sposób używania interfejsu REST do wykonywania zapytań dotyczących zasobów przy użyciu interfejsu API SQL.
Jak mogę wykonywać zapytania dotyczące zasobu przy użyciu interfejsu REST?
Aby wykonać zapytanie SQL dla zasobu, wykonaj następujące czynności:
- Wykonaj metodę
POST
względem ścieżki zasobu przy użyciu formatu JSON z właściwościąquery
ustawioną na ciąg zapytania SQL i właściwość "parameters" ustawioną na tablicę opcjonalnych wartości parametrów. -
x-ms-documentdb-isquery
Ustaw nagłówek naTrue
. -
Content-Type
Ustaw nagłówek naapplication/query+json
.
Aby zapoznać się z przykładem pokazującym, jak wykonać zapytanie SQL w zasobie przy użyciu platformy .NET, zobacz REST z przykładu platformy .NET.
Przykład
Poniżej przedstawiono przykładową operację zapytania REST dotyczącą zasobów dokumentów. W tym przykładzie chcemy znaleźć wszystkie dokumenty, które mają wartość "Don" jako autor.
POST https://contosomarketing.documents.azure.com/dbs/XP0mAA==/colls/XP0mAJ3H-AA=/docs HTTP/1.1
x-ms-documentdb-isquery: True
x-ms-date: Mon, 18 Apr 2015 13:05:49 GMT
authorization: type%3dmaster%26ver%3d1.0%26sig%3dkOU%2bBn2vkvIlHypfE8AA5fulpn8zKjLwdrxBqyg0YGQ%3d
x-ms-version: 2015-12-16
x-ms-query-enable-crosspartition: True
Accept: application/json
Content-Type: application/query+json
Host: contosomarketing.documents.azure.com
Content-Length: 50
{
"query": "SELECT * FROM root WHERE (root.Author.id = 'Don')",
"parameters": []
}
Szczegóły żądania
Metoda | Identyfikator URI żądania |
---|---|
POST | Wymagane. Typ uwierzytelniania i token podpisu. Dla tej operacji jest dozwolony tylko token klucza głównego. Aby uzyskać więcej informacji, zobacz Access Control na temat zasobów usługi Cosmos DB. |
Nagłówki żądań
Poniższa tabela zawiera typowe nagłówki używane do wykonywania operacji zapytań.
Nagłówek standardowy | Opis |
---|---|
Autoryzacja | Wymagane. Typ uwierzytelniania i token podpisu. Dla tej operacji jest dozwolony tylko token klucza głównego. Aby uzyskać więcej informacji, zobacz Access Control na temat zasobów usługi Cosmos DB. |
Typ zawartości | Wymagane. Musi być ustawiona na wartość application/query+json. |
Zaakceptowanie | Opcjonalnie. W tej chwili usługa Cosmos DB zawsze zwraca ładunek odpowiedzi w standardowym formacie JSON. Klient musi mieć możliwość akceptowania treści odpowiedzi w standardowym formacie JSON. |
User-Agent | Opcjonalnie. Agent użytkownika wykonujący żądanie. Zalecany format to {nazwa agenta użytkownika}/{wersja}. Na przykład zestaw SDK platformy .NET interfejsu API SQL ustawia ciąg User-Agent na Wartość Microsoft.Document.Client/1.0.0.0. |
Nagłówek niestandardowy | Opis |
---|---|
x-ms-date | Wymagane. Data żądania określona w RFC 1123. Format daty jest wyrażony na przykład w uniwersalnym czasie koordynowanym (UTC). Pt, 08 Kwi 2015 03:52:31 GMT. |
x-ms-documentdb-isquery | Wymagane. Ta właściwość musi być ustawiona na wartość true. |
x-ms-max-item-count | Opcjonalnie. Aby stronicować zestaw wyników, ustaw ten nagłówek na maksymalną liczbę elementów, które mają być zwracane z powrotem na jednej stronie. |
x-ms-kontynuacja | Opcjonalnie. Aby przejść do następnej strony elementów, ustaw ten nagłówek na token kontynuacji dla następnej strony. |
x-ms-version | Opcjonalnie. Wersja usługi REST usługi Cosmos DB. Najnowsza wersja jest używana, gdy nagłówek nie jest podany. Aby uzyskać więcej informacji, zobacz Dokumentacja interfejsu API REST usługi Azure Cosmos DB. |
x-ms-documentdb-query-enable-scan | Opcjonalnie. Użyj skanowania indeksu, aby przetworzyć zapytanie, jeśli właściwa ścieżka indeksu typu jest niedostępna. |
x-ms-session-token | Opcjonalnie. Token sesji dla żądania. Służy do spójności sesji. |
x-ms-partition-key | Opcjonalnie. Jeśli zostanie określony, zapytanie jest wykonywane tylko w dokumentach, które pasują do wartości klucza partycji w nagłówku. |
x-ms-documentdb-query-enablecrosspartition | Opcjonalnie. Musi być ustawiona wartość true dla wszystkich zapytań, które nie filtrują względem pojedynczego klucza partycji. Zapytania filtrujące względem pojedynczej wartości klucza partycji będą wykonywane tylko dla jednej partycji, nawet jeśli jest ona ustawiona na wartość true. |
x-ms-documentdb-populatequerymetrics |
Opcjonalnie. Aby zwracać metryki zapytań, należy ustawić wartość na True |
Treść żądania
Treść żądania powinna być prawidłowym dokumentem JSON zawierającym zapytanie SQL i parametry. Jeśli dane wejściowe są źle sformułowane lub nieprawidłowa składnia SQL, operacja kończy się niepowodzeniem z błędem 400 Nieprawidłowe żądanie.
Otrzymasz również 400 złych żądań, jeśli nie można obsłużyć zapytania przez bramę.
Właściwość | Opis |
---|---|
query | Wymagane. Ciąg zapytania SQL dla zapytania. Aby uzyskać więcej informacji, zobacz Dokumentacja składni SQL usługi Azure Cosmos DB. |
parameters | Wymagane. Tablica parametrów JSON określona jako pary wartości nazw. Tablica parametrów może zawierać od zera do wielu parametrów. Każdy parametr musi mieć następujące wartości:name: nazwę parametru. Nazwy parametrów muszą być prawidłowymi literałami ciągów i zaczynają się od znaku "@". wartość: wartość parametru. Może być dowolną prawidłową wartością JSON (ciąg, liczba, obiekt, tablica, wartość logiczna lub null). |
Przykład żądania
Poniższy przykład tworzy sparametryzowane żądanie SQL z parametrem ciągu dla @authorelementu .
POST https://contosomarketing.documents.azure.com/dbs/XP0mAA==/colls/XP0mAJ3H-AA=/docs HTTP/1.1
x-ms-documentdb-isquery: True
x-ms-date: Mon, 18 Apr 2015 13:05:49 GMT
authorization: type%3dmaster%26ver%3d1.0%26sig%3dkOU%2bBn2vkvIlHypfE8AA5fulpn8zKjLwdrxBqyg0YGQ%3d
x-ms-version: 2015-04-08
Accept: application/json
Content-Type: application/query+json
Host: contosomarketing.documents.azure.com
Content-Length: 50
{
"query": "SELECT * FROM root WHERE (root.Author.id = @author)",
"parameters":
[
{ "name": "@author", "value": "Leo Tolstoy"}
]
}
Aby uzyskać więcej informacji na temat zapytań SQL, zobacz Zapytania SQL dla usługi Azure Cosmos DB.
Szczegóły odpowiedzi
Poniżej przedstawiono typowe kody stanu zwracane przez tę operację. Aby uzyskać informacje o kodach stanu błędów, zobacz Kody stanu HTTP dla usługi Azure Cosmos DB.
Kod | Opis |
---|---|
200 OK | Operacja zakończyła się pomyślnie. |
400 Nieprawidłowe żądanie | Składnia instrukcji SQL jest niepoprawna. |
401 Brak autoryzacji | Nie ustawiono nagłówka Authorization lub x-ms-date . Błąd 401 jest również zwracany, gdy nagłówek autoryzacji jest ustawiony na nieprawidłowy token autoryzacji. |
403 Zabronione | Token autoryzacji wygasł. |
404 Nie znaleziono | Kolekcja nie jest już zasobem. Na przykład zasób mógł zostać usunięty. |
Nagłówki odpowiedzi
Ta operacja zwraca następujące typowe nagłówki. Mogą być zwracane dodatkowe standardowe i typowe nagłówki.
Nagłówek standardowy | Opis |
---|---|
Typ zawartości | Typ zawartości to application/json. Usługa Cosmos DB zawsze zwraca treść odpowiedzi w standardowym formacie JSON. |
Data | Data i godzina operacji odpowiedzi. Ten format daty/godziny jest zgodny z formatem godziny daty [RFC1123] wyrażonym w formacie UTC. |
Nagłówek niestandardowy | Opis |
---|---|
x-ms-item-count | Liczba elementów zwróconych przez operację. |
x-ms-continuation | Jest to nieprzezroczysty ciąg zwracany, gdy zapytanie ma potencjalnie więcej elementów do pobrania. Kontynuacja x-ms może być uwzględniona w kolejnych żądaniach jako nagłówek żądania w celu wznowienia wykonywania zapytania. |
x-ms-request-charge | Jest to liczba jednostek żądania (RU) używanych przez operację. Aby uzyskać więcej informacji na temat jednostek żądań, zobacz Request Units in Azure Cosmos DB (Jednostki żądań w usłudze Azure Cosmos DB). |
x-ms-activity-id | Jest to unikatowy identyfikator operacji. Może służyć do śledzenia wykonywania żądań usługi Cosmos DB. |
x-ms-session-token | Token sesji, który ma być używany dla kolejnych żądań. Służy do spójności sesji. |
Treść odpowiedzi
Treść odpowiedzi dla operacji zapytania składa się z _rid zasobu nadrzędnego zasobu, którego dotyczy zapytanie, oraz tablicy zasobów zawierającej właściwości zasobu dla projekcji i zaznaczenia. Jak pokazano na przykładzie, jeśli zapytanie zostało wykonane na ścieżce dokumentacji kolekcji z _rid XP0mAJ3H-AA=, odpowiedź będzie następująca:
{"_rid":" XP0mAJ3H-AA=","Documents": [ …. …. ],"_count":10}
Właściwość | Opis |
---|---|
_Rid | Identyfikator zasobu dla kolekcji używanej w zapytaniu. |
_Liczba | Liczba zwróconych elementów. |
Tablica zasobów | Tablica zawierająca wyniki zapytania. |
Kompilowanie treści żądania zapytania
Żądanie zapytania musi być prawidłowym dokumentem JSON zawierającym właściwość zapytania zawierającą prawidłowy ciąg zapytania SQL i właściwość parameters zawierającą tablicę parametrów opcjonalnych. Każdy parametr powinien mieć właściwość name i value parametrów, które są określone w zapytaniu. Nazwy parametrów muszą zaczynać się od znaku "@". Wartości mogą być dowolnymi prawidłowymi wartościami JSON — ciągami, liczbami całkowitymi, wartościami logicznymi i wartościami null.
Prawidłowe jest określenie tylko podzestawu parametrów określonych w tekście zapytania . Wyrażenia odwołujące się do tych nieokreślonych parametrów będą obliczane jako niezdefiniowane. Prawidłowe jest również określenie dodatkowych parametrów, które nie są używane w tekście zapytania .
Poniżej przedstawiono kilka przykładów prawidłowych żądań zapytań. Na przykład następujące zapytanie ma jeden parametr @id.
{
"query": "select * from docs d where d.id = @id",
"parameters": [
{"@id": "newdoc"}
]
}
Poniższy przykład zawiera dwa parametry: jeden z wartością ciągu, a drugi z wartością całkowitą.
{
"query": "select * from docs d where d.id = @id and d.prop = @prop",
"parameters": [
{"@id": "newdoc"},
{"@prop": 5}
]
}
W poniższym przykładzie użyto parametrów w klauzuli SELECT, a także właściwości dostępnej za pośrednictwem nazwy parametru jako parametru.
{
"query": "select @id, d[@propName] from docs d",
"parameters": [
{"@id": "newdoc"},
{"@propName": "prop"}
]
}
Kwerendy, których nie można obsłużyć przez bramę
Żadne zapytanie wymagające stanu między kontynuacjami nie może być obsługiwane przez bramę. Obejmuje to następujące działania:
- TOP
- ORDER BY
- OFFSET LIMIT
- Agregacje
- DISTINCT
- GROUP BY
Zapytania, które mogą być obsługiwane przez bramę, obejmują:
- Proste projekcje
- Filtry
Gdy zostanie zwrócona odpowiedź dla zapytania, którego nie można obsłużyć przez bramę, będzie ona zawierać kod stanu 400 (BadRequest) i następujący komunikat:
{"code":"BadRequest","message":"The provided cross partition query can not be directly served by the gateway.
This is a first chance (internal) exception that all newer clients will know how to handle gracefully.
This exception is traced, but unless you see it bubble up as an exception (which only happens on older SDK clients),
then you can safely ignore this message.\r\nActivityId: db660ee4-350a-40e9-bc2c-99f92f2b445d, Microsoft.Azure.Documents.Common/2.2.0.0",
"additionalErrorInfo":"{\"partitionedQueryExecutionInfoVersion\":2,\"queryInfo\":{\"distinctType\":\"None\",\"top\":null,\"offset\":null,\"limit\":null,
\"orderBy\":[\"Ascending\"],\"orderByExpressions\":[\"c._ts\"],\"aggregates\":[],
\"rewrittenQuery\":\"SELECT c._rid, [{\\\"item\\\": c._ts}] AS orderByItems,
c AS payload\\nFROM c\\nWHERE ({documentdb-formattableorderbyquery-filter})\\nORDER BY c._ts\"},
\"queryRanges\":[{\"min\":\"\",\"max\":\"FF\",\"isMinInclusive\":true,\"isMaxInclusive\":false}]}"}
Stronicowanie wyników zapytania
Żądania zapytań obsługują stronicowanie za pośrednictwem nagłówków żądań x-ms-max-item-count i x-ms-continuation . Nagłówek x-ms-max-item-count określa maksymalną liczbę wartości, które mogą być zwracane przez wykonanie zapytania. Może to być od 1 do 1000 i jest skonfigurowane z wartością domyślną 100.
Zapytania będą zwracać od zera do maksymalnej określonej wartości x-ms-max-item-count z wyników wykonywania. Wynik zapytania zawiera nagłówek x-ms-item-count , który określa rzeczywistą liczbę dokumentów zwracanych przez zapytanie. Jeśli istnieją dodatkowe wyniki, które można pobrać z zapytania, odpowiedź zawiera niepustą wartość nagłówka x-ms-continuation .
Klienci mogą pobierać kolejne strony wyników, powtarzając nagłówek x-ms-continuation jako kolejne żądanie. Aby odczytać wszystkie wyniki, klienci muszą powtórzyć ten proces, dopóki nie zostanie zwrócona pusta kontynuacja x-ms .
Wykonania zapytań usługi Cosmos DB są bezstanowe po stronie serwera i można je wznowić w dowolnym momencie przy użyciu nagłówka x-ms-continuation . Wartość x-ms-continuation używa ostatnio przetworzonego identyfikatora zasobu dokumentu (_rid) do śledzenia postępu wykonywania. W związku z tym, jeśli dokumenty zostaną usunięte i ponownie wstawione między pobieraniem stron, dokumenty mogą być potencjalnie wykluczone z dowolnych partii zapytań. Jednak zachowanie i format nagłówka x-ms-continuation mogą ulec zmianie w przyszłej aktualizacji usługi.