インデックス レイヤーからデータを取得します

現在 blob 、このサービスは REST API バージョン v1 およびをサポート v2しています。 v1 バージョン管理、インデックス作成、およびストリーム(ストリームペイロードが 1MB より大きい場合)の各レイヤーへのアクセスには、バージョンを使用する必要があります。 v2 オブジェクト ストア レイヤーにアクセスするには、バージョンを使用する必要があります。 正しい API バージョンの応答が返されるように、 API 検索から適切な API バージョンを常に選択してください。 手順については 、『 API Lookup 開発者ガイド』を参照してください。

インデックス レイヤー は、カタログのデータのインデックスです。 インデックス レイヤー に問い合わせて、クエリ条件を満たすデータのデータハンドルを取得し、それらのデータハンドルを使用して対応するデータを取得できます。 たとえば、インデックス レイヤー を使用すると、ストリーム レイヤー からデータをアーカイブしてクエリを実行できます。 詳細について は、「ストリーム データのアーカイブ」を参照してください。

インデックス付けされたデータを取得する一般的なフローは、次の手順で構成されています。

  1. 認可トークンを取得します。
  2. api-lookupv1 API を使用して API ベースの URL を取得します。
  3. indexv1 API を使用して、インデックスにクエリを実行し、クエリに一致するデータのデータハンドルを取得します。
  4. blobv1 API を使用して、対応するデータを取得します。

認可トークン を取得します

HTTP 要求の認可トークンを取得します。 手順について は、『 Identity & Access Management Guide 』を参照してください。

API ベースの URL を取得します

API 検索サービスを使用して、次の情報を取得します。

  • 照会するインデックス レイヤーが含まれているカタログのindexv1 API の API エンドポイント。
  • 取得するデータが含まれているカタログのblobv1 API の API エンドポイント。

手順については 、『 API Lookup 開発者ガイド』を参照してください。

データ ハンドル を入手してください

データを取得するには、クエリ条件を満たすデータのデータ ハンドルを取得する必要があります。 データ ハンドルを取得するに index は、 API ("query" リクエストパラメータ ) を使用します。

GET /<Base path for the index API from the API Lookup Service>/layers/<Layer ID>?query=<RSQL> HTTP/1.1
Host: <Hostname for the index API from the API Lookup Service>
Authorization: Bearer <Authorization Token>
Accept: application/json
Cache-Control: no-cache

以下の点に注意してください。

  • index API では、次の RSQL 演算子がサポートされています。 "==" 、 "!="" 、 ">" 、 ">="" 、 "<" 、 "<= " 、 " = in=", " = out=", " = inboundingbox=", " = incircle=" 、 "= inpolygon=" および "= incountry=" 。 RSQL の詳細については、 https://github.com/jirutka/rsql-parserを参照してください。 大文字の演算子は廃止されました。
  • 1 つのクエリには、 "=inpolygon=" 演算子と "=incircle=" 演算子の複数のオカレンスを含めることはできません。
  • "OR" 演算子が存在するクエリでは、 "=inpolygon=" 演算子および "=incircle=" 演算子は使用できません。
  • "=incountry=" 演算子を使用すると、 ISO 国コードで定義されている国の境界内のすべてのタイルをすばやく効率的に検索できます。 この演算子は、最大 1 つの国でクエリをサポートします。 複数の "=incount=" 演算子を結合して、 "and" または " または " 演算子を使用して複数の国でクエリを実行できます。1
  • 「 =in= 」演算子に続く要素のリストは、小さい値にする必要があります。 大きい一覧表を使用すると、予期しない動作が発生する可能性 たとえば、 URL の長さ制限に達すると、要求が失敗する可能性があります。
  • timestamptimewindow インデックス付けの属性は、同じクエリでは使用できません。
  • データがインデックス レイヤーに書き込まれてから、クエリーに使用できるようになるまでのバッファ時間は 2 秒です。

クエリのパフォーマンスに関するヒント

  • timewindow クエリでインデックス付け属性を使用します。
  • 短時間で結果を取得するに timewindow は、に基づくクエリを分割して、タイムウィンドウ範囲のデータを管理できるようにします (100,000 以下 ) 。
  • 追加の制約の使用を制限します。

応答を取得せ ずに長時間クエリを実行する場合は、 [ パーツクエリサポート ] オプションを使用できます。

RSQL クエリーの例 :

ingestionTime==1552381200000;tile=inboundingbox=(52.52,52.51,13.31,13.30)
ingestionTime==1552381200000;tile=incircle=(52.52,13.30,500)
ingestionTime==1552381200000;tile=inpolygon=(13.31,52.52,13.30,52.51,13.29,52.53)
ingestionTime==1552381200000;tile=incountry=DEU

heretile インデックス付け属性でのみ計算できる空間クエリの場合は、次のように引数を指定する必要があります。

inboundingbox=(northLatitude, southLatitude, eastLongitude, westLongitude)
incircle=(focusLatitude, focusLongitude, radiusInMeters)
inpolygon=(longitude1, latitude1, longitude2, latitude2, ...)
incountry=isoCountryCode

  • 要求行の最大長は 8k バイトです。
  • バウンディング ボックス関数のパラメータは、次のシーケンス ( 北、南、東、西 ) 、北 >= 南を使用する必要があります。
  • =incountry= 演算子によって返されるのは、ズームレベルが 6 ~ 14 のタイルのみです。
  • タイルに関連付けられている国コードは、挿入時にのみ正確であることが保証されます。 つまり、データの挿入後にタイルに関連する境界線が変更された場合、関連する国コードが遡及的に更新される保証はありません。
  • 国コードの細分性はズーム レベル 12 です。 つまり、国コードの関連付けはズームレベル 13 および 14 までサポートされていますが、ズーム レベル 13 および 14 のタイルに関連付けられている国コードはズーム レベル 12 のボーダーを反映しています。
  • 1。 = incountry= 演算子を使用してクエリする場合 、有効な ISO 3166-1 alpha-3 国コードのみがサポートされます。 たとえば、「 USA 」は米国 of America 、「 GBR 」はイギリスイギリス、北アイルランド、「 DEU 」はドイツなどです。 素晴らしいホテルです

このクエリは、インデックスメタデータの配列を含む次の応答を生成します。

{
  "data": [
    {
      "id": "e9e05a2b-25d1-415d-bc6a-14a1be626c9a",
      "size": 155,
      "checksum": "28271214-1532-4cb3-9cd7-35bef1735055",
      "metadata": "{}",
      "timestamp": 1552383033000,
      "ingestionTime": 1552381200000,
      "tile": 23618359
    }
  ]
}

上記の例で hour は、および tile はユーザー定義のインデックス属性です。 id フィールドはデータ ハンドルです。

メタデータフィールドは文字列として保存されるため、返される値は文字列で、ラップされません。

例 : timewindow 属性に対するクエリー

timewindow 、ポイントインタイムではなく、タイムスライスです。 このタイムスライスは duration 、インデックス レイヤーの作成時に属性のフィールドによって定義されます。 の値duration の範囲は、 10 分から 24 時間( 1440 分)です。

インデックス レイヤー timewindow に名前と ingestionTime 60 duration分の属性があるとします。

次のインデックスをアップロードします :

  • インデックス -1 、 ingestionTime1552383031000 はです( GMT では、 2019 年 3 月 12 日 09:30:31 AM )
  • インデックス -2 、 ingestionTime1552386633000 は( GMT では 2019 年 3 月 12 日 10 時 30 分 33 分)
  • インデックス -3 、 ingestionTime1552388398000 がです( GMT では、 2019 年 3 月 12 日 10:59:58 AM )

インデックス レイヤーで timewindow は、この duration フィールドで指定された精度で属性値が保存されるため、インデックスは次のように保存されます。

  • インデックス -1 、 ingestionTime1552381200000 : (GMT の場合、 2019 年 3 月 12 日 09:00:00 AM)
  • インデックス -2 、 ingestionTime1552384800000 はです( GMT では、 2019 年 3 月 12 日 10 時 00 分)
  • インデックス -3 、 ingestionTime 値が 1552384800000 です( GMT では、 2019 年 3 月 12 日 10 : 00 : 00 AM )

ingestionTime 属性は複数の方法で照会できます。 たとえば、 duration 特定の時間帯 ( フィールドに基づく ) を検索するには、次のようにします。

ingestionTime==1552381200000 #(Equal to March 12, 2019 09:00:00 AM)

上記のクエリでは、次の応答が生成されます (Index-1 が返されます ) 。

{
  "data": [
    {
      "id": "e9e05a2b-25d1-415d-bc6a-14a1be626c9a",
      "size": 155,
      "checksum": "28271214-1532-4cb3-9cd7-35bef1735055",
      "metadata": "{}",
      "timestamp": 1552383033000,
      "ingestionTime": 1552381200000,
      "tile": 23618359
    }
  ]
}

duration 時間範囲を使用して特定の時間スライス ( フィールドに基づく ) を検索するには :

ingestionTime>1552382100000;ingestionTime<1552385700000 #(Greater than March 12, 2019 9:15:00 AM AND Lesser than March 12, 2019 10:15:00 AM)

上記のクエリでは、次の応答が生成されます。

  • Index-1 15523830310001552382100000 は切り捨てられた値( 1552381200000 2019 年 3 月 12 日 9 時 30 分 31 分)でインデックス レイヤーに保存されるため、 Index-1 の値( 2019 年 3 月 12 日 9 時 30 分 31 分)が( 2019 年 3 月 12 日 9 時 00 分)より大きいインデックスは返されません。
  • Index-2 は切り捨てられた値1552384800000(2019 年 3 月 12 日 10 : 00 : 00 AM)でインデックス レイヤーに保存されるため、 Index-2 の値1552386633000(2019 年 3 月 12 日 10 : 30 : 33 AM)が1552385700000(2019 年 3 月 12 日 10 : 15 : 00 AM)より大きいインデックスがインデックス -2 に返されます。
  • Index-3 は切り捨てられた値15523848000001552388398000( 2019 年 3 月 12 日 10 : 59 : 58 AM )でインデックス レイヤーに保存されるため、 Index-3 より大きい値1552385700000( 2019 年 3 月 12 日 10 : 15 : 00 AM )のインデックス 3 が返されます。
{
  "data": [
    {
      "id": "c291c4c3-8603-472b-a828-63ab594146c4",
      "size": 132,
      "checksum": "a6feb574-50b6-4162-906d-ecbfedf8a248",
      "metadata": "{}",
      "timestamp": 1552386672000,
      "ingestionTime": 1552384800000,
      "tile": 23618359

    },
    {
      "id": "22bc518c-5797-4c77-a487-ce346dfd7ac5",
      "size": 289,
      "checksum": "e162582f-d21a-4742-a076-1beeae0d8b7b",
      "metadata": "{}",
      "timestamp": 1552388403000,
      "ingestionTime": 1552384800000,
      "tile": 23618359
    }
  ]
}

  • 上記の例で ingestionTime は、は唯一のユーザー定義のインデックス属性です。 の値 ingestionTimeduration 、インデックス レイヤーのフィールドで選択したタイムスライスに従って切り捨てられます。 id フィールドはデータ ハンドルです。 timestamp このフィールドは、データがインデックス レイヤーに挿入された時刻です。
  • 切り捨て前のingestionTime値と異なる可能性があるため、timestampフィールドに基づいてデータをクエリすることはお勧めしません。 例 : Index-3 の場合 (id: 22bc518c-5797-4c77-a487-ce346dfd7ac5 )、 ingestionTime 切り捨て前の値( 1552388398000 2019 年 3 月 12 日 10:59:58 AM )、 timestamp および値( 1552388403000 2019 年 3 月 12 日 11:00:03 AM )。
  • checksum および metadata フィールドでのクエリーは禁止されています。

データを取得します

インデックスメタデータがあるので、データ ハンドルを使用し blob て API を使用してデータを取得します。

GET /<Base path for the blob API from the API Lookup Service>/layers/<Layer ID>/data/<Data Handle> HTTP/1.1
Host: <Hostname for the blob API from the API Lookup Service>
Authorization: Bearer <Authorization Token>
Cache-Control: no-cache

応答は、指定されたデータ ハンドルに最近アップロードされたデータで構成されます。

HTTP 5xx エラーを処理するための再試行ロジックがアプリケーションに含まれていることを推奨します。 再試行ロジックで指数バックオフを使用します。

」に一致する結果は 件です

    」に一致する結果はありません