すべてのプロダクト
Search
ドキュメントセンター

Tablestore:範囲クエリ

最終更新日:Dec 28, 2024

範囲クエリを使用すると、矩形の地理的エリアをクエリ条件として指定できます。Tablestoreは、指定されたフィールドの値が矩形の地理的エリア内にある行を返します。

API操作

GeoBoundingBoxQuery にクエリタイプを設定して Search または ParallelScan 操作で範囲クエリを実行できます。

パラメーター

パラメーター

説明

fieldName

クエリ対象の列の名前。このパラメーターの値はGEOPOINTデータ型です。

topLeft

矩形の地理的エリアの左上隅の座標ペア。

bottomRight

矩形の地理的エリアの右下隅の座標ペア。矩形の地理的エリアは、左上隅と右下隅を使用して指定できます。

形式は latitude,longitude です。緯度の有効な値: [-90,+90]。経度の有効な値: [-180,+180]。例: 35.8,-45.91

query

検索インデックスのクエリステートメント。このパラメーターをGeoBoundingBoxQueryに設定します。

getTotalCount

クエリ条件を満たす行の総数を返すかどうかを指定します。このパラメーターのデフォルト値はfalseで、クエリ条件を満たす行の総数は返されません。

このパラメーターをtrueに設定すると、クエリのパフォーマンスが低下します。

tableName

データテーブルの名前。

indexName

検索インデックスの名前。

columnsToGet

クエリ条件を満たす各行のすべての列を返すかどうかを指定します。このパラメーターには、returnAllフィールドとcolumnsフィールドを指定できます。

returnAllフィールドのデフォルト値はfalseで、すべての列が返されるわけではないことを指定します。この場合、columnsフィールドを使用して、返したい列を指定できます。返したい列を指定しない場合は、主キー列のみが返されます。

returnAllフィールドをtrueに設定すると、すべての列が返されます。

方法

Tablestoreコンソール、Tablestore CLI、およびTablestore SDKを使用して、範囲クエリを実行できます。範囲クエリを実行する前に、次の前提条件が満たされていることを確認してください。

Tablestoreコンソールの使用

  1. インデックスタブに移動します。

    1. Tablestoreコンソールにログオンします。

    2. 上部のナビゲーションバーで、リソースグループとリージョンを選択します。

    3. 概要ページで、管理するインスタンスの名前をクリックするか、インスタンスのアクション列のインスタンスの管理をクリックします。

    4. インスタンスの詳細タブのテーブルタブで、データテーブルの名前をクリックするか、データテーブルのアクション列のインデックスをクリックします。

  2. インデックスタブで、データのクエリに使用する検索インデックスを見つけ、アクション列のデータの管理をクリックします。

  3. 検索ダイアログボックスで、クエリパラメーターを構成します。

    1. デフォルトでは、システムはすべての属性列を返します。特定の属性列を返すには、すべての列をオフにして、返す属性列を指定します。複数の属性列はコンマ(,)で区切ります。

      説明

      デフォルトでは、システムはデータテーブルのすべての主キー列を返します。

    2. ビジネス要件に基づいて、AndOr、またはNot論理演算子を選択します。

      And論理演算子を選択すると、クエリ条件を満たすデータが返されます。Or演算子を選択して単一のクエリ条件を指定すると、クエリ条件を満たすデータが返されます。Or論理演算子を選択して複数のクエリ条件を指定すると、いずれかのクエリ条件を満たすデータが返されます。Not論理演算子を選択すると、クエリ条件を満たさないデータが返されます。

    3. GEOPOINTデータ型のインデックスフィールドを選択し、追加をクリックします。

    4. インデックスフィールドのクエリタイプをGeoBoundingBoxQueryに設定し、矩形の地理的エリアの左上隅の座標ペアと右下隅の座標ペアを入力して選択します。

    5. デフォルトでは、並べ替え機能は無効になっています。クエリ結果を特定のフィールドに基づいて並べ替える場合は、並べ替えをオンにして、クエリ結果を並べ替えるフィールドと並べ替え順序を指定します。

    6. デフォルトでは、集計機能は無効になっています。特定のフィールドの統計を収集する場合は、統計を収集をオンにして、統計を収集するフィールドを指定し、統計を収集するために必要な情報を構成します。

  4. OKをクリックします。

    クエリ条件を満たすデータが、インデックスタブに指定された順序で表示されます。

Tablestore CLIの使用

Tablestore CLIを使用してsearchコマンドを実行し、検索インデックスを使用してデータをクエリできます。詳細については、検索インデックスを参照してください。

  1. searchコマンドを実行して、search_index検索インデックスを使用してデータをクエリし、クエリ条件を満たす各行のすべてのインデックス付き列を返します。

    search -n search_index --return_all_indexed
  2. 次のサンプルコードは、システムのプロンプトに従ってクエリ条件を入力する方法を示しています。

    {
        "Offset": -1,
        "Limit": 10,
        "Collapse": null,
        "Sort": null,
        "GetTotalCount": true,
        "Token": null,
        "Query": {
            "Name": "GeoBoundingBoxQuery",
            "Query": {
                "FieldName": "col_geopoint", // クエリ対象の列名を指定します。
                "TopLeft": "10,0",        // 矩形地理領域の左上隅の座標を指定します。
                "BottomRight": "0,10"     // 矩形地理領域の右下隅の座標を指定します。
            }
        }
    }

Tablestore SDKの使用

Tablestore SDK for JavaTablestore SDK for GoTablestore SDK for PythonTablestore SDK for Node.jsTablestore SDK for .NET、およびTablestore SDK for PHPを使用して、範囲クエリを実行できます。次の例では、Tablestore SDK for Javaを使用して、範囲クエリを実行する方法について説明します。

次のサンプルコードは、"10,0"の左上隅と"0,10"の右下隅で定義された矩形の地理的エリア内にCol_GeoPoint列の値が収まる行をクエリする方法の例を示しています。

public static void geoBoundingBoxQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();
    GeoBoundingBoxQuery geoBoundingBoxQuery = new GeoBoundingBoxQuery(); // GeoBoundingBoxQueryを使用します。
    geoBoundingBoxQuery.setFieldName("Col_GeoPoint"); // クエリ対象の列名を指定します。
    geoBoundingBoxQuery.setTopLeft("10,0"); // 矩形地理領域の左上隅の座標を指定します。
    geoBoundingBoxQuery.setBottomRight("0,10"); // 矩形地理領域の右下隅の座標を指定します。
    searchQuery.setQuery(geoBoundingBoxQuery);
    //searchQuery.setGetTotalCount(true); // GetTotalCountパラメーターをtrueに設定して、クエリ条件を満たす行の総数を返します。

    SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
    // columnsToGetパラメーターを使用して、返す列を指定するか、すべての列を返すように指定できます。このパラメーターを指定しない場合は、主キー列のみが返されます。
    //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
    //columnsToGet.setReturnAll(true); // すべての列を返すように指定します。
    //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // 返す列を指定します。
    //searchRequest.setColumnsToGet(columnsToGet);

    SearchResponse resp = client.search(searchRequest);
    //System.out.println("TotalCount: " + resp.getTotalCount()); // 返される行数ではなく、クエリ条件を満たす行の総数を表示します。
    System.out.println("Row: " + resp.getRows());
}

課金ルール

検索インデックスを使用してデータをクエリする場合、消費された読み取りスループットに対して課金されます。詳細については、検索インデックスの課金対象項目を参照してください。

FAQ

参考資料