Tutorial: Abfragen von Azure Cosmos DB mithilfe der API für Table

GILT FÜR: Tabelle

Azure Cosmos DB for Table unterstützt OData- und LINQ-Abfragen von Schlüssel-Wert-Daten (Tabellendaten).

In diesem Artikel werden die folgenden Aufgaben behandelt:

  • Abfragen von Daten mit der API für Table

Die Abfragen in diesem Artikel verwenden die folgende Beispieltabelle People:

PartitionKey RowKey Email 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

Ausführliche Informationen zu Abfragen mithilfe der API für Table finden Sie unter Abfragen von Tabellen und Entitäten.

Voraussetzungen

Diese Abfragen können nur funktionieren, wenn Sie über ein Azure Cosmos DB-Konto verfügen und Entitätsdaten im Container vorliegen. Wenn Sie kein Konto oder keine Daten haben, führen Sie die Schritte unter Schnellstart: Azure Cosmos DB for Table für .NET aus, um ein Konto zu erstellen und Ihre Datenbank aufzufüllen.

Abfragen nach PartitionKey und RowKey

Da die Eigenschaften PartitionKey und RowKey den Primärschlüssel einer Entität bilden, können Sie die folgende spezielle Syntax verwenden, um die Entität zu identifizieren:

Abfrage

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

Ergebnisse

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

Alternativ können Sie diese Eigenschaften als Teil der $filter-Option angeben, wie im folgenden Abschnitt gezeigt. Bei den Schlüsseleigenschaftsnamen und Konstantenwerten muss die Groß-/Kleinschreibung berücksichtigt werden. Die Eigenschaften „PartitionKey“ und „RowKey“ sind vom Typ „Zeichenfolge“.

Abfragen mit einem OData-Filter

Wenn Sie eine Filterzeichenfolge erstellen, gelten diese Regeln:

  • Verwenden Sie die von der OData-Protokollspezifikation definierten logischen Operatoren, um eine Eigenschaft mit einem Wert zu vergleichen. Sie können eine Eigenschaft nicht mit einem dynamischen Wert vergleichen. Eine Seite des Ausdrucks muss eine Konstante sein.
  • Eigenschaftenname, Operator und Konstantenwert müssen durch URL-codierte Leerzeichen getrennt werden. Ein Leerzeichen wird als %20 URL-codiert.
  • Bei allen Teilen der Filterzeichenfolge ist die Groß-/Kleinschreibung zu beachten.
  • Der konstante Wert muss den gleichen Datentyp besitzen wie die Eigenschaft, damit vom Filter gültige Ergebnisse zurückgegeben werden. Weitere Informationen zu unterstützten Eigenschaftentypen finden Sie unter Grundlegendes zum Tabellenspeicherdienst-Datenmodell.

Diese Beispielabfrage zeigt das Filtern nach den Eigenschaften PartitionKey und Email unter Verwendung eines OData-$filter.

Abfrage

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

Weitere Informationen zum Erstellen von Filterausdrücken für verschiedene Datentypen finden Sie unter Querying Tables and Entities (Abfragen von Tabellen und Entitäten).

Ergebnisse

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

Die Abfragen für datetime-Eigenschaften geben keine Daten zurück, wenn sie in der API für Table von Azure Cosmos DB ausgeführt werden. Azure Table Storage speichert Datenwerte mit einer Zeitgranularität von Takten, die API für Table in Azure Cosmos DB hingegen nutzt die Eigenschaft _ts. Die Eigenschaft _ts befindet sich auf zweiter Ebene der Granularität. Dabei handelt es sich nicht um einen OData-Filter. Azure Cosmos DB blockiert die Abfragen für Zeitstempeleigenschaften. Als Problemumgehung können Sie eine benutzerdefinierte datetime-Eigenschaft oder eine Eigenschaft für einen Long-Datentyp definieren und den Wert über den Client festlegen.

Abfragen mit LINQ

Sie können auch Abfragen mit LINQ durchführen, wobei die Übersetzung in die entsprechenden OData-Abfrageausdrücke erfolgt. Dies ist ein Beispiel für das Erstellen von Abfragen mit dem .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 });

Nächste Schritte

Sie können jetzt mit dem nächsten Tutorial fortfahren, um zu erfahren, wie Sie Ihre Daten global verteilen.