Öğretici: Tablo için API'yi kullanarak Azure Cosmos DB'yi sorgulama

Important

99,999% kullanılabilirlik hizmet düzeyi sözleşmesi (SLA), anında otomatik ölçeklendirme ve birden çok bölgede otomatik yük devretme ile yüksek ölçekli senaryolar için bir veritabanı çözümü mü arıyorsunuz? NoSQL için Azure Cosmos DB'yi göz önünde bulundurun.

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 (Bölüm Anahtarı) RowKey E-posta Telefon Numarası
Arp 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.

Prerequisites

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ıç: Azure Cosmos DB for Table for .NET kılavuzunu 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:

Query

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

Results

PartitionKey (Bölüm Anahtarı) RowKey E-posta Telefon Numarası
Arp 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 kodlanır.
  • Filtre dizesinin tüm kısımları büyük/küçük harfe duyarlıdır.
  • Filtrenin doğru sonuçlar döndürmesi için sabit değer, özelliğin veri türüyle aynı olmalıdır. Desteklenen özellik türleri hakkında daha fazla bilgi için Tablo hizmeti veri modelini anlama bölümüne bkz.

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.

Query

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.

Results

PartitionKey (Bölüm Anahtarı) RowKey E-posta Telefon Numarası
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ı, tik ayrıntı düzeyinde tarih değerlerini depolarken, 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.