データに対するクエリの実行: 基本

ここでは、各タイプのエレメントにクエリを実行する手順について説明します。

コレクションに対するクエリの実行

以下の 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 つの方法でデータを表現できます。

  1. Atom (XML)。

  2. 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.nextLinkodata.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&amp;$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 ヘッダーで指定したどの値よりも、その指定が優先されます。