インデックス レイヤーからデータを取得します
注
現在 blob
、このサービスは REST API バージョン v1
およびをサポート v2
しています。 v1
バージョン管理、インデックス作成、およびストリーム(ストリームペイロードが 1MB より大きい場合)の各レイヤーへのアクセスには、バージョンを使用する必要があります。 v2
オブジェクト ストア レイヤーにアクセスするには、バージョンを使用する必要があります。 正しい API バージョンの応答が返されるように、 API 検索から適切な API バージョンを常に選択してください。 手順については 、『 API Lookup 開発者ガイド』を参照してください。
インデックス レイヤー は、カタログのデータのインデックスです。 インデックス レイヤー に問い合わせて、クエリ条件を満たすデータのデータハンドルを取得し、それらのデータハンドルを使用して対応するデータを取得できます。 たとえば、インデックス レイヤー を使用すると、ストリーム レイヤー からデータをアーカイブしてクエリを実行できます。 詳細について は、「ストリーム データのアーカイブ」を参照してください。
インデックス付けされたデータを取得する一般的なフローは、次の手順で構成されています。
- 認可トークンを取得します。
api-lookup
v1
API を使用して API ベースの URL を取得します。 index
v1
API を使用して、インデックスにクエリを実行し、クエリに一致するデータのデータハンドルを取得します。 blob
v1
API を使用して、対応するデータを取得します。
認可トークン を取得します
HTTP 要求の認可トークンを取得します。 手順について は、『 Identity & Access Management Guide 』を参照してください。
API ベースの URL を取得します
API 検索サービスを使用して、次の情報を取得します。
- 照会するインデックス レイヤーが含まれているカタログの
index
v1
API の API エンドポイント。 - 取得するデータが含まれているカタログの
blob
v1
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 の長さ制限に達すると、要求が失敗する可能性があります。
timestamp
と timewindow
インデックス付けの属性は、同じクエリでは使用できません。 - データがインデックス レイヤーに書き込まれてから、クエリーに使用できるようになるまでのバッファ時間は 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 、
ingestionTime
値 1552383031000 はです( GMT では、 2019 年 3 月 12 日 09:30:31 AM ) - インデックス -2 、
ingestionTime
値 1552386633000 は( GMT では 2019 年 3 月 12 日 10 時 30 分 33 分) - インデックス -3 、
ingestionTime
値 1552388398000 がです( GMT では、 2019 年 3 月 12 日 10:59:58 AM )
インデックス レイヤーで timewindow
は、この duration
フィールドで指定された精度で属性値が保存されるため、インデックスは次のように保存されます。
- インデックス -1 、
ingestionTime
値 1552381200000 : (GMT の場合、 2019 年 3 月 12 日 09:00:00 AM) - インデックス -2 、
ingestionTime
値 1552384800000 はです( GMT では、 2019 年 3 月 12 日 10 時 00 分) - インデックス -3 、
ingestionTime
値が 1552384800000 です( GMT では、 2019 年 3 月 12 日 10 : 00 : 00 AM )
ingestionTime
属性は複数の方法で照会できます。 たとえば、 duration
特定の時間帯 ( フィールドに基づく ) を検索するには、次のようにします。
ingestionTime==1552381200000
上記のクエリでは、次の応答が生成されます (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
上記のクエリでは、次の応答が生成されます。
- 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
は、は唯一のユーザー定義のインデックス属性です。 の値 ingestionTime
は duration
、インデックス レイヤーのフィールドで選択したタイムスライスに従って切り捨てられます。 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 エラーを処理するための再試行ロジックがアプリケーションに含まれていることを推奨します。 再試行ロジックで指数バックオフを使用します。