Todos os produtos
Search
Central de documentação

Tablestore:Bulk export offline data

Última atualização: Jul 09, 2026

Varra intervalos contíguos de linhas em uma tabela de dados com bulkExport no Tablestore SDK for Java. Uma única chamada retorna várias linhas por intervalo de chave primária (inclusivo à esquerda, exclusivo à direita) e oferece suporte a colunas selecionadas, filtros no servidor e codificações de bloco de dados. Combine esse recurso com paginação para varrer uma tabela inteira.

Pré-requisitos

Instale o Tablestore SDK for Java e inicialize o cliente.

Descrição do recurso

public BulkExportResponse bulkExport(BulkExportRequest bulkExportRequest) throws TableStoreException, ClientException

Esse método varre linhas contíguas de uma tabela de dados por intervalo de chave primária. A resposta inclui linhas cujas chaves primárias são maiores ou iguais à chave inicial e menores que a chave final. Use BulkExportQueryCriteria (no subpacote com.alicloud.openservices.tablestore.model.tunnel) para definir as chaves primárias inicial e final, as colunas a retornar, o filtro e o tipo de codificação do bloco de dados. A resposta retorna os dados das linhas como bytes codificados em ByteBuffer. Decodifique-os em uma lista de linhas com o parser correspondente: DBT_PLAIN_BUFFER usa PlainBufferBlockParser; DBT_SIMPLE_ROW_MATRIX usa SimpleRowMatrixBlockParser. Se getNextStartPrimaryKey() retornar um valor diferente de null, ainda há mais linhas. Continue a varredura a partir dessa chave.

O exemplo a seguir lê da tabela bulk_export_demo no intervalo de chave primária [row00, row99) em uma única chamada. Ele usa a codificação DBT_PLAIN_BUFFER e decodifica o resultado com o parser correspondente.

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 principais:

  • tableName (obrigatório): nome da tabela de dados.

  • inclusiveStartPrimaryKey / exclusiveEndPrimaryKey (obrigatório): chaves primárias inicial e final do intervalo de varredura (inclusiva e exclusiva, respectivamente).

  • dataBlockType (opcional): codificação do bloco de dados da resposta. Deve corresponder ao parser usado para decodificar o resultado.

  • columnsToGet / filter (opcional): colunas a retornar e condição de filtro no servidor.

Parâmetros

Nome

Tipo

Descrição

tableName (obrigatório)

String

Nome da tabela de dados.

inclusiveStartPrimaryKey (obrigatório)

PrimaryKey

Chave primária inicial do intervalo de varredura. Se existir uma linha com essa chave, ela será incluída na resposta.

Aceita uma chave primária válida ou um ponto virtual construído com INF_MIN e INF_MAX. Um ponto virtual deve ter o mesmo número de colunas da chave primária da tabela. INF_MIN representa infinito negativo e é menor que qualquer valor de qualquer tipo de coluna. INF_MAX representa infinito positivo e é maior que qualquer valor de qualquer tipo de coluna.

exclusiveEndPrimaryKey (obrigatório)

PrimaryKey

Chave primária final do intervalo de varredura. A linha com essa chave nunca é incluída na resposta, independentemente de sua existência.

Aceita uma chave primária válida ou um ponto virtual construído com INF_MIN e INF_MAX. Um ponto virtual deve ter o mesmo número de colunas da chave primária da tabela.

columnsToGet (opcional)

Set<String>

Conjunto de nomes de colunas a retornar. Se não definido, todas as colunas de cada linha serão retornadas.

Quando definido, a resposta inclui apenas as colunas existentes de cada linha. Se uma linha não contiver nenhuma das colunas especificadas, a resposta exclui essa linha.

filter (opcional)

Filter

Filtro no servidor aplicado após a seleção de colunas. Se você especificar columnsToGet e filter, o servidor primeiro recupera as colunas listadas em columnsToGet e depois aplica filter ao resultado.

dataBlockType (opcional)

DataBlockType

Codificação do bloco de dados da resposta. Valores válidos: DBT_PLAIN_BUFFER ou DBT_SIMPLE_ROW_MATRIX (padrão da API: DBT_SIMPLE_ROW_MATRIX). A codificação deve corresponder ao parser usado para decodificar o resultado.

Exemplos de cenários

Paginar a tabela inteira com nextStartPrimaryKey

Uma única chamada de bulkExport geralmente retorna apenas parte do intervalo. Para varrer a tabela inteira, passe o nextStartPrimaryKey de cada resposta como chave primária inicial da próxima chamada. Interrompa quando nextStartPrimaryKey for 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);