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

Tablestore:データの読み取り

最終更新日:Dec 28, 2024

Tablestoreは、データを読み取るための複数の操作を提供します。GetRow操作を呼び出して単一行のデータを読み取ったり、BatchGetRow操作を呼び出して一度に複数の行のデータを読み取ったり、GetRange操作を呼び出してプライマリキー値が指定された範囲内にあるデータを読み取ったりできます。

説明

行はテーブルの基本単位です。行は、プライマリキー列と属性列で構成されます。プライマリキー列は各行に必須です。テーブル内の行には、同じ名前とデータ型のプライマリキー列が含まれています。属性列は各行でオプションです。テーブル内の行には、異なる属性列を含めることができます。詳細については、概要を参照してください。

使用上の注意

自動インクリメントプライマリキー列を含むテーブルからデータを読み取る場合は、自動インクリメントプライマリキー列の値を含むすべてのプライマリキー列の値をクエリしたことを確認してください。詳細については、自動インクリメントプライマリキー列の構成を参照してください。

重要

自動インクリメントプライマリキー列に値が記録されていない場合は、GetRange操作を呼び出して、最初のプライマリキー列のプライマリキー値に基づいてデータを読み取る範囲を指定できます。

単一行のデータの読み取り

GetRow操作を呼び出して、単一行のデータを読み取ることができます。この方法は、テーブルのすべてのプライマリキー列を決定でき、読み取る行数が少ないシナリオに適用できます。

単一行のデータを読み取る場合は、次の方法を使用してビジネス要件に基づいてデータをフィルタリングできます。

  • 読み取る列を指定します。列を指定しない場合は、すべての列が返されます。

  • フィルタを使用して、フィルタ条件に一致するデータを取得します。詳細については、フィルタの構成を参照してください。

  • データテーブルで最大バージョン機能が有効になっている場合は、読み取るデータバージョンの最大数または時間範囲、または必要なバージョン番号を指定します。詳細については、データバージョンとTTLを参照してください。

GetRow操作を呼び出した後、次のいずれかの結果が返される場合があります。

  • 行が存在する場合、行のプライマリキー列と属性列が返されます。

  • 行が存在しない場合、行は返されず、エラーも報告されません。

一度に複数の行のデータを読み取る

BatchGetRow操作を呼び出して、1つ以上のテーブルから一度に複数の行のデータを読み取ることができます。この方法は、テーブルのすべてのプライマリキー列を決定でき、読み取る行数が多い場合、または複数のテーブルからデータを読み取るシナリオに適用できます。

BatchGetRow操作は、複数のGetRow操作で構成されます。BatchGetRow操作を呼び出す場合、各GetRow操作を構築するプロセスは、GetRow操作を呼び出す場合のGetRow操作を構築するプロセスと同じです。

一度に複数の行のデータを読み取る場合は、次の方法を使用してビジネス要件に基づいてデータをフィルタリングできます。

  • 複数のテーブルから一度にデータを読み取ります。

    BatchGetRow操作を呼び出して、一度に最大100行を読み取ることができます。

  • 読み取る列を指定します。列を指定しない場合は、すべての列が返されます。

    BatchGetRow操作では、すべての行に同じパラメータ設定が使用されます。たとえば、ColumnsToGetパラメータが[colA]に設定されている場合、colA列の値のみがすべての行から読み取られます。

  • フィルタを使用して、フィルタ条件に一致するデータを取得します。詳細については、フィルタの構成を参照してください。

  • データテーブルで最大バージョン機能が有効になっている場合は、読み取るデータバージョンの最大数または時間範囲、または必要なバージョン番号を指定します。詳細については、データバージョンとTTLを参照してください。

BatchGetRow操作を呼び出すと、各GetRow操作は個別に実行され、Tablestoreは各GetRow操作へのレスポンスを個別に返します。

プライマリキー値が指定された範囲内にあるデータを読み取る

GetRange操作を呼び出して、プライマリキー値が指定された範囲内にあるデータを読み取ることができます。この方法は、テーブルのすべてのプライマリキー列の範囲またはプライマリキー列のプレフィックスを決定できるシナリオに適用できます。

説明

Tablestoreテーブルでは、すべての行はプライマリキーでソートされます。テーブルのプライマリキーは、すべてのプライマリキー列で順番に構成されます。したがって、行は特定のプライマリキー列に基づいてソートされません。

GetRange操作は、左端一致の原則に従います。Tablestoreは、最初のプライマリキー列から最後のプライマリキー列まで順番に値を比較して、プライマリキー値が指定された範囲内にあるデータを読み取ります。たとえば、データテーブルのプライマリキーは、PK1、PK2、PK3というプライマリキー列で構成されています。データを読み取るとき、Tablestoreは最初に、行のPK1値が最初のプライマリキー列に指定された範囲内にあるかどうかを判断します。行のPK1値が範囲内にある場合、Tablestoreは、行の他のプライマリキー列の値が各プライマリキー列に指定された範囲内にあるかどうかの判断を停止し、行を返します。行のPK1値が範囲内にない場合、Tablestoreは、PK1と同じ方法で、行の他のプライマリキー列の値が各プライマリキー列に指定された範囲内にあるかどうかを判断し続けます。

プライマリキー値が指定された範囲内にあるデータを読み取る場合は、次の方法を使用してビジネス要件に基づいてデータをフィルタリングできます。

  • プライマリキー列のプレフィックスが指定されている場合は、データがINF_MIN型とINF_MAX型の仮想列を使用してプライマリキー列の範囲を指定するか、すべてのプライマリキー列の範囲を指定してデータを読み取ります。

    重要

    プライマリキー列のプレフィックスを決定できない場合は、データがINF_MIN型の開始プライマリキー列とデータがINF_MAX型の終了プライマリキー列を指定して、テーブルのすべてのプライマリキー列の範囲を決定できます。この操作はテーブル内のすべてのデータをスキャンしますが、大量の計算リソースを消費します。注意して進めてください。

    範囲が広く、スキャンされた行数またはスキャンされたデータの量が上限を超えると、スキャンは停止し、読み取られた行と次の行のプライマリキーに関する情報が返されます。前回の操作が中断したところから開始するリクエストを開始し、前回の操作によって返された次の行のプライマリキーに関する情報に基づいて残りの行を読み取ることができます。

    次のいずれかの条件が満たされると、GetRange操作が停止してデータが返される場合があります。

    • スキャンされたデータの量が4 MBに達する。

    • スキャンされた行数が5,000に達する。

    • 返される行数が上限に達する。

    • 予約済みの読み取りスループットがすべて消費されているため、読み取りスループットが次の行のデータを読み取るのに不十分である。

  • 前方または後方に返すことができる行の最大数を指定します。たとえば、前方には最大5行のデータが返されるように指定します。

  • 読み取る列を指定します。列を指定しない場合は、すべての列が返されます。

  • フィルタを使用して、フィルタ条件に一致するデータを取得します。詳細については、フィルタの構成を参照してください。

    GetRange操作では、すべての行に同じパラメータ設定が使用されます。たとえば、ColumnsToGetパラメータが[colA]に設定されている場合、colA列の値のみがすべての行から読み取られます。

  • データテーブルで最大バージョン機能が有効になっている場合は、読み取るデータバージョンの最大数または時間範囲、または必要なバージョン番号を指定します。詳細については、データバージョンとTTLを参照してください。

各GetRange呼び出しはデータを1回スキャンします。GetRange操作を呼び出してスキャンするデータのサイズが大きい場合、スキャンされた行数が5,000に達するか、スキャンされたデータのサイズが4 MBに達すると、スキャンは停止します。Tablestoreは、クエリ条件を満たす残りのデータを返しません。ページング方法を使用して、クエリ条件を満たす残りのデータを取得できます。

使用方法

Tablestoreコンソールを使用したデータの読み取り

Tablestoreコンソールを使用して、単一行のデータを読み取ったり、プライマリキー値が指定された範囲内にあるデータを読み取ったりできます。

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

  2. 概要ページで、管理するインスタンスを見つけて、アクション列のインスタンスの管理をクリックします。

  3. インスタンスの詳細タブのテーブルセクションで、データを読み取るデータテーブルを見つけて、アクション列のクエリをクリックします。

  4. データのクエリタブで、検索をクリックし、ビジネス要件に基づいて次の操作を実行します。

    単一行のデータの読み取り

    1. 検索ダイアログボックスで、モードパラメータを行の取得に設定し、データをクエリするテーブルを選択します。

    2. デフォルトでは、すべての列が返されます。読み取る属性列を指定する場合は、すべての列をオフにして、読み取る属性列の名前を入力します。

      複数の属性列はコンマ(,)で区切ります。

    3. クエリする行のプライマリキー値パラメータを構成します。

      プライマリキー値の整合性と精度は、クエリ結果に影響します。

    4. 最大バージョンパラメータを構成して、返すバージョンの最大数を指定します。

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

    プライマリキー値が指定された範囲内にあるデータを読み取る

    1. 検索ダイアログボックスで、モードパラメータを範囲検索に設定し、データをクエリするテーブルを選択します。

    2. デフォルトでは、すべての列が返されます。読み取る属性列を指定する場合は、すべての列をオフにして、読み取る属性列の名前を入力します。

      複数の属性列はコンマ(,)で区切ります。

    3. 開始プライマリキー列と終了プライマリキー列のパラメータを構成します。

    4. 説明
      • 範囲クエリモードを使用する場合、最初のプライマリキー列の値が優先されます。最初のプライマリキー列で開始プライマリキー列と終了プライマリキー列の値が同じ場合、システムは2番目のプライマリキー列の値を使用してクエリを実行します。後続のプライマリキー列のクエリ規則は、最初の2つのプライマリキー列のクエリ規則と同じです。

      • 範囲クエリでサポートされる範囲は、左開区間、右閉区間です。

    5. 最大バージョンパラメータを構成して、返すバージョンの最大数を指定します。

    6. シーケンスパラメータを前方検索または後方検索に設定します。

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

Tablestore CLIを使用したデータの読み取り

次のコマンドを実行して、Tablestore CLIを使用してデータを読み取ることができます。

  • getコマンドを実行して、単一行のデータを読み取ります。詳細については、データの操作トピックの「データの読み取り」セクションを参照してください。

    次のサンプルコードは、最初のプライマリキー列の値が86で、2番目のプライマリキー列の値が6771であるデータ行を読み取る方法の例を示しています。

    get --pk '["86",6771]'
  • scanコマンドを実行して、プライマリキー値が指定された範囲内にあるデータを読み取ります。詳細については、データの操作トピックの「データのエクスポート」セクションを参照してください。

    次のサンプルコードは、プライマリキー値が["86",7000]から["86",6770]の範囲内にあるデータを後方に読み取り、pid列のデータのみを返す方法の例を示しています。

    scan --begin '["86",7000]' --end '["86",6770]' --backward --columns pid

Tablestore SDKを使用したデータの読み取り

Tablestore SDK for JavaTablestore SDK for GoTablestore SDK for PythonTablestore SDK for Node.jsTablestore SDK for .NETTablestore SDK for PHPを使用してデータを読み取ることができます。この例では、Tablestore SDK for Javaを使用してデータを読み取ります。

単一行のデータの読み取り

データバージョンと読み取る列を指定し、フィルタまたは正規表現を使用してデータをフィルタリングできます。

  • 行の指定された列から最新バージョンのデータを読み取る

    次のサンプルコードは、データテーブルの行の指定された列から最新バージョンのデータを読み取る方法の例を示しています。

    private static void getRow(SyncClient client, String pkValue) {
        // プライマリキーを構築します。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
    
        // テーブル名とプライマリキーを指定して、データの行を読み取ります。
        SingleRowQueryCriteria criteria = new SingleRowQueryCriteria("<TABLE_NAME>", primaryKey);
        // MaxVersionsパラメータを1に設定して、最新バージョンのデータを読み取ります。
        criteria.setMaxVersions(1);
        GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
        Row row = getRowResponse.getRow();
    
        System.out.println("読み取り完了。結果:");
        System.out.println(row);
    
        // 読み取る列を指定します。
        criteria.addColumnsToGet("Col0");
        getRowResponse = client.getRow(new GetRowRequest(criteria));
        row = getRowResponse.getRow();
    
        System.out.println("読み取り完了。結果:");
        System.out.println(row);
    } 
  • フィルタを使用して、読み取られるデータをフィルタリングする

    次のサンプルコードは、データテーブルの行から最新バージョンのデータを読み取り、フィルタを使用してCol0列の値に基づいてデータをフィルタリングする方法の例を示しています。

    private static void getRow(SyncClient client, String pkValue) {
        // プライマリキーを構築します。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
    
        // テーブル名とプライマリキーを指定して、データの行を読み取ります。
        SingleRowQueryCriteria criteria = new SingleRowQueryCriteria("<TABLE_NAME>", primaryKey);
        // MaxVersionsパラメータを1に設定して、最新バージョンのデータを読み取ります。
        criteria.setMaxVersions(1);
    
        // Col0列の値が0である行を返すようにフィルタを構成します。
        SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("Col0",
                SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromLong(0));
        // Col0列が存在しない場合、行は返されません。
        singleColumnValueFilter.setPassIfMissing(false);
        criteria.setFilter(singleColumnValueFilter);
    
        GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
        Row row = getRowResponse.getRow();
    
        System.out.println("読み取り完了。結果:");
        System.out.println(row);
    }
  • 正規表現を使用して、読み取られるデータをフィルタリングする

    次のサンプルコードは、データテーブルの行からCol1列のデータを読み取り、正規表現を使用して列内のデータをフィルタリングする方法の例を示しています。

    private static void getRow(SyncClient client, String pkValue) {
        // データテーブルの名前を指定します。
        SingleRowQueryCriteria criteria = new SingleRowQueryCriteria("<TABLE_NAME>");
    
        // プライマリキーを構築します。
        PrimaryKey primaryKey = PrimaryKeyBuilder.createPrimaryKeyBuilder()
            .addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue))
            .build();
        criteria.setPrimaryKey(primaryKey);
    
        // MaxVersionsパラメータを1に設定して、最新バージョンのデータを読み取ります。
        criteria.setMaxVersions(1);
    
        // フィルタを構成します。cast<int>(regex(Col1))が100より大きい場合、行が返されます。
        RegexRule regexRule = new RegexRule("t1:([0-9]+),", RegexRule.CastType.VT_INTEGER);
        SingleColumnValueRegexFilter filter =  new SingleColumnValueRegexFilter("Col1",
            regexRule,SingleColumnValueRegexFilter.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100));
        criteria.setFilter(filter);
    
        GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
        Row row = getRowResponse.getRow();
    
        System.out.println("読み取り完了。結果:");
        System.out.println(row);
    }

一度に複数の行のデータを読み取る

次のサンプルコードは、バージョン条件、読み取る列、およびフィルタを構成して10行のデータを読み取る方法の例を示しています。

private static void batchGetRow(SyncClient client) {
    // データテーブルの名前を指定します。
    MultiRowQueryCriteria multiRowQueryCriteria = new MultiRowQueryCriteria("<TABLE_NAME>");
    // 読み取る10行を指定します。
    for (int i = 0; i < 10; i++) {
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("pk" + i));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
        multiRowQueryCriteria.addRow(primaryKey);
    }
    // 条件を追加します。
    multiRowQueryCriteria.setMaxVersions(1);
    multiRowQueryCriteria.addColumnsToGet("Col0");
    multiRowQueryCriteria.addColumnsToGet("Col1");
    SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("Col0",
            SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromLong(0));
    singleColumnValueFilter.setPassIfMissing(false);
    multiRowQueryCriteria.setFilter(singleColumnValueFilter);

    BatchGetRowRequest batchGetRowRequest = new BatchGetRowRequest();
    // BatchGetRowを使用すると、複数のテーブルからデータを読み取ることができます。各multiRowQueryCriteriaパラメータは、1つのテーブルのクエリ条件を指定します。複数のmultiRowQueryCriteriaパラメータを追加して、複数のテーブルからデータを読み取ることができます。
    batchGetRowRequest.addMultiRowQueryCriteria(multiRowQueryCriteria);

    BatchGetRowResponse batchGetRowResponse = client.batchGetRow(batchGetRowRequest);

    System.out.println("すべての操作が成功したかどうか:" + batchGetRowResponse.isAllSucceed());
    System.out.println("読み取り完了。結果:");
    for (BatchGetRowResponse.RowResult rowResult : batchGetRowResponse.getSucceedRows()) {
        System.out.println(rowResult.getRow());
    }
    if (!batchGetRowResponse.isAllSucceed()) {
        for (BatchGetRowResponse.RowResult rowResult : batchGetRowResponse.getFailedRows()) {
            System.out.println("失敗した行:" + batchGetRowRequest.getPrimaryKey(rowResult.getTableName(), rowResult.getIndex()));
            System.out.println("失敗の原因:" + rowResult.getError());
        }

        /**
         * createRequestForRetryメソッドを使用して、別のリクエストを構築して、失敗した行の操作を再試行できます。ここでは、再試行リクエストのみが構築されます。
         * Tablestore SDKのカスタム再試行ポリシーを再試行方法として使用することをお勧めします。この機能を使用すると、バッチ操作後に失敗した行を再試行できます。再試行ポリシーを設定した後、操作を呼び出すために再試行コードを追加する必要はありません。
         */
        BatchGetRowRequest retryRequest = batchGetRowRequest.createRequestForRetry(batchGetRowResponse.getFailedRows());
    }
}

プライマリキー値が指定された範囲内にあるデータを読み取る

  • プライマリキー値が指定された範囲内にあるデータを読み取る

    次のサンプルコードは、プライマリキー値が指定された範囲内にあるデータを前方方向に読み取る方法の例を示しています。レスポンスでnextStartPrimaryKeyパラメータの値が空の場合、プライマリキー値が指定された範囲内にあるすべてのデータが読み取られます。

    private static void getRange(SyncClient client, String startPkValue, String endPkValue) {
        // データテーブルの名前を指定します。
        RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria("<TABLE_NAME>");
    
        // 開始プライマリキーを指定します。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(startPkValue));
        rangeRowQueryCriteria.setInclusiveStartPrimaryKey(primaryKeyBuilder.build());
    
        // 終了プライマリキーを指定します。
        primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(endPkValue));
        rangeRowQueryCriteria.setExclusiveEndPrimaryKey(primaryKeyBuilder.build());
    
        rangeRowQueryCriteria.setMaxVersions(1);
    
        System.out.println("GetRangeの結果:");
        while (true) {
            GetRangeResponse getRangeResponse = client.getRange(new GetRangeRequest(rangeRowQueryCriteria));
            for (Row row : getRangeResponse.getRows()) {
                System.out.println(row);
            }
    
            // nextStartPrimaryKeyパラメータの値がnullでない場合は、読み取り操作を続行します。
            if (getRangeResponse.getNextStartPrimaryKey() != null) {
                rangeRowQueryCriteria.setInclusiveStartPrimaryKey(getRangeResponse.getNextStartPrimaryKey());
            } else {
                break;
            }
        }
    }         
  • 最初のプライマリキー列の値によって決定された範囲内のデータを読み取る

    次のサンプルコードは、最初のプライマリキー列の値によって決定された範囲内のデータを前方方向に読み取る方法の例を示しています。2番目のプライマリキー列の開始値はINF_MIN型です。2番目のプライマリキー列の終了値はINF_MAX型です。レスポンスでnextStartPrimaryKeyパラメータの値がnullの場合、指定された範囲内のすべてのデータが読み取られます。

    private static void getRange(SyncClient client, String startPkValue, String endPkValue) {
        // データテーブルの名前を指定します。
        RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria("<TABLE_NAME>");
        // 開始プライマリキーを指定します。この例では、2つのプライマリキー列が使用されます。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn("pk1", PrimaryKeyValue.fromString(startPkValue));// 最初のプライマリキー列の値を特定の値に設定します。
        primaryKeyBuilder.addPrimaryKeyColumn("pk2", PrimaryKeyValue.INF_MIN);// 2番目のプライマリキー列の値を無限に小さい値に設定します。
        rangeRowQueryCriteria.setInclusiveStartPrimaryKey(primaryKeyBuilder.build());
    
        // 終了プライマリキーを指定します。
        primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn("pk1", PrimaryKeyValue.fromString(endPkValue));// 最初のプライマリキー列の値を特定の値に設定します。
        primaryKeyBuilder.addPrimaryKeyColumn("pk2", PrimaryKeyValue.INF_MAX);// 2番目のプライマリキー列の値を無限に大きい値に設定します。
        rangeRowQueryCriteria.setExclusiveEndPrimaryKey(primaryKeyBuilder.build());
    
        rangeRowQueryCriteria.setMaxVersions(1);
    
        System.out.println("GetRangeの結果:");
        while (true) {
            GetRangeResponse getRangeResponse = client.getRange(new GetRangeRequest(rangeRowQueryCriteria));
            for (Row row : getRangeResponse.getRows()) {
                System.out.println(row);
            }
    
            // nextStartPrimaryKeyパラメータの値がnullでない場合は、読み取り操作を続行します。
            if (getRangeResponse.getNextStartPrimaryKey() != null) {
                rangeRowQueryCriteria.setInclusiveStartPrimaryKey(getRangeResponse.getNextStartPrimaryKey());
            } else {
                break;
            }
        }
    }    
  • プライマリキー値が指定された範囲内にあるデータを読み取り、正規表現を使用して指定された列のデータをフィルタリングする

    次のサンプルコードは、プライマリキー値が["pk:2020-01-01.log", "pk:2021-01-01.log")の範囲内にあるデータをCol1列から読み取り、正規表現を使用してCol1列のデータをフィルタリングする方法の例を示しています。

    private static void getRange(SyncClient client) {
        // データテーブルの名前を指定します。
        RangeRowQueryCriteria criteria = new RangeRowQueryCriteria("<TABLE_NAME>");
    
        // 読み取るデータのプライマリキーの範囲として["pk:2020-01-01.log", "pk:2021-01-01.log"]を指定します。範囲は左閉区間、右開区間です。
        PrimaryKey pk0 = PrimaryKeyBuilder.createPrimaryKeyBuilder()
            .addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("2020-01-01.log"))
            .build();
        PrimaryKey pk1 = PrimaryKeyBuilder.createPrimaryKeyBuilder()
            .addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("2021-01-01.log"))
            .build();
        criteria.setInclusiveStartPrimaryKey(pk0);
        criteria.setExclusiveEndPrimaryKey(pk1);
    
        // MaxVersionsパラメータを1に設定して、最新バージョンのデータを読み取ります。
        criteria.setMaxVersions(1);
    
        // フィルタを構成します。cast<int>(regex(Col1))が100より大きい場合、行が返されます。
        RegexRule regexRule = new RegexRule("t1:([0-9]+),", RegexRule.CastType.VT_INTEGER);
        SingleColumnValueRegexFilter filter =  new SingleColumnValueRegexFilter("Col1",
            regexRule,SingleColumnValueRegexFilter.CompareOperator.GREATER_THAN,ColumnValue.fromLong(100));
        criteria.setFilter(filter);
    
        while (true) {
            GetRangeResponse resp = client.getRange(new GetRangeRequest(criteria));
            for (Row row : resp.getRows()) {
                // 何かをする
                System.out.println(row);
            }
            if (resp.getNextStartPrimaryKey() != null) {
                criteria.setInclusiveStartPrimaryKey(resp.getNextStartPrimaryKey());
            } else {
                break;
            }
       }
    }

課金

操作で消費されるキャパシティユニット(CU)数に基づいて課金されます。消費されるCUには、インスタンスタイプに基づいて、従量課金読み取りおよび書き込みCUとリザーブド読み取りおよび書き込みCUが含まれる場合があります。

説明

インスタンスタイプとCUの詳細については、インスタンス読み取りおよび書き込みスループットを参照してください。

読み取り操作では書き込みCUは消費されません。消費される読み取りCUの数は、呼び出す操作によって異なります。

  • GetRow操作で消費される読み取りCU

    消費される読み取りCUの数は、次の式の計算結果から切り上げられます。消費される読み取りCUの数 = (行のすべてのプライマリキー列のデータサイズ + 実際に読み取られた属性列のデータサイズ)/4 KB。指定された行が存在しない場合、操作によって1つの読み取りCUが消費されます。

  • BatchGetRow操作で消費される読み取りCU

    各RowInBatchGetRowRequest操作は、1つのGetRow操作と見なされます。BatchGetRow操作で消費される読み取りCUの数は、BatchGetRow操作を構成するすべてのGetRow操作で消費される読み取りCUの合計数に等しくなります。

  • GetRange操作で消費される読み取りCU

    GetRange操作で消費される読み取りCUの数は、範囲の開始点から未読の次の行の開始点まで計算されます。GetRange操作で消費される読み取りCUの数は、次の式の計算結果から切り上げられます。消費される読み取りCUの数 = (クエリ条件を満たす行のすべてのプライマリキー列のデータサイズ + 実際に読み取られた属性列のデータサイズ)/4 KB。たとえば、クエリ条件を満たす10行が読み取られ、行のすべてのプライマリキー列のデータサイズと実際に読み取られた属性列のデータサイズの合計が330バイトの場合、消費される読み取りCUの数は、次の式の計算結果から切り上げられます。消費される読み取りCUの数 = (3.3 KB/4 KB)。この場合、GetRange操作は1つの読み取りCUを消費します。