エラスティック テーブルの 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;}
}

次の手順

参照

開発者向けエラスティック テーブル
コードを使用してエラスティック テーブルを作成する
コードを使用してエラスティック テーブルを使用する
一括操作メッセージ
エラスティック テーブルのサンプル コード