Öğretici: Tablo için API'yi kullanarak Azure Cosmos DB'yi sorgulama
ŞUNLAR IÇIN GEÇERLIDIR: Masa
Tablo için Azure Cosmos DB, anahtar/değer (tablo) verilerine karşı OData ve LINQ sorgularını destekler.
Bu makale aşağıdaki görevleri kapsar:
- Tablo için API ile verileri sorgulama
Bu makaledeki sorgularda aşağıdaki People
tablosu kullanılmaktadır:
PartitionKey | RowKey | E-posta | PhoneNumber |
---|---|---|---|
Harp | Walter | Walter@contoso.com | 425-555-0101 |
Smith | Ben | Ben@contoso.com | 425-555-0102 |
Smith | Jeff | Jeff@contoso.com | 425-555-0104 |
Tablo api'sini kullanarak sorgulama hakkında ayrıntılı bilgi için bkz . Tabloları ve varlıkları sorgulama.
Önkoşullar
Bu sorguların çalışması için bir Azure Cosmos DB hesabınız ve kapsayıcıda varlık verileriniz olmalıdır. Hesabınız veya verileriniz yoksa hızlı başlangıcı tamamlayın : Hesap oluşturmak ve veritabanınızı doldurmak için .NET tablosu için Azure Cosmos DB.
PartitionKey ve RowKey üzerinde sorgulama
PartitionKey ve RowKey özellikleri bir varlığın birincil anahtarını oluşturduğundan, varlığı belirlemek için aşağıdaki özel sözdizimini kullanabilirsiniz:
Sorgu
https://<mytableendpoint>/People(PartitionKey='Harp',RowKey='Walter')
Sonuçlar
PartitionKey | RowKey | E-posta | PhoneNumber |
---|---|---|---|
Harp | Walter | Walter@contoso.com | 425-555-0104 |
Alternatif olarak, aşağıdaki bölümde gösterildiği gibi, $filter
seçeneğinin parçası olarak bu özellikleri belirtebilirsiniz. Anahtar özellik adları ve sabit değerler büyük/küçük harfe duyarlıdır. Hem PartitionKey hem de RowKey özellikleri String türündedir.
OData filtresi kullanarak sorgulama
Bir filtre dizesi oluştururken şu kuralları göz önünde bulundurun:
- Bir özelliği bir değerle karşılaştırmak için OData Protokol Belirtimi tarafından tanımlanan mantıksal işleçleri kullanın. Bir özelliği dinamik değerle karşılaştıramazsınız. İfadenin bir tarafı sabit olmalıdır.
- URL ile kodlanmış alanların özellik adını, işlecini ve sabit değerini ayırması gerekir. Boşluk,
%20
olarak URL kodlamalı olur. - Filtre dizesinin tüm kısımları büyük/küçük harfe duyarlıdır.
- Filtrenin geçerli sonuçlar döndürmesi için sabit değer, özellikle aynı veri türünde olmalıdır. Desteklenen özellik türleri hakkında daha fazla bilgi için bkz . Tablo hizmeti veri modelini anlama.
Aşağıda, OData $filter
kullanılarak PartitionKey ve Email özelliklerine göre nasıl filtreleme yapılacağını gösteren örnek bir sorgu verilmiştir.
Sorgu
https://<mytableapi-endpoint>/People()?$filter=PartitionKey%20eq%20'Smith'%20and%20Email%20eq%20'Ben@contoso.com'
Çeşitli veri türleri için filtre ifadeleri oluşturma hakkında daha fazla bilgi için bkz. Tabloları ve Varlıkları Sorgulama.
Sonuçlar
PartitionKey | RowKey | E-posta | PhoneNumber |
---|---|---|---|
Smith | Ben | Ben@contoso.com | 425-555-0102 |
Datetime özelliklerindeki sorgular, Azure Cosmos DB'nin Tablo için API'sinde yürütülürken hiçbir veri döndürmez. Azure Tablo depolama alanı, saat ayrıntı düzeyi değerlerle tarih değerlerini depolasa da Azure Cosmos DB'deki Tablo API'sinde _ts
özelliği kullanılır. _ts
özelliği, OData filtresi olmayan ikinci bir ayrıntı düzeyindedir. Azure Cosmos DB, zaman damgası özelliklerindeki sorguları engeller. Geçici bir çözüm olarak, özel bir tarih saat veya uzun veri türü özelliği tanımlayabilir ve istemciden tarih değerini ayarlayabilirsiniz.
LINQ kullanarak sorgulama
İlgili OData sorgu ifadelerine çeviri yapan LINQ kullanarak da sorgulama yapabilirsiniz. Aşağıda, .NET SDK kullanılarak sorgu derlemeye ilişkin bir örnek verilmiştir:
IQueryable<CustomerEntity> linqQuery = table.CreateQuery<CustomerEntity>()
.Where(x => x.PartitionKey == "4")
.Select(x => new CustomerEntity() { PartitionKey = x.PartitionKey, RowKey = x.RowKey, Email = x.Email });
Sonraki adımlar
Artık verilerinizi genel olarak nasıl dağıtacağınızı öğrenmek için sonraki öğreticiye ilerleyebilirsiniz.