エラスティック テーブルの JSON 列をクエリする
[このトピックはプレリリース ドキュメントであり、変更されることがあります。]
エラスティック テーブルは、テキスト列の JavaScript Object Notation (JSON) 形式をサポートします。 これらの列は、アプリケーションのニーズに応じてスキーマのない任意の json を保存するために使用できます。 ExecuteCosmosSQLQuery
メッセージを使用して、Cosmos SQL クエリをエラスティック テーブルに対して直接実行し、JSON 内のプロパティに基づいて行をフィルター処理することができます。
JSON 列の作成方法を示す例については、Json 形式で列を作成する を参照してください。
JSON 列データを設定する
この例では、contoso_SensorData
のエラスティック テーブルの contoso_EnergyConsumption
列に JSON データを持つ行を作成します。
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;
}
JSON 列データをクエリする
この例では、energyconsumption.power
値が 5 を超えているすべての行をフィルターするために、contoso_SensorData
エラスティック テーブルでクエリを実行します。
すべてのテーブル列は、列のスキーマ名の c.props
接頭辞を使用することによりクエリできます。 この接頭辞で、c
は、クエリ対象のエラスティック テーブルのエイリアスまたは短縮表記です。 たとえば、contoso_deviceid
テーブルの contoso_sensordata
列は、c.props.contoso_deviceid
を使用して Cosmos SQL クエリで参照できます。
Azure Cosmos DB for NoSQL のクエリの詳細については、こちらをご覧ください。
SDK for .NETには、ExecuteCosmosSqlQuery
メッセージの要求クラスと応答クラスがまだありません。 OrganizationRequest クラス と OrganizationResponse クラスを使用できます。
ExecuteCosmosSqlQuery
メッセージには以下の入力パラメーターがあります。
件名 | タイプ | Description |
---|---|---|
QueryText |
String | (必須) Cosmos SQL クエリ。 |
EntityLogicalName |
String | (必須) 参照テーブルの論理名。 |
QueryParameters |
ParameterCollection | (オプション) QueryText パラメーターで指定されたパラメーターの値。 |
PageSize |
Long | (オプション) 1 ページに返されるレコードの数。 |
PagingCookie |
String | (オプション) 使用するページング Cookie。 |
PartitionId |
String | (オプション) クエリのスコープ設定に使用する Partitionid 値。 |
ExecuteCosmosSqlQuery
は、オープン型である エンティティ を返します。 このエンティティには、次の属性があります。
件名 | タイプ | Description |
---|---|---|
PagingCookie |
String | さらに結果がある場合に後続のリクエストに設定する値。 |
HasMore |
Bool | 結果にさらにレコードがあるかどうかを示す値。 |
Result |
String | 結果に値を持つ JSON。 |
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;}
}
次の手順
参照
開発者向けエラスティック テーブル
コードを使用してエラスティック テーブルを作成する
コードを使用してエラスティック テーブルを使用する
一括操作メッセージ
エラスティック テーブルのサンプル コード