Interroger les colonnes JSON dans les tables élastiques
[Cette rubrique fait partie de la documentation en version préliminaire et peut faire l'objet de modifications.]
Les tables élastiques prennent en charge le format JavaScript Object Notation (JSON) pour les colonnes de texte. Ces colonnes peuvent être utilisées pour stocker du JSON arbitraire sans schéma en fonction des besoins de l’application. Vous pouvez utiliser le message ExecuteCosmosSQLQuery
pour exécuter n’importe quelle requête Cosmos SQL directement sur votre table élastique et filtrer les lignes en fonction des propriétés dans JSON.
Pour un exemple montrant comment créer une colonne JSON, voir Créer une colonne au format JSON
Définir les données de la colonne JSON
Cet exemple crée une ligne dans la table élastique contoso_SensorData
comportant des données JSON dans la colonne contoso_EnergyConsumption
.
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;
}
Interroger les données de la colonne JSON
Cet exemple exécute une requête sur la table élastique contoso_SensorData
pour filtrer toutes les lignes où la valeur energyconsumption.power
est supérieure à 5.
Toutes les colonnes de la table peuvent être interrogées à l’aide d’un préfixe c.props
sur le nom de schéma des colonnes. Dans ce préfixe, c
est un alias ou une notation abrégée pour la table élastique interrogée. Par exemple, la colonne contoso_deviceid
de la table contoso_sensordata
peut être référencée dans la requête Cosmos SQL à l’aide c.props.contoso_deviceid
.
En savoir plus sur les requêtes dans Azure Cosmos DB pour NoSQL.
Le SDK pour .NET n’a pas encore de classes de requête et de réponse pour le message ExecuteCosmosSqlQuery
. Vous pouvez utiliser la classe OrganizationRequestOrganizationRequest et la classe OrganizationResponseOrganizationResponse.
Le message ExecuteCosmosSqlQuery
a les paramètres d’entrée suivants :
Nom | Type | Description |
---|---|---|
QueryText |
String | (Obligatoire) La requête SQL Cosmos. |
EntityLogicalName |
String | (Obligatoire) Nom logique de la table. |
QueryParameters |
ParameterCollection | (Facultatif) Valeurs de tous les paramètres spécifiés dans le paramètre QueryText . |
PageSize |
Long | (Facultatif) Le nombre d’enregistrements renvoyés avec une page unique. |
PagingCookie |
String | (Facultatif) Le cookie de pagination à utiliser. |
PartitionId |
String | (Facultatif) La valeur Partitionid pour définir l’étendue de la requête. |
ExecuteCosmosSqlQuery
renvoie une Entité de type ouvert. Cette entité contient les attributs suivants :
Nom | Type | Description |
---|---|---|
PagingCookie |
String | Une valeur à définir pour les requêtes suivantes lorsqu’il y a plus de résultats. |
HasMore |
Bool | Une valeur qui indique s’il y a plus d’enregistrements dans les résultats. |
Result |
String | JSON avec des valeurs pour les résultats. |
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;}
}
Étapes suivantes
Voir aussi
Tables élastiques pour les développeurs
Créer des tables élastiques à l’aide de code
Utiliser des tables élastiques à l’aide de code
Messages d’opération en bloc
Exemple de code de table élastique