Öğretici: Tablo api'sini kullanarak Azure Cosmos DB'yi sorgulama
ŞUNLAR IÇIN GEÇERLIDIR: Tablo
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, bir hesap oluşturmak ve veritabanınızı doldurmak için Hızlı Başlangıç: .NET tablosu için Azure Cosmos DB'yi tamamlayın.
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ış boşluklar özellik adını, işlecini ve sabit değerini ayırmalıdır. 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 API'sinde yürütülürken hiçbir veri döndürmez. Azure Tablo depolama alanı tarih değerlerini saat ayrıntı düzeyi değerlerinde 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.