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 :
|
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 |
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 |
|
error |
Error |
Erreur associée à une opération sur une ligne ayant échoué. La valeur est |
|
index |
int |
Index de l'opération sur la ligne dans la liste |
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());
}