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 | 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 | 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 | 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.