Abfrage von JSON-Spalten in elastischen Tabellen
[Dieses Thema ist Teil der Dokumentation zur Vorabversion und kann geändert werden.]
Elastische Tabellen unterstützen das JavaScript Object Notation (JSON)-Format für Textspalten. Diese Spalten können verwendet werden, um schemafreie, beliebige JSON-Daten gemäß den Bedürfnissen der Anwendung zu speichern. Mit der Nachricht ExecuteCosmosSQLQuery
können Sie jede beliebige Cosmos SQL-Abfrage direkt gegen Ihre elastische Tabelle ausführen und Zeilen auf der Grundlage von Eigenschaften innerhalb von JSON filtern.
Ein Beispiel für das Erstellen einer JSON-Spalte finden Sie unter Erstellen einer Spalte im JSON-Format.
JSON-Spaltendaten festlegen
Dieses Beispiel erstellt eine Zeile in der elastischen Tabelle contoso_SensorData
, die JSON-Daten in der Spalte contoso_EnergyConsumption
enthält.
public static Guid CreateWithJsonData(
IOrganizationService service,
string deviceId,
ref string sessionToken)
{
var entity = new Entity("contoso_sensordata")
{
Attributes =
{
{ "contoso_deviceid", deviceId },
{ "contoso_sensortype", "Humidity" },
{ "contoso_value", 40 },
{ "contoso_energyconsumption", "{ \"power\": 0.55, \"powerUnit\":\"kWh\", \"voltage\": 2, \"voltageUnit\": \"kV\" }",
{ "contoso_timestamp", DateTime.UtcNow},
{ "partitionid", deviceId },
{ "ttlinseconds", 86400 } // 86400 seconds in a day
}
};
var request = new CreateRequest
{
Target = entity
};
var response = (CreateResponse)service.Execute(request);
// Capture the session token
sessionToken = response.Results["x-ms-session-token"].ToString();
return response.id;
}
Abfragen von JSON-Spalten-Daten
In diesem Beispiel wird eine Abfrage in der elastischen Tabelle contoso_SensorData
zum Filtern nach allen Zeilen ausgeführt, in denen der energyconsumption.power
-Wert mehr als 5 ist.
Alle Tabellenspalten können mit einem c.props
-Präfix für den Schemanamen der Spalten abgefragt werden. In diesem Präfix ist c
ein Alias oder eine Kurzschreibweise für die elastische Tabelle, die abgefragt wird. Zum Beispiel kann die Spalte contoso_deviceid
in der Tabelle contoso_sensordata
in der Cosmos SQL-Abfrage mithilfe von c.props.contoso_deviceid
referenziert werden.
Erfahren Sie mehr über Abfragen in Azure Cosmos DB für NoSQL.
Das SDK für .NET verfügt noch nicht über Anforderungs- und Antwortklassen für die Nachricht ExecuteCosmosSqlQuery
. Sie können die OrganizationRequest-Klasse und die OrganizationResponse-Klasse verwenden.
Die ExecuteCosmosSqlQuery
-Nachricht hat die folgenden Eingabeparameter.
Name des Dataflows | Type | Beschreibung |
---|---|---|
QueryText |
String | (Erforderlich) Die Cosmos SQL-Abfrage. |
EntityLogicalName |
String | (Erforderlich) Der logische Name der Tabelle. |
QueryParameters |
ParameterCollection | (Optional) Werte für alle Parameter, die im Parameter QueryText angegeben sind. |
PageSize |
Lang | (Optional) Die Anzahl der Datensätze, die auf einer einzelnen Seite zurückgegeben werden. |
PagingCookie |
String | (Optional) Der zu verwendende Paging-Cookie. |
PartitionId |
String | (Optional) Der Partitionid -Wert, um den Bereich der Abfrage festzulegen. |
ExecuteCosmosSqlQuery
gibt eine Entität zurück, die ein offener Typ ist. Diese Entität hat die folgenden Attribute.
Name des Dataflows | Type | Beschreibung |
---|---|---|
PagingCookie |
String | Ein Wert, der für nachfolgende Requests festgelegt wird, wenn es mehr Ergebnisse gibt. |
HasMore |
Bool | Ein Wert, der angibt, ob die Ergebnisse weitere Datensätze enthalten. |
Result |
String | JSON mit Werten für die Ergebnisse. |
public static List<QueryResult> QueryJsonAttribute(IOrganizationService service)
{
StringBuilder query = new();
query.Append("select c.props.contoso_deviceid as deviceId, ");
query.Append("c.props.contoso_timestamp as timestamp, ");
query.Append("c.props.contoso_energyconsumption.power as power ");
query.Append("from c where c.props.contoso_sensortype='Humidity' ");
query.Append("and c.props.contoso_energyconsumption.power > 5");
var request = new OrganizationRequest("ExecuteCosmosSqlQuery")
{
Parameters = {
{ "EntityLogicalName","contoso_sensordata" },
{ "QueryText", query.ToString() }
}
};
OrganizationResponse response = service.Execute(request);
// Deserialized query result into a class with expected schema.
Entity result = (Entity)response.Results["Result"];
return JsonConvert.DeserializeObject<List<QueryResult>>(result["Result"].ToString());
}
public class QueryResult
{
[JsonProperty("deviceId")]
public string DeviceId {get;set;}
[JsonProperty("timestamp")]
public DateTime Timestamp {get;set;}
[JsonProperty("power")]
public int Power {get;set;}
}
Nächste Schritte,
Siehe auch
Elastische Tabellen für Entwickler
Erstellen Sie elastische Tabellen mit Code
Elastische Tabellen mit Code verwenden
Massenvorgang für Nachrichten
Beispielcode für elastische Tabellen