El Tablestore SDK for Java lee varias filas por rango de clave principal para su procesamiento sin conexión y devuelve el resultado como un bloque de datos en la codificación especificada.
Requisitos previos
Instale Tablestore SDK for Java e inicialice el cliente.
Descripción
Escanea filas contiguas de una tabla de datos por rango de clave principal. La respuesta incluye las filas cuyas claves principales son mayores o iguales que la clave inicial y menores que la clave final. Use BulkExportQueryCriteria (en el subpaquete com.alicloud.openservices.tablestore.model.tunnel) para establecer las claves principales inicial y final, las columnas a devolver, el filtro y el tipo de codificación del bloque de datos. La respuesta devuelve los datos de las filas como bytes codificados en ByteBuffer que usted decodifica en una lista de filas con el analizador correspondiente: DBT_PLAIN_BUFFER se usa con PlainBufferBlockParser, y DBT_SIMPLE_ROW_MATRIX se usa con SimpleRowMatrixBlockParser. Si getNextStartPrimaryKey() devuelve un valor distinto de null, aún quedan más filas; continúe el escaneo desde esa clave.
public BulkExportResponse bulkExport(BulkExportRequest bulkExportRequest) throws TableStoreException, ClientException
A continuación, el ejemplo lee de la tabla bulk_export_demo sobre el rango de clave principal [row00, row99) en una sola llamada. Usa la codificación DBT_PLAIN_BUFFER y decodifica el resultado con el analizador correspondiente.
String tableName = "bulk_export_demo";
// Start primary key (inclusive)
PrimaryKey startPk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row00"))
.build();
// End primary key (exclusive)
PrimaryKey endPk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row99"))
.build();
// BulkExportQueryCriteria is located in the model.tunnel subpackage
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() returns a ByteBuffer; parse it into List<Row> using the corresponding parser
// 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);
}
// A non-null nextStartPrimaryKey indicates that more data remains and pagination must continue
System.out.println("Has next: " + (response.getNextStartPrimaryKey() != null));
Parámetros
Configuración de la solicitud
BulkExportRequest contiene el siguiente parámetro.
|
Nombre |
Tipo |
Descripción |
|
bulkExportQueryCriteria (obligatorio) |
BulkExportQueryCriteria |
Los criterios de lectura por rango. |
Criterios de lectura por rango
BulkExportRequest.bulkExportQueryCriteria es de tipo BulkExportQueryCriteria y contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
tableName (obligatorio) |
String |
El nombre de la tabla de datos. |
|
inclusiveStartPrimaryKey (obligatorio) |
PrimaryKey |
La clave principal inicial del rango de escaneo. Si existe una fila con esta clave, se incluye en la respuesta. Acepta una clave principal válida o un punto virtual construido con |
|
exclusiveEndPrimaryKey (obligatorio) |
PrimaryKey |
La clave principal final del rango de escaneo. La fila con esta clave nunca se incluye en la respuesta, exista o no. Acepta una clave principal válida o un punto virtual construido con |
|
columnsToGet (opcional) |
Set<String> |
El conjunto de nombres de columnas a devolver. Si no se establece, se devuelven todas las columnas de cada fila. Cuando se establece, la respuesta incluye solo las columnas existentes de cada fila. Si una fila no contiene ninguna de las columnas especificadas, la respuesta excluye dicha fila. |
|
filter (opcional) |
Filter |
Un filtro del lado del servidor que se aplica después de la selección de columnas. Si especifica tanto Para obtener información sobre cómo configurar el filtro, consulte Use filters. |
|
dataBlockType (opcional) |
DataBlockType |
La codificación del bloque de datos de la respuesta. Valores válidos: |
Respuesta
Resultado de la lectura
BulkExportResponse contiene los siguientes campos específicos de la operación.
|
Nombre |
Tipo |
Descripción |
|
rows |
ByteBuffer |
Los datos de filas codificados. Use el analizador que corresponda a |
|
nextStartPrimaryKey |
PrimaryKey |
La clave principal inicial para la siguiente lectura. Un valor |
|
dataBlockType |
DataBlockType |
La codificación de los datos de filas devueltos. |
|
bodyBytes |
long |
El número de bytes en el cuerpo de la respuesta. |
Ejemplos
Paginar a través de una tabla completa
Una sola llamada a bulkExport suele devolver solo una parte del rango. Para escanear toda la tabla, pase el valor nextStartPrimaryKey de cada respuesta como la clave principal inicial de la siguiente llamada. Detenga el proceso cuando nextStartPrimaryKey sea 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();
// A null nextStartPrimaryKey indicates that all data has been read
startPk = response.getNextStartPrimaryKey();
}
System.out.println("Total rows scanned: " + totalRows);