Tous les produits
Search
Centre de documentation

Tablestore:Bulk import offline data

Dernière mise à jour :Aug 18, 2026

Le SDK Tablestore pour Java importe des données hors ligne en insérant, mettant à jour ou supprimant plusieurs lignes, et renvoie le résultat de chaque opération.

Prérequis

Installez le SDK Tablestore pour Java et initialisez le client.

Description

Appelez la méthode bulkImport pour soumettre plusieurs opérations sur des lignes dans une seule requête. Le serveur traite chaque ligne indépendamment et renvoie les résultats ligne par ligne ; l'échec d'une opération n'affecte pas les autres. Cette méthode est conçue pour les importations en bloc hors ligne dans des scénarios de big data.

public BulkImportResponse bulkImport(BulkImportRequest bulkImportRequest) throws TableStoreException, ClientException

L'exemple suivant insère cinq lignes dans la table bulk_import_demo via une seule requête en bloc et affiche le nombre de lignes ayant réussi ou échoué.

String tableName = "bulk_import_demo";

BulkImportRequest request = new BulkImportRequest(tableName);

List<RowChange> rowChanges = new ArrayList<RowChange>();
for (int i = 0; i < 5; i++) {
    PrimaryKey pk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
            .addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row" + i))
            .build();
    RowPutChange put = new RowPutChange(tableName, pk);
    put.addColumn(new Column("col1", ColumnValue.fromString("v" + i)));
    rowChanges.add(put);
}
request.addRowChanges(rowChanges);

BulkImportResponse response = client.bulkImport(request);

// Retrieve per-row results into succeedRows and failedRows
List<BulkImportResponse.RowResult> succeedRows = new ArrayList<BulkImportResponse.RowResult>();
List<BulkImportResponse.RowResult> failedRows = new ArrayList<BulkImportResponse.RowResult>();
response.getResult(succeedRows, failedRows);

System.out.println("All succeed: " + response.isAllSucceed());
System.out.println("Succeed: " + succeedRows.size() + ", Failed: " + failedRows.size());

Paramètres

Nom

Type

Description

tableName (obligatoire)

String

Nom de la table.

rowChanges (obligatoire)

List<RowChange>

Liste des opérations sur les lignes. Vous pouvez combiner les opérations suivantes dans une seule requête :

  • RowPutChange : Écriture d'une ligne. Pour plus de détails sur la configuration, consultez Écriture d'une ligne.

  • RowUpdateChange : Mise à jour d'une ligne. Pour plus de détails sur la configuration, consultez Mise à jour d'une ligne.

  • RowDeleteChange : Suppression d'une ligne. Pour plus de détails sur la configuration, consultez Suppression d'une ligne.

Réponse

Résultat de l'importation

L'objet BulkImportResponse contient le champ spécifique suivant.

Nom

Type

Description

rowResults

List<BulkImportResponse.RowResult>

Résultat de chaque opération sur une ligne, dans le même ordre que les éléments rowChanges de la requête. Appelez la méthode getRowResults() pour obtenir la liste.

Résultat par ligne

Chaque élément du tableau BulkImportResponse.rowResults[] est de type BulkImportResponse.RowResult.

Nom

Type

Description

succeed

boolean

Indique si l'opération sur la ligne a réussi. Appelez la méthode isSucceed() pour obtenir la valeur.

error

Error

Erreur associée à une opération sur une ligne ayant échoué. La valeur est null lorsque l'opération réussit.

index

int

Index de l'opération sur la ligne dans la liste rowChanges de la requête.

Exemples

Combinaison d'opérations d'insertion, de mise à jour et de suppression dans une seule requête

Utilisez un seul objet BulkImportRequest pour soumettre conjointement des opérations d'insertion, de mise à jour et de suppression.

String tableName = "bulk_import_demo";

BulkImportRequest request = new BulkImportRequest(tableName);

// Insert a new row
PrimaryKey pkPut = PrimaryKeyBuilder.createPrimaryKeyBuilder()
        .addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("mixed_put"))
        .build();
RowPutChange put = new RowPutChange(tableName, pkPut);
put.addColumn(new Column("col1", ColumnValue.fromString("put_value")));
request.addRowChange(put);

// Update an existing row (append a column)
PrimaryKey pkUpdate = PrimaryKeyBuilder.createPrimaryKeyBuilder()
        .addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row0"))
        .build();
RowUpdateChange update = new RowUpdateChange(tableName, pkUpdate);
update.put(new Column("col2", ColumnValue.fromLong(100)));
request.addRowChange(update);

// Delete an existing row
PrimaryKey pkDelete = PrimaryKeyBuilder.createPrimaryKeyBuilder()
        .addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row1"))
        .build();
RowDeleteChange delete = new RowDeleteChange(tableName, pkDelete);
request.addRowChange(delete);

BulkImportResponse response = client.bulkImport(request);
System.out.println("Mixed all succeed: " + response.isAllSucceed());

Nouvelle tentative pour les lignes ayant échoué

Utilisez la méthode createRequestForRetry(failedRows) pour construire une nouvelle requête à partir des lignes ayant échoué. La nouvelle tentative ne concerne que les lignes en échec, évitant ainsi de réappliquer les opérations déjà réussies.

String tableName = "bulk_import_demo";

BulkImportRequest request = new BulkImportRequest(tableName);

PrimaryKey pk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
        .addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("good"))
        .build();
RowPutChange row = new RowPutChange(tableName, pk);
row.addColumn(new Column("col1", ColumnValue.fromString("ok")));
request.addRowChange(row);

BulkImportResponse response = client.bulkImport(request);

List<BulkImportResponse.RowResult> succeedRows = new ArrayList<BulkImportResponse.RowResult>();
List<BulkImportResponse.RowResult> failedRows = new ArrayList<BulkImportResponse.RowResult>();
response.getResult(succeedRows, failedRows);

// If any rows failed, build a retry request that contains only the failed rows
if (!failedRows.isEmpty()) {
    BulkImportRequest retryRequest = request.createRequestForRetry(failedRows);
    BulkImportResponse retryResponse = client.bulkImport(retryRequest);
    System.out.println("Retry all succeed: " + retryResponse.isAllSucceed());
}