データに対するクエリの実行: 基本¶
ここでは、各タイプのエレメントにクエリを実行する手順について説明します。
コレクションに対するクエリの実行¶
以下の URL に移動して「サービスメタデータドキュメント」を取得します。このドキュメントには、エンティティセットの名前とそのデータの場所の URL のリストが記載されています。
/denodo-odata.svc/<database name>/collectionName
例:
/denodo-odata.svc/movies/actor
応答:
{
"@odata.context": "/denodo-odata.svc/movies/$metadata#actor",
"value": [
{
"actor_id": 1,
"first_name": "PENELOPE",
"last_name": "GUINESS",
"last_update": "2006-02-15T11:34:33Z"
},
…
{
"actor_id": 1000,
"first_name": "CHRISTIAN",
"last_name": "GABLE",
"last_update": "2006-02-15T11:34:33Z"
}
],
"@odata.nextLink": "/denodo-odata.svc/movies/actor?$skiptoken=1000"
}
注釈
わかりやすくするために、これらの例では、サーバーとポートを省略しています。
プライマリキーによるアイテムの取得¶
プライマリキーが存在するビューでは、アイテムのプライマリキーを使用して各アイテムを特定できます。
denodo-odata.svc/<database name>/collectionName(keyvalue)
例:
/denodo-odata.svc/movies/actor(1)
/denodo-odata.svc/movies/store_category('F0')
プライマリキーを複数のフィールドで構成する場合は、各値をカンマで区切ります。
/denodo-odata.svc/<database name>/collectionName(key1,key2)
例:
/denodo-odata.svc/movies/film_actor(actor_id=1,film_id=1)
個々のプロパティへのアクセス¶
アイテムの各プロパティには個別にアクセスできます。
/denodo-odata.svc/<database name>/collectionName(key)/propertyName
例:
/denodo-odata.svc/movies/actor(1)/first_name
応答:
{
"@odata.context": "/denodo-odata.svc/movies/$metadata#actor/first_name",
"value": "PENELOPE"
}
個々のプロパティ値へのアクセス¶
プロパティの値は、未加工の値として取得できます。
/denodo-odata.svc/<database name>/collectionName(key)/propertyName/$value
例:
/denodo-odata.svc/movies/actor(1)/first_name/$value
応答:
PENELOPE
複合プロパティへのアクセス¶
プロパティが複雑なこともありますが、そのようなプロパティも使用できます。複合プロパティから簡潔なプロパティへのプロパティパスを指定する必要があります。
/denodo-odata.svc/<database name>/collectionName(key)/propName/complexProp/propName
たとえば、以下のように struct_table_film
エンティティに film_data 複合フィールドが存在するとします。
{
"@odata.context": "/denodo-odata.svc/movies/$metadata#struct_table_film/$entity",
"table_id": 1,
"film_data": {
"id": 1,
"title": "ACADEMY DINOSAUR",
"description": "ELIZABETH"
}
}
この場合、以下の呼び出しを実行できます。
/denodo-odata.svc/movies/struct_table_film(1)/film_data/title
応答:
{
"@odata.context": "/denodo-odata.svc/movies/$metadata#struct_table_film/title",
"value": "ACADEMY DINOSAUR"
}
コレクションのエレメント数の取得: $count¶
コレクションにあるエレメントの数を取得するには、 $count
を URL に追加します。
/denodo-odata.svc/<database name>/collectionName/$count
例:
/denodo-odata.svc/movies/actor/$count
応答:
200
応答形式の確立¶
OData では、以下の 2 つの方法でデータを表現できます。
Atom (XML)。
JSON。これがデフォルトの表現です。
データの特定の表現をリクエストするには、クエリパラメータ $format
を URL に追加するか (?$format=atom
など)、HTTP ヘッダー Accept
をリクエストに追加します。リクエストに Accept
ヘッダーとクエリパラメータ $format
を指定すると、クエリパラメータが優先されます。
JSON 形式¶
データの JSON 表現を取得するには、「 OData:JSON 」の定義に従ってクエリパラメータ $format
を URL に追加します。
/denodo-odata.svc/movies/actor?$format=json
応答:
{
"@odata.context": "/denodo-odata.svc/movies/$metadata#actor",
"value": [
{
"actor_id": 1,
"first_name": "PENELOPE",
"last_name": "GUINESS",
"last_update": "2006-02-15T11:34:33Z"
},
…
{
"actor_id": 1000,
"first_name": "CHRISTIAN",
"last_name": "GABLE",
"last_update": "2006-02-15T11:34:33Z"
}
],
"@odata.nextLink": "/denodo-odata.svc/movies/actor?$skiptoken=1000"
}
$format
の末尾に odata.metadata
パラメータを記述して、応答に追加する制御情報を選択できます。
odata.metadata=minimal
(デフォルト値): 可能であれば、計算可能な制御情報がサービスによってペイロードから除外されます。/denodo-odata.svc/movies/actor?$format=application/json;odata.metadata=minimal
応答は actor のデータです。これは、短縮形の JSON を指定して、
odata.metadata=minimal
パラメータを指定していないリクエストと同じです。odata.metadata=full
: 応答にはすべての制御情報が明示的に追加されます。/denodo-odata.svc/movies/actor?$format=application/json;odata.metadata=full
応答:
{ "@odata.context": "/denodo-odata.svc/movies/$metadata#actor", "value": [ { "@odata.type": "#com.denodo.odata4.actor", "@odata.id": "/denodo-odata.svc/admin/actor(1)", "@odata.readLink": "/denodo-odata.svc/admin/actor(1)", "actor_id@odata.type": "#Int16", "actor_id": 1, "first_name": "PENELOPE", "last_name": "GUINESS", "last_update": "2006-02-15T11:34:33Z" "films@odata.navigationLink": "/denodo-odata.svc/admin/actor(1)/films", "films@odata.associationLink": "/denodo-odata.svc/admin/actor(1)/films/$ref" }, … { "@odata.type": "#com.denodo.odata4.actor", "@odata.id": "/denodo-odata.svc/admin/actor(1000)", "@odata.readLink": "/denodo-odata.svc/admin/actor(1000)", "actor_id@odata.type": "#Int16", "actor_id": 1000, "first_name": "CHRISTIAN", "last_name": "GABLE", "last_update": "2006-02-15T11:34:33Z" "films@odata.navigationLink": "/denodo-odata.svc/admin/actor(1000)/films", "films@odata.associationLink": "/denodo-odata.svc/admin/actor(1000)/films/$ref" } ], "@odata.nextLink": "/denodo-odata.svc/movies/actor?$skiptoken=1000" }
odata.metadata=none
: 応答には、odata.nextLink
とodata.count
を除き、制御情報は追加されません。/denodo-odata.svc/movies/actor?$format=application/json;odata.metadata=none
応答:
{ "value": [ { "actor_id": 1, "first_name": "PENELOPE", "last_name": "GUINESS", "last_update": "2006-02-15T11:34:33Z" }, … { "actor_id": 1000, "first_name": "CHRISTIAN", "last_name": "GABLE", "last_update": "2006-02-15T11:34:33Z" } ], "@odata.nextLink": "/denodo-odata.svc/movies/actor?$skiptoken=1000" }
HTTP ヘッダー Accept
を使用して、以下のようにこの形式を要求することもできます。
Accept: application/json
Accept: application/json;odata.metadata=minimal
Accept: application/json;odata.metadata=full
Accept: application/json;odata.metadata=none
クエリパラメータ $format
と HTTP ヘッダー Accept
をリクエストで指定すると、 $format
の値が優先されます。
Atom 形式¶
データの Atom 表現を取得するには、クエリパラメータ $format=atom
を URL に追加します。
/denodo-odata.svc/movies/actor?$format=atom
応答:
<?xml version='1.0' encoding='UTF-8'?>
<a:feed xmlns:a="http://www.w3.org/2005/Atom" xmlns:m="http://docs.oasis-open.org/odata/ns/metadata" xmlns:d="http://docs.oasis-open.org/odata/ns/data" m:context="/denodo-odata.svc/movies/$metadata#actor">
<a:id>/denodo-odata.svc/movies/actor</a:id>
<a:link rel="next" href="/denodo-odata.svc/movies/actor?$format=atom&$skiptoken=1000"/>
<a:entry>
<a:id>/denodo-odata.svc/movies/actor(1)</a:id>
<a:title/>
<a:summary/>
<a:updated>2016-04-22T13:07:42Z</a:updated>
<a:author>
<a:name/>
</a:author>
<a:link rel="edit" href="/denodo-odata.svc/movies/actor(1)"/>
<a:link rel="http://docs.oasis-open.org/odata/ns/related/actors" type="application/atom+xml;type=feed" title="actors" href="/denodo-odata.svc/movies/actor(1)/actors"/>
<a:category scheme="http://docs.oasis-open.org/odata/ns/scheme" term="#com.denodo.odata4.actor"/>
<a:content type="application/xml">
<m:properties>
<d:actor_id m:type="Int16">1</d:actor_id>
<d:first_name>PENELOPE</d:first_name>
<d:last_name>GUINESS</d:last_name>
<d:last_update m:type="DateTimeOffset">2006-02-15T11:34:33Z</d:last_update>
</m:properties>
</a:content>
</a:entry>
...
HTTP ヘッダー Accept
を使用して、以下のようにこの形式を要求することもできます。
Accept: application/atom+xml
$format
を指定すると、 Accept
ヘッダーで指定したどの値よりも、その指定が優先されます。