Kurz: Dotazování služby Azure Cosmos DB pomocí rozhraní API pro tabulku
PLATÍ PRO: Stůl
Azure Cosmos DB pro tabulku podporuje dotazy OData a LINQ na data klíč/hodnota (tabulka).
Tento článek se zabývá následujícími úkony:
- Dotazování dat pomocí rozhraní API pro tabulku
Dotazy v tomto článku využívají následující ukázkovou tabulku People
:
PartitionKey | RowKey | PhoneNumber | |
---|---|---|---|
Harp | Walter | Walter@contoso.com | 425-555-0101 |
Novák | Ben | Ben@contoso.com | 425-555-0102 |
Novák | Jeff | Jeff@contoso.com | 425-555-0104 |
Podrobnosti o dotazování pomocí rozhraní API pro tabulku najdete v tématu Dotazování tabulek a entit.
Požadavky
Aby tyto dotazy fungovaly, musíte mít účet služby Azure Cosmos DB a data entit v kontejneru. Pokud nemáte účet nebo data, dokončete rychlý start: Azure Cosmos DB for Table for .NET k vytvoření účtu a naplnění databáze.
Dotazování sloupců PartitionKey a RowKey
Vzhledem k tomu, že vlastnosti PartitionKey (Klíč oddílu) a RowKey (Klíč řádku) tvoří primární klíč entity, můžete k identifikaci entity použít následující speciální syntaxi:
Dotaz
https://<mytableendpoint>/People(PartitionKey='Harp',RowKey='Walter')
Výsledky
PartitionKey | RowKey | PhoneNumber | |
---|---|---|---|
Harp | Walter | Walter@contoso.com | 425-555-0104 |
Alternativně můžete tyto vlastnosti zadat v rámci možnosti $filter
, jak je znázorněno v následující části. V názvech klíčových vlastností a konstantních hodnotách se rozlišují malá a velká písmena. Vlastnosti PartitionKey i RowKey jsou typu String.
Dotazování s použitím filtru OData
Při vytváření řetězce filtru mějte na paměti tato pravidla:
- K porovnání vlastnosti s hodnotou použijte logické operátory definované ve specifikaci protokolu OData. Vlastnost nelze porovnat s dynamickou hodnotou. Jedna strana výrazu musí být konstanta.
- Mezery kódované adresou URL musí oddělit název vlastnosti, operátor a konstantní hodnotu. Mezera se do adresy URL kóduje jako
%20
. - Ve všech částech řetězce filtru se rozlišují malá a velká písmena.
- Hodnota konstanty musí být stejného datového typu jako vlastnost, aby filtr vrátil platné výsledky. Další informace o podporovaných typech vlastností najdete v tématu Principy datového modelu služby Table Service.
Tady je příklad dotazu, který ukazuje filtrování podle vlastností PartitionKey a Email pomocí filtru OData $filter
.
Dotaz
https://<mytableapi-endpoint>/People()?$filter=PartitionKey%20eq%20'Smith'%20and%20Email%20eq%20'Ben@contoso.com'
Další informace o vytváření výrazů filtru pro různé datové typy najdete v tématu Dotazování tabulek a entit.
Výsledky
PartitionKey | RowKey | PhoneNumber | |
---|---|---|---|
Novák | Ben | Ben@contoso.com | 425-555-0102 |
Dotazy na vlastnosti datetime nevrací žádná data při spuštění v rozhraní API služby Azure Cosmos DB pro tabulku. Zatímco Azure Table Storage ukládá hodnoty kalendářních dat s časovými intervaly, rozhraní API pro tabulku ve službě Azure Cosmos DB používá _ts
vlastnost. Vlastnost _ts
je na druhé úrovni členitosti, což není filtr OData. Azure Cosmos DB blokuje dotazy na vlastnosti časového razítka. Alternativním řešením je definovat vlastní vlastnost data a času nebo dlouhého datového typu a nastavit hodnotu data z klienta.
Dotazování pomocí jazyka LINQ
Dotazovat můžete také pomocí jazyka LINQ, který se přeloží na odpovídající výrazy dotazu OData. Tady je příklad sestavování dotazů pomocí sady .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 });
Další kroky
Teď můžete pokračovat k dalšímu kurzu, kde se dozvíte, jak globálně distribuovat data.