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

Tablestore:データの読み取り

最終更新日:Apr 11, 2026

Tablestore は、単一行のデータを読み取るための GetRow API、および複数行のデータを読み取るための BatchGetRow API と GetRange API を提供します。

説明

テーブルの基本単位は行であり、プライマリキー列と属性列で構成されます。プライマリキー列は必須であり、その名前と型はすべての行で同じでなければなりません。属性列はオプションであり、属性は行ごとに異なる場合があります。詳細については、「ワイドテーブルモデル」をご参照ください。

注意

自動採番主キー列を持つテーブルからデータを読み取る場合、自動インクリメント列の値を含む完全なプライマリキーを指定する必要があります。詳細については、「自動採番主キー列」をご参照ください。

重要

自動採番主キー列の値がわからない場合は、最初のプライマリキー列で範囲クエリを実行してデータを読み取ることができます。

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

GetRow 操作を呼び出して、単一行のデータを読み取ることができます。この操作は、完全なプライマリキーがわかっており、少数の行のみを読み取る必要がある場合に役立ちます。

単一行を読み取る際に、以下の条件を設定してデータをフィルタリングできます。

  • デフォルトでは、すべての列が返されます。特定の列のみを返すように操作を設定できます。

  • フィルターを使用して、特定のフィルター条件を満たす行を返します。詳細については、「フィルター」をご参照ください。

  • テーブルに複数のデータバージョンを設定している場合、読み取る最大バージョン数を指定できます。また、特定の時間範囲または特定のバージョン番号のデータを読み取ることもできます。データバージョンの詳細については、「データバージョンとライフサイクル」をご参照ください。

読み取り操作の結果は、次の 2 つのいずれかになります。

  • 行が存在する場合、操作はその行のプライマリキー列と属性列を返します。

  • 行が存在しない場合、結果にはその行は含まれず、エラーは報告されません。

データのバッチ読み取り

BatchGetRow 操作を呼び出して、1 つのリクエストで複数行を読み取ったり、複数のテーブルから同時にデータを読み取ったりすることができます。この操作は、完全なプライマリキーがわかっており、多くの行や複数のテーブルからデータを読み取る必要がある場合に役立ちます。

BatchGetRow 操作は、複数の GetRow サブオペレーションで構成されます。サブオペレーションの構築プロセスは、GetRow 操作と同じです。

データをバッチで読み取る際に、以下の条件を設定してデータをフィルタリングできます。

  • 1 つのリクエストで複数のテーブルからデータを読み取ります。

    1 つのリクエストで最大 100 行を読み取ることができます。

  • デフォルトでは、すべての列が返されます。特定の列のみを返すように操作を設定できます。

    バッチ読み取りのすべての行は、同じパラメーター条件を使用します。たとえば、ColumnsToGet=[colA] は、指定されたすべての行に対して colA 列のみが取得されることを意味します。

  • フィルターを使用して、特定のフィルター条件を満たす行を取得します。詳細については、「フィルター」をご参照ください。

  • テーブルに複数のデータバージョンを設定している場合、読み取る最大バージョン数を指定できます。また、特定の時間範囲または特定のバージョン番号のデータを読み取ることもできます。データバージョンの詳細については、「データバージョンとライフサイクル」をご参照ください。

BatchGetRow 操作のサブオペレーションは独立して実行され、Tablestore は各サブオペレーションの結果を返します。

範囲内のデータの読み取り

GetRange 操作を呼び出して、指定された範囲内のデータを読み取ることができます。この操作は、完全なプライマリキーの範囲またはキープレフィックスを特定できる場合に役立ちます。

説明

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

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

範囲内のデータを読み取る際に、以下の条件を設定してデータをフィルタリングできます。

  • キープレフィックスを指定し、他のプライマリキー列には仮想的な点である INF_MIN (無限小) と INF_MAX (無限大) を使用します。また、完全なプライマリキー範囲を指定してデータを読み取ることもできます。

    重要

    キープレフィックスを特定できない場合は、プライマリキー範囲全体を INF_MIN から INF_MAX に設定することで、全表スキャンを実行できます。この操作は大量の計算リソースを消費するため、注意して使用してください。

    範囲が大きい場合、スキャンされた行数またはデータ量が一定の制限を超えるとスキャンは停止します。操作は取得された行と次のプライマリキーに関する情報を返します。返された次のプライマリキー情報を使用して、別のリクエストを開始し、範囲内の残りの行を取得できます。

    • スキャンデータ量が 4 MB に達します。

    • スキャンされた行数が 5,000 に達した場合。

    • 返された行数が上限に達した場合。

    • 予約済みの読み取りスループットがすべて消費されたため、次の行のデータを読み取るための読み取りスループットが不足している場合。

  • 順方向または逆方向で指定された最大行数を読み取ります。たとえば、順方向で最大 5 行を読み取ることができます。

  • デフォルトでは、すべての列が返されます。特定の列のみを返すように操作を設定できます。

  • フィルターを使用して、特定のフィルター条件を満たす行を取得します。詳細については、「フィルター」をご参照ください。

    範囲読み取りのすべての行は、同じパラメーター条件を使用します。たとえば、ColumnsToGet=[colA] は、範囲内のすべての行に対して colA 列のみが取得されることを意味します。

  • テーブルに複数のデータバージョンを設定している場合、読み取る最大バージョン数を指定できます。また、特定の時間範囲または特定のバージョン番号のデータを読み取ることもできます。データバージョンの詳細については、「データバージョンとライフサイクル」をご参照ください。

GetRange を使用して大量のデータをスキャンする場合、Tablestore はリクエストごとに 1 回のスキャンのみを実行します。行数が 5,000 を超えるか、データサイズが 4 MB を超えるとスキャンは停止します。これらの制限を超えるデータは返されません。後続のデータを取得するには、ページネーションを使用する必要があります。

使用方法

コンソールの使用

コンソールを使用して、単一行のクエリまたは範囲内のデータのクエリを実行できます。

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

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

  3. インスタンス詳細タブの データテーブルリストセクションでテーブルを見つけ、操作列の クエリ/検索をクリックします。

  4. データ管理タブで、データのクエリをクリックします。次に、単一行を読み取るか、範囲内のデータを読み取るかを選択します。

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

    1. データのクエリダイアログボックスで、クエリ範囲単一行クエリに設定し、クエリするテーブルを選択します。

    2. デフォルトでは、すべての列が返されます。特定の属性列のみを返すには、すべての列を取得を無効にし、目的の属性列を入力します。

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

    3. 対象行の プライマリキー値を入力します。

      プライマリキー値の完全性と精度がクエリ結果に影響します。

    4. 最大バージョン数を入力して、返すバージョン数を指定します。

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

    範囲内のデータの読み取り

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

    2. デフォルトでは、すべての列が返されます。特定の属性列のみを返すには、すべての列を取得を無効にし、目的の属性列を入力します。

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

    3. 開始と終了のプライマリキー列を入力します。

    4. 重要
      • 範囲クエリは、まず最初のプライマリキー列を評価します。最初のプライマリキー列の値が同じ場合、システムは次に 2 番目のプライマリキー列を評価します。このルールは、後続のすべてのプライマリキー列に適用されます。

      • 読み取り範囲は左閉右開区間です。これは、範囲の開始は含まれ、範囲の終了は含まれないことを意味します。

    5. 最大バージョン数を入力して、返すバージョン数を指定します。

    6. クエリ結果のソート方向を設定します。順方向クエリまたは 逆方向クエリを選択できます。

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

コマンドラインインターフェイス (CLI) の使用

コマンドラインインターフェイス (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

SDK の使用

Java SDKGo SDKPython SDKNode.js SDK.NET SDK、または PHP SDK を使用してデータを読み取ることができます。このセクションでは、Java SDK を例として使用します。

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

データを読み取る際に、データバージョン、読み取る列、フィルター、正規表現フィルターを指定できます。

  • 最新バージョンのデータと特定の列を読み取る

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

    private static void getRow(SyncClient client, String pkValue) {
        // プライマリキーを構築します。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
    
        // テーブル名とプライマリキーを指定して、1 行のデータを読み取ります。
        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("Read complete. Result:");
        System.out.println(row);
    
        // 読み取る列を指定します。
        criteria.addColumnsToGet("Col0");
        getRowResponse = client.getRow(new GetRowRequest(criteria));
        row = getRowResponse.getRow();
    
        System.out.println("Read complete. Result:");
        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();
    
        // テーブル名とプライマリキーを指定して、1 行のデータを読み取ります。
        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("Read complete. Result:");
        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("Read complete. Result:");
        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("Whether all operations are successful:" + batchGetRowResponse.isAllSucceed());
    System.out.println("Read complete. Result:");
    for (BatchGetRowResponse.RowResult rowResult : batchGetRowResponse.getSucceedRows()) {
        System.out.println(rowResult.getRow());
    }
    if (!batchGetRowResponse.isAllSucceed()) {
        for (BatchGetRowResponse.RowResult rowResult : batchGetRowResponse.getFailedRows()) {
            System.out.println("Failed rows:" + batchGetRowRequest.getPrimaryKey(rowResult.getTableName(), rowResult.getIndex()));
            System.out.println("Cause of failures:" + 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 result:");
        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 result:");
        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 の詳細については、「インスタンス」および「読み取り/書き込みスループット」をご参照ください。

データの読み取りは読み取りキャパシティユニット (RCU) を消費しますが、書き込みキャパシティユニット (WCU) は消費しません。消費される RCU は次のように計算されます。

  • GetRow 操作によって消費される RCU

    消費される RCU の数は、読み取られたデータの合計サイズに基づきます。これは、プライマリキーのデータサイズと取得された属性列のデータサイズの合計です。この合計サイズを 4 KB で除算し、最も近い整数に切り上げます。指定された行が存在しない場合、操作は 1 RCU を消費します。

  • BatchGetRow 操作によって消費される RCU

    BatchGetRow 操作の RCU は、各 RowInBatchGetRowRequest を個別の GetRow 操作として扱うことで計算されます。

  • GetRange 操作によって消費される RCU

    消費される RCU の数は、スキャンされたすべてのデータの合計サイズに基づきます。これは、範囲内のすべての行のプライマリキーのデータサイズとスキャンされた属性列のデータサイズの合計です。この合計サイズを 4 KB で除算し、最も近い整数に切り上げます。たとえば、スキャンが 10 行をカバーし、各行のプライマリキーとスキャンされた属性列の合計サイズが 330 バイトの場合、合計データサイズは 3.3 KB (10 行 × 330 バイト) です。この操作は 1 RCU を消費します。