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

Tablestore:オフラインデータのバルクエクスポート

最終更新日:Jul 10, 2026

Tablestore SDK for Java の bulkExport API を使用して、データテーブル内の連続した行範囲をスキャンします。1 回の呼び出しで、プライマリキー範囲 (左閉右開) に基づいて複数行を返し、指定したカラム、サーバー側フィルター、データブロックのエンコーディングをサポートします。ページネーションと組み合わせることで、テーブル全体をスキャンできます。

前提条件

Tablestore SDK for Java をインストールし、クライアントを初期化します。

機能の説明

public BulkExportResponse bulkExport(BulkExportRequest bulkExportRequest) throws TableStoreException, ClientException

プライマリキー範囲に基づいて、データテーブルから連続した行をスキャンします。レスポンスには、開始キー以上かつ終了キー未満のプライマリキーを持つ行が含まれます。BulkExportQueryCriteria (com.alicloud.openservices.tablestore.model.tunnel サブパッケージ) を使用して、開始および終了のプライマリキー、返すカラム、フィルター、データブロックのエンコードタイプを設定します。レスポンスは行データを ByteBuffer でエンコードされたバイト列として返します。対応するパーサーでデコードして行リストに変換します。DBT_PLAIN_BUFFER には PlainBufferBlockParser を、DBT_SIMPLE_ROW_MATRIX には SimpleRowMatrixBlockParser を使用します。getNextStartPrimaryKey()null でない場合は、まだ行が残っています。そのキーからスキャンを継続します。

次の例では、bulk_export_demo テーブルから、プライマリキー範囲 [row00, row99) で 1 回の呼び出しで読み取ります。DBT_PLAIN_BUFFER エンコーディングを使用し、対応するパーサーで結果をデコードします。

String tableName = "bulk_export_demo";

// 開始プライマリキー (含む)
PrimaryKey startPk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
        .addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row00"))
        .build();
// 終了プライマリキー (含まない)
PrimaryKey endPk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
        .addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row99"))
        .build();

// BulkExportQueryCriteria は model.tunnel サブパッケージにあります
BulkExportQueryCriteria criteria = new BulkExportQueryCriteria(tableName);
criteria.setInclusiveStartPrimaryKey(startPk);
criteria.setExclusiveEndPrimaryKey(endPk);
criteria.setDataBlockType(DataBlockType.DBT_PLAIN_BUFFER);
criteria.addColumnsToGet("pk");
criteria.addColumnsToGet("col1");

BulkExportRequest request = new BulkExportRequest(criteria);
BulkExportResponse response = client.bulkExport(request);

// response.getRows() は ByteBuffer を返します。対応するパーサーを使用して List にパースします
// DBT_PLAIN_BUFFER       -> PlainBufferBlockParser
// DBT_SIMPLE_ROW_MATRIX  -> SimpleRowMatrixBlockParser
PlainBufferBlockParser parser = new PlainBufferBlockParser(response.getRows());
List<Row> rows = parser.getRows();
System.out.println("Rows returned: " + rows.size());
for (Row row : rows) {
    System.out.println(row);
}

// nextStartPrimaryKey が null でない場合は、まだデータが残っているためページネーションを継続する必要があります
System.out.println("Has next: " + (response.getNextStartPrimaryKey() != null));

主要パラメータ

  • tableName (必須):データテーブルの名前です。

  • inclusiveStartPrimaryKey / exclusiveEndPrimaryKey (必須):スキャン範囲の開始および終了のプライマリキーです。左閉右開です。

  • dataBlockType (任意):レスポンスのデータブロックのエンコーディングです。結果のデコードに使用するパーサーと一致させる必要があります。

  • columnsToGet / filter (任意):返すカラムとサーバー側フィルター条件です。

パラメータ

名前

タイプ

説明

tableName (必須)

String

データテーブルの名前です。

inclusiveStartPrimaryKey (必須)

PrimaryKey

スキャン範囲の開始プライマリキーです。このキーを持つ行が存在する場合、その行はレスポンスに含まれます。

有効なプライマリキー、または INF_MININF_MAX から構築した仮想ポイントを指定できます。仮想ポイントは、テーブルのプライマリキーと同じカラム数である必要があります。INF_MIN は負の無限大を示し、すべてのカラム型の任意の値より小さいものとして比較されます。INF_MAX は正の無限大を示し、すべてのカラム型の任意の値より大きいものとして比較されます。

exclusiveEndPrimaryKey (必須)

PrimaryKey

スキャン範囲の終了プライマリキーです。このキーを持つ行は、存在するかどうかに関係なく、レスポンスに含まれません。

有効なプライマリキー、または INF_MININF_MAX から構築した仮想ポイントを指定できます。仮想ポイントは、テーブルのプライマリキーと同じカラム数である必要があります。

columnsToGet (任意)

Set<String>

返すカラム名のセットです。指定しない場合、各行のすべてのカラムが返されます。

指定した場合、レスポンスには各行に存在する指定したカラムのみが含まれます。行に指定したカラムが 1 つも存在しない場合、その行はレスポンスから除外されます。

filter (任意)

Filter

カラム選択の後に適用されるサーバー側フィルターです。columnsToGetfilter の両方を指定した場合、サーバーはまず columnsToGet で指定されたカラムを取得し、その結果に filter を適用します。

dataBlockType (任意)

DataBlockType

レスポンスのデータブロックのエンコーディングです。有効な値: DBT_PLAIN_BUFFER または DBT_SIMPLE_ROW_MATRIX (API のデフォルト: DBT_SIMPLE_ROW_MATRIX) 。エンコーディングは、結果のデコードに使用するパーサーと一致させる必要があります。

シナリオ例

nextStartPrimaryKey を使用したテーブル全体のページネーション

1 回の bulkExport 呼び出しでは、範囲の一部しか返されないことがよくあります。テーブル全体をスキャンするには、各レスポンスの nextStartPrimaryKey を次の呼び出しの開始プライマリキーとして渡します。nextStartPrimaryKeynull になったら停止します。

String tableName = "bulk_export_demo";

PrimaryKey startPk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
        .addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row00"))
        .build();
PrimaryKey endPk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
        .addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row99"))
        .build();

int totalRows = 0;
while (startPk != null) {
    BulkExportQueryCriteria criteria = new BulkExportQueryCriteria(tableName);
    criteria.setInclusiveStartPrimaryKey(startPk);
    criteria.setExclusiveEndPrimaryKey(endPk);
    criteria.setDataBlockType(DataBlockType.DBT_PLAIN_BUFFER);

    BulkExportResponse response = client.bulkExport(new BulkExportRequest(criteria));

    PlainBufferBlockParser parser = new PlainBufferBlockParser(response.getRows());
    List<Row> rows = parser.getRows();
    totalRows += rows.size();

    // nextStartPrimaryKey が null の場合、すべてのデータを読み取り済みです
    startPk = response.getNextStartPrimaryKey();
}
System.out.println("Total rows scanned: " + totalRows);