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

Tablestore:範囲クエリ

最終更新日:Dec 28, 2024

指定した範囲内のデータをクエリするために、範囲クエリを実行できます。クエリ対象のフィールドのタイプが TEXT の場合、フィールド値はトークン化されます。行内のトークンの少なくとも 1 つがクエリ範囲と一致する場合、その行はクエリ条件を満たします。

API 操作

Search または ParallelScan 操作を呼び出し、クエリタイプを RangeQuery に設定することで、範囲クエリを実行できます。

パラメータ

パラメータ

説明

fieldName

一致させるフィールドの名前。

from

クエリを開始する値。

範囲条件を指定する場合、greaterThan を使用してより大きい (>) 記号を指定し、greaterThanOrEqual を使用して以上 (≥) 記号を指定できます。

to

クエリを終了する値。

範囲条件を指定する場合、lessThan を使用してより小さい (<) 記号を指定し、lessThanOrEqual を使用して以下 (≤) 記号を指定できます。

includeLower

レスポンスに from パラメータの値を含めるかどうかを指定します。タイプ: BOOLEAN。

includeUpper

レスポンスに to パラメータの値を含めるかどうかを指定します。タイプ: BOOLEAN。

query

クエリのタイプ。query パラメータを RangeQuery に設定します。

sort

ソート方法。詳細については、ソートとページングの実行 を参照してください。

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. フィールドを選択し、追加 をクリックします。

    4. [クエリタイプ] パラメータを RangeQuery(RangeQuery) に設定し、クエリする範囲を指定します。

      範囲は左閉右開区間です。ビジネス要件に基づいて範囲を指定します。

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

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

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

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

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": "RangeQuery",
            "Query": {
                "FieldName": "col_long",
                "From": 1,
                "To": 100,
                "IncludeLower": true,
                "IncludeUpper": false
            }
        }
    }

Tablestore SDK の使用

次の 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 を使用します。

private static void rangeQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();
    RangeQuery rangeQuery = new RangeQuery(); // クエリタイプを RangeQuery に設定します。
    
    /**
     * 例 1: Col_Long 列の値が 3 より大きい行をクエリします。
     */
    rangeQuery.setFieldName("Col_Long");
    rangeQuery.greaterThan(ColumnValue.fromLong(3));
    
    /**
     * //例 2: Col_Date_String 列の値が 2020-01-01 10:55:12 以上 2021-03-03 08:20:50 未満の行をクエリします。
     * //Col_Date_String 列のタイプは、データテーブルでは String、データテーブルがマッピングされている検索インデックスでは Date です。検索インデックスの Col_Date_String 列の値は yyyy-MM-dd HH:mm:ss 形式です。
     * rangeQuery.setFieldName("Col_Date_String");
     * rangeQuery.greaterThanOrEqual(ColumnValue.fromString("2020-01-01 10:55:12"));
     * rangeQuery.lessThan(ColumnValue.fromString("2021-03-03 08:20:50"));
     */
     
    /**
     * //例 3: Col_Date_Long 列の値が 1731036722 より大きい行をクエリします。
     * //Col_Date_Long 列のタイプは、データテーブルでは Integer、データテーブルがマッピングされている検索インデックスでは Date です。検索インデックスの Col_Date_Long 列の値は秒単位のタイムスタンプです。
     * rangeQuery.setFieldName("Col_Date_Long");
     * rangeQuery.greaterThan(ColumnValue.fromLong(1731036722));
     */
     
    searchQuery.setQuery(rangeQuery);
    searchQuery.setGetTotalCount(true); // クエリ条件を満たす行の総数を返すように指定します。
    SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
    //columnsToGet パラメータを構成して、特定の列またはすべての列を返すように指定します。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

参考資料

[TranslationFinished]