importcom.alicloud.openservices.tablestore.SyncClient;import com.alicloud.openservices.tablestore.model.*;public classbatchWriteData {/***@paramclient
*@paramtableName 表名
*@paramprimaryKeyName 主键名称
* 备注:待完善(要添加哪些列?造哪些列的数据)*/
private voidbatchWriteRow(SyncClient client, String tableName, String primaryKeyName) {
BatchWriteRowRequest batchWriteRowRequest= newBatchWriteRowRequest();//构造rowPutChange1
PrimaryKeyBuilder pk1Builder =PrimaryKeyBuilder.createPrimaryKeyBuilder();
pk1Builder.addPrimaryKeyColumn(primaryKeyName, PrimaryKeyValue.fromString("pk1"));
RowPutChange rowPutChange1= newRowPutChange(tableName, pk1Builder.build());//添加一些列
for (int i = 0; i < 10; i++) {
rowPutChange1.addColumn(new Column("Col" +i, ColumnValue.fromLong(i)));
}//添加到batch操作中
batchWriteRowRequest.addRowChange(rowPutChange1);//构造rowPutChange2
PrimaryKeyBuilder pk2Builder =PrimaryKeyBuilder.createPrimaryKeyBuilder();
pk2Builder.addPrimaryKeyColumn(primaryKeyName, PrimaryKeyValue.fromString("pk2"));
RowPutChange rowPutChange2= newRowPutChange(tableName, pk2Builder.build());//添加一些列
for (int i = 0; i < 10; i++) {
rowPutChange2.addColumn(new Column("Col" +i, ColumnValue.fromLong(i)));
}//添加到batch操作中
batchWriteRowRequest.addRowChange(rowPutChange2);//构造rowUpdateChange
PrimaryKeyBuilder pk3Builder =PrimaryKeyBuilder.createPrimaryKeyBuilder();
pk3Builder.addPrimaryKeyColumn(primaryKeyName, PrimaryKeyValue.fromString("pk3"));
RowUpdateChange rowUpdateChange= newRowUpdateChange(tableName, pk3Builder.build());//添加一些列
for (int i = 0; i < 10; i++) {
rowUpdateChange.put(new Column("Col" +i, ColumnValue.fromLong(i)));
}//删除一列
rowUpdateChange.deleteColumns("Col10");//添加到batch操作中
batchWriteRowRequest.addRowChange(rowUpdateChange);//构造rowDeleteChange
PrimaryKeyBuilder pk4Builder =PrimaryKeyBuilder.createPrimaryKeyBuilder();
pk4Builder.addPrimaryKeyColumn(primaryKeyName, PrimaryKeyValue.fromString("pk4"));
RowDeleteChange rowDeleteChange= newRowDeleteChange(tableName, pk4Builder.build());//添加到batch操作中
batchWriteRowRequest.addRowChange(rowDeleteChange);
BatchWriteRowResponse response=client.batchWriteRow(batchWriteRowRequest);
System.out.println("是否全部成功:" +response.isAllSucceed());if (!response.isAllSucceed()) {for(BatchWriteRowResponse.RowResult rowResult : response.getFailedRows()) {
System.out.println("失败的行:" +batchWriteRowRequest.getRowChange(rowResult.getTableName(), rowResult.getIndex()).getPrimaryKey());
System.out.println("失败原因:" +rowResult.getError());
}/*** 可以通过createRequestForRetry方法再构造一个请求对失败的行进行重试.这里只给出构造重试请求的部分.
* 推荐的重试方法是使用SDK的自定义重试策略功能, 支持对batch操作的部分行错误进行重试. 设定重试策略后, 调用接口处即不需要增加重试代码.*/BatchWriteRowRequest retryRequest=batchWriteRowRequest.createRequestForRetry(response.getFailedRows());
}
}
}