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

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

最終更新日:Aug 06, 2026

Tablestore SDK for Java は、オフライン処理のためにプライマリキー範囲に基づいて複数の行を読み取り、指定されたエンコーディングで結果をデータブロックとして返します。

前提条件

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

説明

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

public BulkExportResponse bulkExport(BulkExportRequest bulkExportRequest) throws TableStoreException, ClientException

次の例では、1 回の呼び出しで bulk_export_demo テーブルからプライマリキー範囲 [row00, row99) を読み取ります。この例では 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));

パラメーター

リクエスト設定

BulkExportRequest には、次のパラメーターが含まれています。

名前

タイプ

説明

bulkExportQueryCriteria (必須)

BulkExportQueryCriteria

範囲読み取りの基準。

範囲読み取りの基準

BulkExportRequest.bulkExportQueryCriteriaBulkExportQueryCriteria タイプで、次のパラメーターが含まれています。

名前

タイプ

説明

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)。エンコーディングは、結果のデコードに使用するパーサーと一致する必要があります。

レスポンス

読み取り結果

BulkExportResponse には、次の操作固有のフィールドが含まれています。

名前

タイプ

説明

rows

ByteBuffer

エンコードされた行データ。dataBlockType に一致するパーサーを使用して行をデコードします。

nextStartPrimaryKey

PrimaryKey

次回の読み取りの開始プライマリキー。null は、指定された範囲のすべてのデータが返されたことを示します。

dataBlockType

DataBlockType

返された行データのエンコーディング。

bodyBytes

long

レスポンスボディのバイト数。

指定範囲のページネーション

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);