CData API Serverで作成したAPIで集計処理をしてみる

2020.07.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

データアナリティクス事業本部のkobayashiです。

REST API構築ツール CData API Server で作成したAPIでは単純にデータを取得するだけでなく集計したデータを取得する事もできます。 この集計機能とグルーピングを使ってAPIにリクエストを送りそのレスポンスを確認してみたいと思います。

CData API Serverのインストール方法やデータソースの設定方法は下記のエントリをご参照ください。

環境

  • Windows 10
  • CData API Server - 19.0.7362.0

また今回使用しているCData API Serverのホストとポートは以下になります。

192.168.7.129:8153

CData API Serverでの集計処理

$applyのパラメータを使うことで集計が可能になります。 $apply=aggregate(プロパティ with 集計関数 as エイリアス)の形で指定すればよく、複数の集計したいプロパティがある場合はカンマ区切りでつなげればそれぞれの値が取得できます。

集計関数としては以下のものが使えます。

関数名 意味
countdistinct ユニークなデータの数
sum 合計値
max 最大値
min 最小値
average 平均値

URL

Continentのユニーク数、Populationの合計、最大、最小、平均値を取得

http://192.168.7.129:8153/api.rsc/world_country?$apply=aggregate(Continent with countdistinct as cnt,Population with sum as valSum,Population with max as valMax,Population with min as valMin,Population with average as valAvg)

レスポンス

指定した集計値のレスポンスが取得できます

{
  "@odata.context": "http://192.168.7.129:8153/api.rsc/$metadata#world_country(cnt,valSum,valMax,valMin,valAvg)",
  "value": [
    {
      "cnt": 7,
      "valSum": 6078749450,
      "valMax": 1277558000,
      "valMin": 0,
      "valAvg": 25434098.1172,
      "@odata.id": null
    }
  ]
}

注意点

フィルタと同時に試したところフィルタの効果は効いていなかったのでフィルタをかけた値を集計するには

  1. $filterパラメータを使いレスポンスを絞り込む
  2. 返ってきたデータに対してクライアントサイドで集計する

といった処理が必要です。

CData API Serverでのグルーピング

$apply=groupby((プロパティ1,[プロパティ2,プロパティ3...]))の形で指定すればグループ化された値が取得できます。

URL

Continent x Regionのユニークな値

http://192.168.7.129:8153/api.rsc/world_country?$apply=groupby((Continent,Region))

レスポンス

{
  "@odata.context": "http://192.168.7.129:8153/api.rsc/$metadata#world_country(Continent,Region)",
  "value": [
    {
      "Continent": "Asia",
      "Region": "Eastern Asia",
      "@odata.id": null
    },
    {
      "Continent": "Asia",
      "Region": "Middle East",
      "@odata.id": null
    },
    {
      "Continent": "Asia",
      "Region": "Southeast Asia",
      "@odata.id": null
    },
...
  ]
}

CData API Serverでのグルーピングと集計関数

グルーピングした上で集計処理を行う場面は多々あると思います。そのような場合にもCData API Serverで作成したAPIでは簡単に集計が行なえます。

グループごとに集計した値を取得したい場合にはgroupby()の第2引数にaggregate()を指定することで値を取得できます。

URL

ContinentごとのCodeのユニーク数、Populationの合計、最大、最小、平均値を取得

http://192.168.7.129:8153/api.rsc/world_country?$apply=groupby((Continent),aggregate(Code with countdistinct as cnt,Population with sum as valSum,Population with max as valMax,Population with min as valMin,Population with average as valAvg))

レスポンス

{
  "@odata.context": "http://192.168.7.129:8153/api.rsc/$metadata#world_country(Continent,cnt,valSum,valMax,valMin,valAvg)",
  "value": [
    {
      "Continent": "Asia",
      "cnt": 51,
      "valSum": 3705025700,
      "valMax": 1277558000,
      "valMin": 286000,
      "valAvg": 72647562.7451,
      "@odata.id": null
    },
    {
      "Continent": "Europe",
      "cnt": 46,
      "valSum": 730074600,
      "valMax": 146934000,
      "valMin": 1000,
      "valAvg": 15871186.9565,
      "@odata.id": null
    },
    {
      "Continent": "North America",
      "cnt": 37,
      "valSum": 482993000,
      "valMax": 278357000,
      "valMin": 7000,
      "valAvg": 13053864.8649,
      "@odata.id": null
    },
...
   ]
}

まとめ

CData API ServerにGETリクエストを投げる際に集計関数、グルーピングを試してみました。データソース、リソースを指定するだけでAPIが作成できた上に簡単な集計値も取得できとても便利です。

最後まで読んで頂いてありがとうございました。