Tous les produits
Search
Centre de documentation

Tablestore:Bulk export offline data

Dernière mise à jour :Aug 18, 2026

Le SDK Tablestore pour Java lit plusieurs lignes selon une plage de clés primaires pour un traitement hors ligne et renvoie le résultat sous forme de bloc de données dans l'encodage spécifié.

Prérequis

Installez le SDK Tablestore pour Java et initialisez le client.

Description

Cette opération analyse les lignes contiguës d'une table de données selon une plage de clés primaires. La réponse inclut les lignes dont les clés primaires sont supérieures ou égales à la clé de début et strictement inférieures à la clé de fin. Utilisez BulkExportQueryCriteria (dans le sous-package com.alicloud.openservices.tablestore.model.tunnel) pour définir les clés primaires de début et de fin, les colonnes à renvoyer, le filtre ainsi que le type d'encodage du bloc de données. La réponse renvoie les données des lignes sous forme d'octets encodés en ByteBuffer. Décodez-les en liste de lignes à l'aide de l'analyseur correspondant : DBT_PLAIN_BUFFER s'utilise avec PlainBufferBlockParser, tandis que DBT_SIMPLE_ROW_MATRIX s'utilise avec SimpleRowMatrixBlockParser. Si getNextStartPrimaryKey() renvoie une valeur non null, il reste des lignes à traiter ; poursuivez l'analyse à partir de cette clé.

public BulkExportResponse bulkExport(BulkExportRequest bulkExportRequest) throws TableStoreException, ClientException

L'exemple suivant lit les données de la table bulk_export_demo sur la plage de clés primaires [row00, row99) en un seul appel. Il utilise l'encodage DBT_PLAIN_BUFFER et décode le résultat avec l'analyseur approprié.

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

Paramètres

Configuration de la requête

L'objet BulkExportRequest contient le paramètre suivant.

Nom

Type

Description

bulkExportQueryCriteria (obligatoire)

BulkExportQueryCriteria

Les critères de lecture par plage.

Critères de lecture par plage

Le champ BulkExportRequest.bulkExportQueryCriteria est de type BulkExportQueryCriteria et contient les paramètres suivants.

Nom

Type

Description

tableName (obligatoire)

String

Le nom de la table de données.

inclusiveStartPrimaryKey (obligatoire)

PrimaryKey

La clé primaire de début de la plage d'analyse. Si une ligne possède cette clé, elle est incluse dans la réponse.

Accepte une clé primaire valide ou un point virtuel construit à partir de INF_MIN et INF_MAX. Un point virtuel doit comporter le même nombre de colonnes que la clé primaire de la table. INF_MIN représente l'infini négatif et est considéré comme inférieur à toute valeur de tout type de colonne ; INF_MAX représente l'infini positif et est considéré comme supérieur à toute valeur de tout type de colonne.

exclusiveEndPrimaryKey (obligatoire)

PrimaryKey

La clé primaire de fin de la plage d'analyse. La ligne associée à cette clé n'est jamais incluse dans la réponse, qu'elle existe ou non.

Accepte une clé primaire valide ou un point virtuel construit à partir de INF_MIN et INF_MAX. Un point virtuel doit comporter le même nombre de colonnes que la clé primaire de la table.

columnsToGet (facultatif)

Set<String>

L'ensemble des noms de colonnes à renvoyer. Si ce paramètre n'est pas défini, toutes les colonnes de chaque ligne sont renvoyées.

Lorsqu'il est défini, la réponse inclut uniquement les colonnes existantes de chaque ligne. Si une ligne ne contient aucune des colonnes spécifiées, elle est exclue de la réponse.

filter (facultatif)

Filter

Un filtre côté serveur appliqué après la sélection des colonnes. Si vous spécifiez à la fois columnsToGet et filter, le serveur récupère d'abord les colonnes indiquées dans columnsToGet, puis applique filter au résultat.

Pour plus d'informations sur la configuration du filtre, consultez la rubrique Utilisation des filtres.

dataBlockType (facultatif)

DataBlockType

L'encodage du bloc de données de la réponse. Valeurs valides : DBT_PLAIN_BUFFER ou DBT_SIMPLE_ROW_MATRIX (valeur par défaut de l'API : DBT_SIMPLE_ROW_MATRIX). L'encodage doit correspondre à l'analyseur utilisé pour décoder le résultat.

Réponse

Résultat de la lecture

L'objet BulkExportResponse contient les champs spécifiques à l'opération suivants.

Nom

Type

Description

rows

ByteBuffer

Les données des lignes encodées. Utilisez l'analyseur correspondant au dataBlockType pour décoder les lignes.

nextStartPrimaryKey

PrimaryKey

La clé primaire de début pour la lecture suivante. Une valeur null indique que toutes les données de la plage spécifiée ont été renvoyées.

dataBlockType

DataBlockType

L'encodage des données des lignes renvoyées.

bodyBytes

long

Le nombre d'octets dans le corps de la réponse.

Exemples

Parcourir une table entière par pagination

Un seul appel bulkExport renvoie souvent seulement une partie de la plage. Pour analyser la table entière, transmettez la valeur nextStartPrimaryKey de chaque réponse comme clé primaire de début de l'appel suivant. Arrêtez lorsque nextStartPrimaryKey est 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);