Consultar columnas JSON en tablas elásticas
[Este tema es documentación preliminar y está sujeto a modificaciones.]
Las tablas elásticas admiten el formato de notación de objetos JavaScript (JSON) para columnas de texto. Estas columnas se puede usar para almacenar JSON arbitrario sin esquema según las necesidades de la aplicación. Puedes usar el mensaje ExecuteCosmosSQLQuery
para ejecutar cualquier consulta de Cosmos SQL directamente en su tabla elástica y filtrar filas según las propiedades dentro de JSON.
Para ver un ejemplo que muestra cómo crear una columna JSON, consulte Crear una columna con formato JSON.
Establecer datos de columna JSON
Este ejemplo crea una fila en la tabla elástica contoso_SensorData
con datos JSON en la columna 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;
}
Consultar datos de columna JSON
Este ejemplo ejecuta una consulta en la tabla elástica contoso_SensorData
para filtrar todas las filas donde el valor de energyconsumption.power
es mayor a 5.
Todas las columnas de la tabla se pueden consultar mediante un prefijo c.props
en el nombre de esquema de las columnas. En este prefijo, c
es un alias o una notación abreviada para la tabla elástica que se está consultando. Por ejemplo, la columna contoso_deviceid
en la tabla contoso_sensordata
se puede hacer referencia a la tabla en la consulta de Cosmos SQL usando c.props.contoso_deviceid
.
Más información sobre las consultas en Azure Cosmos DB para NoSQL.
El SDK para .NET aún no tiene clases de solicitud y respuesta para el mensaje ExecuteCosmosSqlQuery
. Puedes usar la Clase OrganizationRequest y la Clase OrganizationResponseOrganizationResponse class.
El mensaje ExecuteCosmosSqlQuery
tiene los siguientes parámetros de entrada.
Name | Type | Descripción |
---|---|---|
QueryText |
String | (Obligatorio) la consulta Cosmos SQL. |
EntityLogicalName |
String | (Obligatorio) Nombre lógico de la tabla. |
QueryParameters |
ParameterCollection | (Opcional) Valores para cualquier parámetro que se especifique en el parámetro QueryText . |
PageSize |
Largo | (Opcional) El número de registros devueltos en una sola página. |
PagingCookie |
String | (Opcional) La cookie de paginación que se utilizará. |
PartitionId |
String | (Opcional) El valor Partitionid para establecer el alcance de la consulta. |
ExecuteCosmosSqlQuery
devuelve una Entidad que es de tipo abierto. La entidad tiene los siguientes atributos.
Name | Type | Descripción |
---|---|---|
PagingCookie |
String | Un valor para establecer para solicitudes posteriores cuando haya más resultados. |
HasMore |
Booleano | Un valor que indica si hay más registros en los resultados. |
Result |
String | JSON con valores para los resultados. |
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;}
}
Pasos siguientes
Consulte también
Tablas elásticas para desarrolladores
Crear tablas elásticas mediante código
Usar tablas elásticas mediante código
Mensajes de operación masiva
Código de ejemplo de tablas elásticas