Todos los productos
Search
Centro de documentos

Tablestore:Exportación masiva de datos sin conexión

Última actualización: Sep 03, 2026

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 INF_MIN y INF_MAX. Un punto virtual debe tener el mismo número de columnas que la clave principal de la tabla. INF_MIN representa infinito negativo y se compara como menor que cualquier valor de cualquier tipo de columna; INF_MAX representa infinito positivo y se compara como mayor que cualquier valor de cualquier tipo de columna.

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 INF_MIN y INF_MAX. Un punto virtual debe tener el mismo número de columnas que la clave principal de la tabla.

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 columnsToGet como filter, el servidor primero recupera las columnas indicadas en columnsToGet y luego aplica filter al resultado.

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: DBT_PLAIN_BUFFER o DBT_SIMPLE_ROW_MATRIX (valor predeterminado de la API: DBT_SIMPLE_ROW_MATRIX). La codificación debe coincidir con el analizador utilizado para decodificar el resultado.

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 dataBlockType para decodificar las filas.

nextStartPrimaryKey

PrimaryKey

La clave principal inicial para la siguiente lectura. Un valor null indica que se han devuelto todos los datos del rango especificado.

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