Lastpoint インデックスに多次元インデックスを追加すると、最新の時系列データに対して多次元フィルター、ジオクエリ、集約を実行できます。これらのクエリは、Lastpoint インデックス単独では実行不可能です。
Lastpoint インデックスで検索インデックスを使用する理由
Lastpoint インデックスは、各時系列の最新のデータポイントのみを格納します。たとえば、車のインターネット (IoV) シナリオでは、Lastpoint インデックスには車両ごとに 1 行のデータが含まれます。これには、最後に報告された GPS 座標、速度、ステータス、走行距離などが含まれます。
次の表は、車両フリートの Lastpoint インデックスのサンプルデータを示しています:
|
_#h |
_m_name |
_data_source |
_tags |
_time |
gps |
speed |
status |
total_mileage |
remaining_mileage |
|
4c#PlatformA#07 |
Platform A |
sensor1 |
["region=hangzhou","car_model=sedan","number_plate=ZheA D7512*","color=white"] |
1730423400000000 |
30.245853,120.178564 |
0 |
Idle |
20000 |
450 |
|
25#PlatformA#ae |
Platform A |
sensor2 |
["region=hangzhou","car_model=suv","number_plate=ZheC 72B2*","color=black"] |
1730779800000000 |
30.245853,120.213654 |
80 |
Active |
15050 |
250 |
|
b2#PlatformB#4b |
Platform B |
sensor3 |
["region=hangzhou","car_model=sedan","number_plate=ZheB 121*9","color=blue"] |
1730862600000000 |
30.246022,120.124460 |
0 |
Idle |
18230 |
270 |
多次元インデックスがない場合、プライマリキー (_#h) でしか行を取得できません。「現在アイドル状態で、残りの走行可能距離が 300 km を超える車両はどれか」といった問いに答えるには、すべての行をスキャンし、アプリケーション層でフィルター処理を行う必要がありますが、これは大規模になると処理が遅く、コストも高くなります。
Lastpoint インデックス上に構築された検索インデックスは、転置インデックスと列のストアをサポートし、以下を可能にします。
プライマリキー以外のクエリ — 車両のステータスや残りの走行可能距離など、任意の属性列でフィルター処理
ブール値、あいまい、全文検索クエリ — AND、OR、NOT 演算子で条件を組み合わせる
ジオクエリ — 指定した地理的エリア内のレコードを検索
k-最近傍 (KNN) ベクトルクエリ — ベクトルフィールドでの類似検索
-
集約 — 最新のデータポイント全体で、最大値、最小値、カウント、グループごとの統計を計算
説明このトピックでは、検索インデックスを使用して Lastpoint インデックスを取得するサンプルシナリオを説明します。 詳細については、「付録: サンプルシナリオ」をご参照ください。 検索インデックスの特徴と機能の詳細については、「検索インデックス」をご参照ください。
前提条件
開始する前に、時系列テーブルに対して Lastpoint インデックスが作成されていることを確認してください。詳細については、「LastPoint インデックスの作成」をご参照ください。
検索インデックスの管理とデータのクエリ
[時系列テーブルの管理]ページの [LastPoint Index] セクションで、検索インデックスを管理し、データをクエリします。
検索インデックスの作成
-
[インスタンス管理] ページに移動します。
Tablestore コンソールにログインします。
上部のナビゲーションバーで、リソースグループとリージョンを選択します。
[概要] ページで、インスタンス名をクリックするか、[操作] 列の [インスタンスの管理] をクリックします。
-
[時系列テーブルの管理] ページに移動します。
[インスタンス管理] ページで、[時系列テーブル] タブをクリックします。
[時系列テーブル] タブで、時系列テーブル名をクリックするか、[操作] 列の [データの管理] をクリックします。
-
Lastpoint インデックスの検索インデックスを作成します。
[基本情報] タブの [LastPoint インデックス] セクションで、Lastpoint インデックスの [検索インデックス] 列にある [検索インデックスの作成] をクリックします。
-
[検索インデックスの作成] ダイアログボックスで、検索インデックスのパラメーターを設定します。
この例では、テーブル名は demo_lastpoint、インデックス名は demo_lastpoint_search_index です。自動生成されるフィールドは次のとおりです:
_#h(String)_m_name(String)_data_source(String)cpu_sys(Double)cpu_usage(Double)_time(Long)
デフォルトのインデックス名をそのまま使用するか、要件に応じて名前を入力します。
-
スキーマの生成方法を選択します。
重要[フィールド名] と [フィールドタイプ] の値は、Lastpoint インデックスのフィールド名と型に一致する必要があります。Lastpoint インデックスと多次元インデックスのフィールドタイプのマッピングについては、「データ型」をご参照ください。
[スキーマ生成タイプ] を [手動] に設定した場合は、フィールド名を入力し、フィールドタイプを選択して、[配列] を有効にするかどうかを指定します。
[スキーマ生成タイプ] を [自動生成] に設定した場合、システムは Lastpoint インデックスのフィールドをインデックスフィールドとして使用します。要件に応じて、フィールドタイプを選択し、[配列] を有効にするかどうかを指定します。
説明仮想カラムを使用すると、テーブルスキーマを変更することなく、テーブルのカラムを多次元インデックス内の 1 つ以上の仮想カラムにマッピングできます。仮想カラムを使用して、クエリを高速化したり、異なる形態素解析メソッドを適用したりします。詳細については、「仮想カラム」をご参照ください。
-
生存時間 (TTL)、ルーティングキー、事前ソートの設定を行うには、[詳細設定] をオンにします。次の表に、パラメーターを示します。
パラメーター
説明
ルーティングキー
データ分散を制御するために使用されるルートフィールドです。1 つ以上のプライマリキー列を選択します。同じルートフィールド値を持つレコードは、同じデータパーティションに配置されます。ほとんどの場合、1 つのルートフィールドで十分です。複数のフィールドを指定した場合、それらの値が連結されてパーティションキーが形成されます。
生存時間
検索インデックス内のデータの保存期間。単位: 秒。デフォルト値: -1 (データは無期限)。
TTL は 86,400 秒 (1 日) 以上、または -1 である必要があります。Tablestore は、TTL を超えたデータを自動的に削除します。
事前ソート
返されるデータのデフォルトのソート順です。有効な値:[デフォルト] (プライマリキーでソート) および [カスタム] (指定したフィールドでソート)。
重要Nested フィールドを含む多次元インデックスは、事前ソートをサポートしていません。
[OK] をクリックします。
多次元インデックスを使用したデータのクエリ
[基本情報] タブの [LastPoint インデックス] セクションで、Lastpoint インデックスの [検索インデックス] 列にある [データの管理] をクリックします。
-
[検索] ダイアログボックスで、データをクエリします。
-
デフォルトでは、システムはすべての列を返します。特定の属性列を返すには、[返される列] パラメーターの [すべての列] をオフにし、目的の属性列を入力します。複数の列はカンマ (,) で区切ります。
説明Lastpoint インデックスのすべてのプライマリキー列は常に返されます。
-
論理演算子を選択します: [And]、[Or]、または [Not]。
[And] はすべての条件を満たす行を返します。[Or] は、単一の条件の場合はその条件を満たす行を返し、複数の条件の場合は [Or] は少なくとも 1 つの条件を満たす行を返します。[Not] は指定された条件を満たさない行を返します。
-
インデックスフィールドを選択し、[追加] をクリックして、[クエリタイプ] と [値] パラメーターを設定します。
説明1 つのフィールドに複数の値を指定するには、同じフィールドに対して再度 [追加] をクリックし、異なる [値] を設定します。
デフォルトではソートは無効になっています。特定フィールドで結果をソートするには、[ソート] をオンにし、ソートフィールドを追加して、ソート順を設定します。
デフォルトでは統計収集は無効になっています。フィールドの統計を収集するには、[統計の収集] をオンにし、フィールドを追加して、統計設定を行います。
-
[はい] をクリックします。
クエリ結果と統計は、[基本情報] タブの [LastPoint Index] セクションに表示されます。
-
検索インデックスの管理
次の表では、検索インデックスに対して実行できる操作について説明します。
|
操作 |
説明 |
|
検索インデックスの詳細表示 |
検索インデックスの基本情報、測定情報、ルーティングキー、インデックスフィールド、事前ソートの詳細を表示します。
|
|
検索インデックスの削除 |
不要になった検索インデックスを削除します。
|
SDK 統合
Lastpoint インデックスで多次元インデックスを操作するには、次の Tablestore SDK を使用します:
課金
Lastpoint インデックスの作成は無料です。Lastpoint インデックスデータのストレージと読み取り操作は課金対象です。詳細については、「時系列モデルの課金項目」をご参照ください。
検索インデックスを介して Lastpoint インデックスにクエリを実行すると、検索インデックス料金が発生します。 詳細については、「検索インデックスの課金項目」をご参照ください。
よくある質問
「ルートフィールドの使用方法」をご参照ください。
付録:サンプルシナリオ
車のインターネット (IoV) シナリオでは、車両センサーが時系列データをクラウドに報告します。アプリケーションは、車両ステータスのモニタリング、フリートの位置特定、軌跡表示などのユースケースのために、このデータを格納、クエリ、分析します。
次の表は、時系列テーブルのサンプルデータを示しています。
この例では、_m_name、_data_source、_tags は、それぞれメジャー名、データソース、タグ情報を指定する時系列識別子です。_time はデータ報告のタイムスタンプです。gps、speed、status、total_mileage、remaining_mileage は、それぞれ GPS 座標、速度、車両ステータス、総走行距離、残走行可能距離を指定する時系列データフィールドです。
|
_m_name |
_data_source |
_tags |
_time |
gps |
speed |
status |
total_mileage |
remaining_mileage |
|
Platform A |
sensor1 |
["region=hangzhou","car_model=sedan","number_plate=ZheA D7512*","color=white"] |
1730422800000000 |
30.245853,120.178564 |
0 |
Idle |
20000 |
450 |
|
Platform A |
sensor1 |
["region=hangzhou","car_model=sedan","number_plate=ZheA D7512*","color=white"] |
1730423400000000 |
30.245853,120.178564 |
0 |
Idle |
20000 |
450 |
|
Platform A |
sensor2 |
["region=hangzhou","car_model=suv","number_plate=ZheC 72B2*","color=black"] |
1730779200000000 |
30.245278,120.150269 |
50 |
Active |
15000 |
300 |
|
Platform A |
sensor2 |
["region=hangzhou","car_model=suv","number_plate=ZheC 72B2*","color=black"] |
1730779800000000 |
30.245853,120.213654 |
80 |
Active |
15050 |
250 |
|
Platform B |
sensor3 |
["region=hangzhou","car_model=sedan","number_plate=ZheB 121*9","color=blue"] |
1730862000000000 |
30.246013,120.124470 |
60 |
Active |
18200 |
300 |
|
Platform B |
sensor3 |
["region=hangzhou","car_model=sedan","number_plate=ZheB 121*9","color=blue"] |
1730862600000000 |
30.246022,120.124460 |
0 |
Idle |
18230 |
270 |
Tablestore は、各時系列の最新のデータポイントを Lastpoint インデックスに自動的に同期します。結果として得られる Lastpoint インデックスのデータは、前のセクションの表に示されています。
以下のクエリ要件を考慮して、Lastpoint インデックスに多次元インデックスを作成し、その完全なクエリ機能を使用します。
現在アイドル状態で、残りの走行可能距離が 300 km を超える車両を検索します。
指定された地理的エリア内の車両を検索します。
現在アクティブな車両の最高速度を検索します。
次のフィールドを持つ多次元インデックスを作成します:
gps、speed、status、remaining_mileage。多次元インデックスを使用してデータをクエリします。次の表は、各要件とその実装方法を示しています。
|
クエリ要件 |
実装 |
|
現在アイドル状態で、残りの走行可能距離が 300 km を超える車両を検索 |
|
|
指定された地理的エリア内の車両を検索 |
|
|
現在アクティブな車両の最高速度を検索 |
|