Tablestore SDK for Java は、オフライン処理のためにプライマリキー範囲に基づいて複数の行を読み取り、指定されたエンコーディングで結果をデータブロックとして返します。
前提条件
Tablestore SDK for Java をインストールし、クライアントを初期化します。
説明
プライマリキー範囲に基づいて、データテーブルから連続した行をスキャンします。レスポンスには、プライマリキーが開始キー以上かつ終了キー未満の行が含まれます。com.alicloud.openservices.tablestore.model.tunnel サブパッケージの BulkExportQueryCriteria を使用して、開始プライマリキーと終了プライマリキー、返される列、フィルター、およびデータブロックのエンコーディングタイプを設定します。レスポンスは、行データを ByteBuffer でエンコードされたバイトとして返します。これを一致するパーサーでデコードして行リストに変換します。DBT_PLAIN_BUFFER は PlainBufferBlockParser と、DBT_SIMPLE_ROW_MATRIX は SimpleRowMatrixBlockParser とペアになります。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.bulkExportQueryCriteria は BulkExportQueryCriteria タイプで、次のパラメーターが含まれています。
|
名前 |
タイプ |
説明 |
|
tableName (必須) |
String |
データテーブルの名前。 |
|
inclusiveStartPrimaryKey (必須) |
PrimaryKey |
スキャン範囲の開始プライマリキー。このキーを持つ行が存在する場合、その行はレスポンスに含まれます。 有効なプライマリキー、または |
|
exclusiveEndPrimaryKey (必須) |
PrimaryKey |
スキャン範囲の終了プライマリキー。このキーを持つ行は、存在するかどうかに関わらず、レスポンスには含まれません。 有効なプライマリキー、または |
|
columnsToGet (オプション) |
Set<String> |
返す列名のセット。設定しない場合、各行のすべての列が返されます。 設定した場合、レスポンスには各行の既存の列のみが含まれます。指定された列が 1 つも含まれない行は、レスポンスから除外されます。 |
|
filter (オプション) |
Filter |
列の選択後に適用されるサーバー側フィルター。 フィルターの設定方法については、「フィルターの使用」をご参照ください。 |
|
dataBlockType (オプション) |
DataBlockType |
レスポンスのデータブロックエンコーディング。有効な値: |
レスポンス
読み取り結果
BulkExportResponse には、次の操作固有のフィールドが含まれています。
|
名前 |
タイプ |
説明 |
|
rows |
ByteBuffer |
エンコードされた行データ。 |
|
nextStartPrimaryKey |
PrimaryKey |
次回の読み取りの開始プライマリキー。 |
|
dataBlockType |
DataBlockType |
返された行データのエンコーディング。 |
|
bodyBytes |
long |
レスポンスボディのバイト数。 |
例
指定範囲のページネーション
1 回の bulkExport 呼び出しでは、指定した範囲のデータが一度に返されないことがあります。指定した範囲内のすべてのデータを取得するには、各レスポンスの nextStartPrimaryKey を次の呼び出しの開始プライマリキーとして使用します。nextStartPrimaryKey が null になるまでこの処理を繰り返します。
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);