Samouczek: wykonywanie zapytań względem usługi Azure Cosmos DB przy użyciu interfejsu API dla tabeli

DOTYCZY: Tabeli

Usługa Azure Cosmos DB for Table obsługuje zapytania OData i LINQ względem danych klucza/wartości (tabeli).

W tym artykule opisano następujące zadania:

  • Wykonywanie zapytań dotyczących danych za pomocą interfejsu API dla tabeli

Zapytania w tym artykule korzystają z następującej przykładowej tabeli People:

PartitionKey RowKey E-mail PhoneNumber
Harp Walter Walter@contoso.com 425-555-0101
Smith Ben Ben@contoso.com 425-555-0102
Smith Jan Jeff@contoso.com 425-555-0104

Aby uzyskać szczegółowe informacje na temat wykonywania zapytań przy użyciu interfejsu API dla tabeli, zobacz Wykonywanie zapytań dotyczących tabel i jednostek.

Wymagania wstępne

Aby te zapytania działały, musisz mieć konto usługi Azure Cosmos DB i mieć dane jednostki w kontenerze. Jeśli nie masz konta lub danych, wykonaj czynności w przewodniku Szybki start: Usługa Azure Cosmos DB dla tabeli dla platformy .NET , aby utworzyć konto i wypełnić bazę danych.

Zapytanie dotyczące właściwości PartitionKey i RowKey

Ponieważ właściwości PartitionKey i RowKey tworzą klucz podstawowy jednostki, do zidentyfikowania jednostki można użyć następującej specjalnej składni:

Zapytanie

https://<mytableendpoint>/People(PartitionKey='Harp',RowKey='Walter')

Wyniki

PartitionKey RowKey E-mail PhoneNumber
Harp Walter Walter@contoso.com 425-555-0104

Można także określić te właściwości jako część opcji $filter, jak pokazano w poniższej sekcji. Nazwy właściwości klucza i wartości stałe są uwzględniane wielkości liter. Właściwości PartitionKey i RowKey są typu Ciąg.

Wykonywanie zapytań przy użyciu filtru OData

Podczas tworzenia ciągu filtru należy pamiętać o następujących regułach:

  • Aby porównać właściwość z wartością, użyj operatorów logicznych określonych w specyfikacji protokołu OData. Nie można porównać właściwości z wartością dynamiczną. Jedna strona wyrażenia musi być stałą.
  • Spacje zakodowane w adresach URL muszą oddzielić nazwę właściwości, operator i wartość stałą. Spacja jest zakodowana w adresie URL jako %20.
  • We wszystkich częściach ciągu filtru jest rozróżniana wielkość liter.
  • Wartość stała musi mieć ten sam typ danych co właściwość, aby filtr zwracał prawidłowe wyniki. Aby uzyskać więcej informacji na temat obsługiwanych typów właściwości, zobacz Omówienie modelu danych usługi Table Service.

Poniżej przedstawiono przykładowe zapytanie, które pokazuje sposób filtrowania według właściwości PartitionKey i Email przy użyciu elementu $filter OData.

Zapytanie

https://<mytableapi-endpoint>/People()?$filter=PartitionKey%20eq%20'Smith'%20and%20Email%20eq%20'Ben@contoso.com'

Aby uzyskać więcej informacji na temat sposobu tworzenia wyrażenia filtru dla różnych typów danych, zobacz Wykonywanie zapytań względem tabel i jednostek.

Wyniki

PartitionKey RowKey E-mail PhoneNumber
Smith Ben Ben@contoso.com 425-555-0102

Zapytania we właściwościach daty/godziny nie zwracają żadnych danych podczas wykonywania w interfejsie API usługi Azure Cosmos DB dla tabeli. Podczas gdy usługa Azure Table Storage przechowuje wartości dat z stopniem szczegółowości czasu, interfejs API dla tabeli w usłudze Azure Cosmos DB używa _ts właściwości . Właściwość _ts jest na drugim poziomie szczegółowości, który nie jest filtrem OData. Usługa Azure Cosmos DB blokuje zapytania we właściwościach znacznika czasu. Aby obejść ten problem, można zdefiniować niestandardową właściwość typu data/godzina lub długa i ustawić wartość daty z klienta.

Wykonywanie zapytań za pomocą wyrażenia LINQ

Możesz także wykonywać zapytania za pomocą wyrażenia LINQ, co oznacza odpowiednie wyrażenia zapytań OData. Oto przykład sposobu tworzenia zapytań przy użyciu zestawu .NET SDK:

IQueryable<CustomerEntity> linqQuery = table.CreateQuery<CustomerEntity>()
            .Where(x => x.PartitionKey == "4")
            .Select(x => new CustomerEntity() { PartitionKey = x.PartitionKey, RowKey = x.RowKey, Email = x.Email });

Następne kroki

Możesz teraz przejść do następnego samouczka, aby dowiedzieć się, jak dystrybuować swoje dane globalnie.